通過移植51單片機的菜單顯示程序,成功顯示并增加反白滾動 菜單
0.png (7.38 KB, 下載次數: 35)
下載附件
2017-12-4 23:53 上傳
單片機源程序如下:
- #include"stm8s.h"
- #include"stm8s_gpio.h"
- #include"Cry12864.h"
- uchar curr=1,currold;
- uchar curr_flag,currold_flag;
- uchar curr_flag1,currold_flag1;
- uchar curr_flag2,currold_flag2;
- uchar flag,flag1,flag2;
- uchar user16x16[]={ 0x00,0x00,0x20,0x00,0x30,0x00,0x38,0x00,0x3C,0x00,0x3E,0x00,0x3F,0x00,0x3F,0x80,
- 0x3F,0xC0,0x3F,0x80,0x3F,0x00,0x3E,0x00,0x3C,0x00,0x38,0x00,0x30,0x00,0x20,0x00,
- };
- unsigned char *MainMenu[]=
- {
- {" 功能菜單"},
- {"登錄系統"},
- {"電壓顯示一"},
- {"電壓顯示二"},
- };
- unsigned char *MainMenu1[]=
- {
- {" 電流顯示一"},
- {"電流顯示二"},
- {"制作萬年歷"},
- {"溫度傳感器"},
- {" QQ音樂"},
- {"我的圖片"},
- {"本地音樂"},
- {"更多應用"},
- };
- unsigned char *MainMenu2[8]=
- {
- {" 全民清賬"},
- {"CF"},
- {"飛機"},
- {"王者榮耀"},
- {" 超級瑪麗"},
- {"魂斗羅"},
- {"非常英雄"},
- {"下一頁"},
- };
- unsigned char *MainMenu3[]=
- {
- {" 幻月后續"},
- {"能否敵發送"},
- {"測試的個i哦"},
- {"飯店附近"},
- {"大幅度"},
- {"放大發送單個"},
- {"地方"},
- {"放大上輸給"},
- };
- extern const unsigned char shuzi_table[];
- #define LCD_RS_H GPIOG->ODR|=0x01 //PD6拉高
- #define LCD_RS_L GPIOG->ODR&=~0x01 //PD6拉低
- #define LCD_RW_H GPIOG->ODR|=0x02 //PD7拉高
- #define LCD_RW_L GPIOG->ODR&=~0x02 //PD7拉低
- #define LCD_EN_H GPIOG->ODR|=0x04 //PD5拉高
- #define LCD_EN_L GPIOG->ODR&=~0x04 //PD5拉低
- #define LCD_PSB_H GPIOG->ODR|=0x08 //PD0拉高
- #define LCD_CSB_L GPIOG->ODR&=~0x08 //PD0拉低
- /*******************************************
- 函數名稱:Delay_1ms
- 功 能:延時約1ms的時間
- 參 數:無
- 返回值 :無
- ********************************************/
- void Delay_1ms(void)
- {
- uint i,j;
-
- for(i = 16;i > 0;i--)
- for(j=10;j>0;j--);
-
- }
- /*******************************************
- 函數名稱:Delay_Nms
- 功 能:延時N個1ms的時間
- 參 數:n--延時長度
- 返回值 :無
- ********************************************/
- void Delay_Nms(uint n)
- {
- uint k;
-
- for(k = n;k > 0;k--) Delay_1ms();
- }
- void Io_Config(void)
- { GPIOB->DDR|=0xff; //PB端口設置為輸出
- GPIOB->CR1|=0xff;//推免模式
- GPIOB->CR2&=~0xff;//低速模式
- GPIOG->DDR|=0xff; //PA端口設置為輸出
- GPIOG->CR1|=0xff;//推免模式
- GPIOG->CR2&=~0xff;//低速模式*/
- }
- //讀狀態,檢測忙
- void check_busy(void)
- {uchar busy;
- do
- { LCD_RS_L;
- LCD_RW_H;
- LCD_EN_L;
- Delay_1ms();
- LCD_EN_H;
- busy=GPIOB->IDR;
- Delay_1ms();
- LCD_EN_L;
- }
- while(busy&0x80);
- }
- /*******************************************
- 函數名稱:Write_Cmd
- 功 能:向液晶中寫控制命令
- 參 數:cmd--控制命令
- 返回值 :無
- ********************************************/
- void Write_Cmd(uchar cmd)
- {
- // check_busy();
- LCD_RW_L;
- LCD_RS_L;
- Delay_1ms();
- GPIOB->ODR&=0x00;
- GPIOB->ODR|=cmd;
- LCD_EN_H;
- Delay_1ms();
- LCD_EN_L;
- Delay_1ms();
-
-
-
- }
- /*******************************************
- 函數名稱:Write_Data
- 功 能:向液晶中寫顯示數據
- 參 數:dat--顯示數據
- 返回值 :無
- ********************************************/
- void Write_Data(uchar dat)
- { // check_busy();
- LCD_RW_L;
- LCD_RS_H;
- Delay_1ms();
- GPIOB->ODR&=0x00;
- GPIOB->ODR|=dat;
- LCD_EN_H;
- Delay_1ms();
- LCD_EN_L;
- Delay_1ms();
- }
- /*******************************************
- 函數名稱:Ini_Lcd
- 功 能:初始化液晶模塊
- 參 數:無
- 返回值 :無
- ********************************************/
- void Ini_Lcd(void)
- { Io_Config();
- LCD_PSB_H;
- Delay_Nms(100);
- Write_Cmd(0x30); //基本指令集
- Delay_Nms(10);
- Write_Cmd(0x02); // 地址歸位
- Delay_Nms(10);
- Write_Cmd(0x0c); //整體顯示打開,游標關閉
- Delay_Nms(10);
- Write_Cmd(0x01); //清除顯示
- Delay_Nms(10);
- Write_Cmd(0x06); //游標右移
- Delay_Nms(10);
- Write_Cmd(0x80); //設定顯示的起始地址
- }
- /*******************************************
- 函數名稱:Clear_GDRAM
- 功 能:清除液晶GDRAM中的隨機數據
- 參 數:無
- 返回值 :無
- ********************************************/
- void Clear_GDRAM(void)
- {
- /* uchar i,j,k;
-
- Write_Cmd(0x34); //打開擴展指令集
- i = 0x80;
- for(j = 0;j < 32;j++)
- {
- Write_Cmd(i++);
- Write_Cmd(0x80);
- for(k = 0;k < 16;k++)
- {
- Write_Data(0x00);
- }
- }
- i = 0x80;
- for(j = 0;j < 32;j++)
- {
- Write_Cmd(i++);
- Write_Cmd(0x88);
- for(k = 0;k < 16;k++)
- {
- Write_Data(0x00);
- }
- }
-
- Write_Cmd(0x30); //回到基本指令集
- */
- Write_Cmd(0x01);
- Delay_Nms(15);
-
- }
- /*******************************************
- 函數名稱:Draw_PM
- 功 能:在整個液晶屏幕上畫圖
- 參 數:無
- 返回值 :無
- ********************************************/
- void Draw_PM(const uchar *ptr)
- {
- uchar i,j,k;
-
- Write_Cmd(0x34); //打開擴展指令集
- i = 0x80;
- for(j = 0;j < 32;j++)
- {
- Write_Cmd(i++);
- Write_Cmd(0x80);
- for(k = 0;k < 16;k++)
- {
- Write_Data(*ptr++);
- }
- }
- i = 0x80;
- for(j = 0;j < 32;j++)
- {
- Write_Cmd(i++);
- Write_Cmd(0x88);
- for(k = 0;k < 16;k++)
- {
- Write_Data(*ptr++);
- }
- }
- Write_Cmd(0x36); //打開繪圖顯示
- Write_Cmd(0x30); //回到基本指令集
- }
- /*********************************************************/
- /* */
- /* 設定顯示位置 */
- /* */
- /*********************************************************/
- void lcd_pos(uchar X,uchar Y)
- {
- uchar pos;
- if (X==0)
- {X=0x80;}
- else if (X==1)
- {X=0x90;}
- else if (X==2)
- {X=0x88;}
- else if (X==3)
- {X=0x98;}
- pos = X+Y ;
- Write_Cmd(pos); //顯示地址
- }
- /*******************************************
- 函數名稱:Disp1Char
- 功 能:在某個位置顯示一個字符
- 參 數:x--位置的列坐標
- y--位置的行坐標
- data--顯示的字符數據
- 返回值 :無
- ********************************************/
- void Disp1Char(uchar x,uchar y,uchar data)
- {
- lcd_pos( x, y );
- Write_Data( data );
- }
- /*******************************************
- 函數名稱:DispNchar
- 功 能:讓液晶從某個位置起連續顯示N個字符
- 參 數:x--位置的列坐標
- y--位置的行坐標
- n--字符個數
- ptr--指向字符存放位置的指針
- 返回值 :無
- ********************************************/
- void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
- {
- uchar i;
-
- for (i=0;i<n;i++)
- {
- Disp1Char(x++,y,ptr[i]);
- if (x == 0x0f)
- {
- x = 0;
- y ^= 1;
- }
- }
- }
- /*******************************************
- 函數名稱:DispString
- 功 能:讓液晶從某個位置起連續顯示N個字符
- 參 數:x--位置的列坐標
- y--位置的行坐標
- n--字符個數
- ptr--指向字符存放位置的指針
- 返回值 :無
- ********************************************/
- void DispString(uchar x,uchar y,uchar *ptr)
- {
- uchar i = 0;
- lcd_pos( x, y );
- while(ptr[i] != '\0')
- { //顯示字符
-
- Write_Data(ptr[i]);
- i++;
- }
- }
- /*******************************************
- 函數名稱:Draw_TX
- 功 能:顯示一個16*16大小的圖形
- 參 數:Yaddr--Y地址
- Xaddr--X地址
- dp--指向圖形數據存放地址的指針
- 返回值 :無
- ********************************************/
- void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp)
- {
- uchar j;
- uchar k=0;
-
- // Write_Cmd(0x01); //清屏,只能清除DDRAM
- Write_Cmd(0x34); //使用擴展指令集,關閉繪圖顯示
- for(j=0;j<16;j++)
- {
- Write_Cmd(Yaddr++); //Y地址
- Write_Cmd(Xaddr); //X地址
- Write_Data(dp[k++]);
- Write_Data(dp[k++]);
- }
- Write_Cmd(0x36); //打開繪圖顯示
- // Write_Cmd(0x30); //回到基本指令集模式
- }
- /***********************************************
- 寫入用戶自定義函數
- ***********************************************/
- void CGRAM()
- {
- int i;
- Write_Cmd(0x30);
- Write_Cmd(0x40); //對CGRAM第一個自定義符操作
- for(i=0;i<16;i++)
- {
- Write_Data(user16x16[i*2]);
- Write_Data(user16x16[i*2+1]);
- }
- }
- /***********************************************
- 顯示用戶自定義字符
- ***********************************************/
- void DisplayCGRAM(unsigned char x,unsigned char y)
- {
- switch(y)
- {
- case 1: Write_Cmd(0x80+x);break;
- case 2: Write_Cmd(0x90+x);break;
- case 3: Write_Cmd(0x88+x);break;
- case 4: Write_Cmd(0x98+x);break;
- default:break;
- }
- Write_Data(00); //é???óDò???×?·?2ù×÷0x04á? ?ùò??±?óD′
- Write_Data(00); //D′×?·? Write_Data(user16x16[i*2]);
- // Write_Data(user16x16[i*2+1]);
- }
- /*************************************************************
- //為反白做準備,目地是在圖形顯示時防止有噪點
- *************************************************************/
- void display() //為反白做準備,目地是在圖形顯示時防止有噪點
- {
- uchar i,j;
- Write_Cmd(0x34); //寫數據時,關閉圖形顯示
- for(i=0;i<32;i++)
- {
- Write_Cmd(0x80+i); //先寫入水平坐標值
- Write_Cmd(0x80); //寫入垂直坐標值
- for(j=0;j<16;j++) //再寫入兩個8位元的數據
- Write_Data(0x00);
- Delay_Nms(1);
- }
- for(i=0;i<32;i++)
- {
- Write_Cmd(0x80+i);
- Write_Cmd(0x88);
- for(j=0;j<16;j++)
- Write_Data(0x00);
- Delay_Nms(1);
- }
- Write_Cmd(0x36);//寫完數據,開圖形顯示
- }
- /*******************************************************
- 反白函數
- *********************************************************/
- void photodisplay(uchar x,uchar y,uchar width) //反白,X值為0-7,Y值為0-3,width為行反白格數
- {
- uchar i,j,flag=0x00;
- display();
- if(y>1)
- {
- flag=0x08;
- y=y-2;
- }
- Write_Cmd(0x34); //寫數據時,關閉圖形顯示,且打開擴展指令集
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
12864菜單程序.rar
(1 MB, 下載次數: 61)
2017-12-4 20:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|