久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3873|回復(fù): 0
收起左側(cè)

stm8的12864菜單程序 反白滾動(dòng)菜單

[復(fù)制鏈接]
ID:76293 發(fā)表于 2017-12-4 20:42 | 顯示全部樓層 |閱讀模式
通過(guò)移植51單片機(jī)的菜單顯示程序,成功顯示并增加反白滾動(dòng) 菜單
0.png
單片機(jī)源程序如下:
  1. #include"stm8s.h"
  2. #include"stm8s_gpio.h"
  3. #include"Cry12864.h"
  4. uchar curr=1,currold;
  5. uchar curr_flag,currold_flag;
  6. uchar curr_flag1,currold_flag1;
  7. uchar curr_flag2,currold_flag2;
  8. uchar flag,flag1,flag2;
  9. uchar user16x16[]={ 0x00,0x00,0x20,0x00,0x30,0x00,0x38,0x00,0x3C,0x00,0x3E,0x00,0x3F,0x00,0x3F,0x80,
  10. 0x3F,0xC0,0x3F,0x80,0x3F,0x00,0x3E,0x00,0x3C,0x00,0x38,0x00,0x30,0x00,0x20,0x00,

  11. };

  12. unsigned char  *MainMenu[]=
  13. {
  14. {"  功能菜單"},
  15. {"登錄系統(tǒng)"},                                 
  16. {"電壓顯示一"},
  17. {"電壓顯示二"},
  18. };
  19. unsigned char  *MainMenu1[]=
  20. {
  21. {"  電流顯示一"},
  22. {"電流顯示二"},
  23. {"制作萬(wàn)年歷"},
  24. {"溫度傳感器"},
  25. {"  QQ音樂(lè)"},
  26. {"我的圖片"},
  27. {"本地音樂(lè)"},
  28. {"更多應(yīng)用"},
  29. };

  30. unsigned char  *MainMenu2[8]=
  31. {
  32. {"  全民清賬"},
  33. {"CF"},
  34. {"飛機(jī)"},
  35. {"王者榮耀"},
  36. {"  超級(jí)瑪麗"},
  37. {"魂斗羅"},
  38. {"非常英雄"},
  39. {"下一頁(yè)"},
  40. };

  41. unsigned char  *MainMenu3[]=
  42. {
  43. {"  幻月后續(xù)"},
  44. {"能否敵發(fā)送"},
  45. {"測(cè)試的個(gè)i哦"},
  46. {"飯店附近"},
  47. {"大幅度"},
  48. {"放大發(fā)送單個(gè)"},
  49. {"地方"},
  50. {"放大上輸給"},
  51. };
  52. extern const unsigned char shuzi_table[];

  53. #define LCD_RS_H      GPIOG->ODR|=0x01   //PD6拉高
  54. #define LCD_RS_L      GPIOG->ODR&=~0x01  //PD6拉低
  55. #define LCD_RW_H      GPIOG->ODR|=0x02   //PD7拉高
  56. #define LCD_RW_L      GPIOG->ODR&=~0x02  //PD7拉低
  57. #define LCD_EN_H      GPIOG->ODR|=0x04    //PD5拉高
  58. #define LCD_EN_L      GPIOG->ODR&=~0x04   //PD5拉低
  59. #define LCD_PSB_H     GPIOG->ODR|=0x08    //PD0拉高
  60. #define LCD_CSB_L     GPIOG->ODR&=~0x08   //PD0拉低
  61. /*******************************************
  62. 函數(shù)名稱(chēng):Delay_1ms
  63. 功    能:延時(shí)約1ms的時(shí)間
  64. 參    數(shù):無(wú)
  65. 返回值  :無(wú)
  66. ********************************************/
  67. void Delay_1ms(void)
  68. {
  69.         uint i,j;
  70.    
  71.         for(i = 16;i > 0;i--)
  72.           for(j=10;j>0;j--);
  73.          
  74. }
  75. /*******************************************
  76. 函數(shù)名稱(chēng):Delay_Nms
  77. 功    能:延時(shí)N個(gè)1ms的時(shí)間
  78. 參    數(shù):n--延時(shí)長(zhǎng)度
  79. 返回值  :無(wú)
  80. ********************************************/
  81. void Delay_Nms(uint n)
  82. {
  83.     uint k;
  84.    
  85.     for(k = n;k > 0;k--)    Delay_1ms();
  86. }

  87. void Io_Config(void)
  88. {  GPIOB->DDR|=0xff;   //PB端口設(shè)置為輸出
  89.    GPIOB->CR1|=0xff;//推免模式
  90.    GPIOB->CR2&=~0xff;//低速模式
  91.    GPIOG->DDR|=0xff;   //PA端口設(shè)置為輸出
  92.    GPIOG->CR1|=0xff;//推免模式
  93.    GPIOG->CR2&=~0xff;//低速模式*/

  94. }

  95. //讀狀態(tài),檢測(cè)忙
  96. void check_busy(void)
  97. {uchar busy;
  98. do
  99. { LCD_RS_L;
  100. LCD_RW_H;
  101. LCD_EN_L;
  102. Delay_1ms();
  103. LCD_EN_H;
  104. busy=GPIOB->IDR;
  105. Delay_1ms();
  106. LCD_EN_L;
  107. }
  108. while(busy&0x80);

  109. }

  110. /*******************************************
  111. 函數(shù)名稱(chēng):Write_Cmd
  112. 功    能:向液晶中寫(xiě)控制命令
  113. 參    數(shù):cmd--控制命令
  114. 返回值  :無(wú)
  115. ********************************************/
  116. void Write_Cmd(uchar cmd)
  117. {   
  118.    // check_busy();
  119.     LCD_RW_L;
  120.     LCD_RS_L;
  121.     Delay_1ms();
  122.     GPIOB->ODR&=0x00;
  123.     GPIOB->ODR|=cmd;
  124.     LCD_EN_H;
  125.     Delay_1ms();
  126.     LCD_EN_L;
  127.     Delay_1ms();        

  128.    
  129.      

  130. }
  131. /*******************************************
  132. 函數(shù)名稱(chēng):Write_Data
  133. 功    能:向液晶中寫(xiě)顯示數(shù)據(jù)
  134. 參    數(shù):dat--顯示數(shù)據(jù)
  135. 返回值  :無(wú)
  136. ********************************************/
  137. void  Write_Data(uchar dat)
  138. {  // check_busy();
  139.    LCD_RW_L;
  140.     LCD_RS_H;
  141.     Delay_1ms();
  142.     GPIOB->ODR&=0x00;
  143.     GPIOB->ODR|=dat;
  144.     LCD_EN_H;
  145.     Delay_1ms();
  146.     LCD_EN_L;
  147.     Delay_1ms();
  148. }  
  149. /*******************************************
  150. 函數(shù)名稱(chēng):Ini_Lcd
  151. 功    能:初始化液晶模塊
  152. 參    數(shù):無(wú)
  153. 返回值  :無(wú)
  154. ********************************************/
  155. void Ini_Lcd(void)
  156. {   Io_Config();
  157.     LCD_PSB_H;
  158.     Delay_Nms(100);
  159.     Write_Cmd(0x30);   //基本指令集
  160.     Delay_Nms(10);
  161.     Write_Cmd(0x02);   // 地址歸位
  162.     Delay_Nms(10);
  163.         Write_Cmd(0x0c);   //整體顯示打開(kāi),游標(biāo)關(guān)閉
  164.     Delay_Nms(10);
  165.         Write_Cmd(0x01);   //清除顯示
  166.     Delay_Nms(10);
  167.         Write_Cmd(0x06);   //游標(biāo)右移
  168.     Delay_Nms(10);
  169.         Write_Cmd(0x80);   //設(shè)定顯示的起始地址
  170. }
  171. /*******************************************
  172. 函數(shù)名稱(chēng):Clear_GDRAM
  173. 功    能:清除液晶GDRAM中的隨機(jī)數(shù)據(jù)
  174. 參    數(shù):無(wú)
  175. 返回值  :無(wú)
  176. ********************************************/
  177. void Clear_GDRAM(void)
  178. {
  179.   /*  uchar i,j,k;
  180.    
  181.         Write_Cmd(0x34);        //打開(kāi)擴(kuò)展指令集
  182.         i = 0x80;            
  183.         for(j = 0;j < 32;j++)
  184.         {
  185.         Write_Cmd(i++);
  186.         Write_Cmd(0x80);
  187.                   for(k = 0;k < 16;k++)
  188.                   {
  189.                       Write_Data(0x00);
  190.                   }
  191.         }
  192.         i = 0x80;
  193.          for(j = 0;j < 32;j++)
  194.         {
  195.              Write_Cmd(i++);
  196.         Write_Cmd(0x88);           
  197.                   for(k = 0;k < 16;k++)
  198.                   {
  199.                        Write_Data(0x00);
  200.                    }
  201.         }   
  202.      
  203.         Write_Cmd(0x30);        //回到基本指令集
  204.   */

  205.    Write_Cmd(0x01);
  206.    Delay_Nms(15);

  207.         
  208. }
  209. /*******************************************
  210. 函數(shù)名稱(chēng):Draw_PM
  211. 功    能:在整個(gè)液晶屏幕上畫(huà)圖
  212. 參    數(shù):無(wú)
  213. 返回值  :無(wú)
  214. ********************************************/
  215. void Draw_PM(const uchar *ptr)
  216. {
  217.     uchar i,j,k;
  218.    
  219.         Write_Cmd(0x34);        //打開(kāi)擴(kuò)展指令集
  220.         i = 0x80;            
  221.         for(j = 0;j < 32;j++)
  222.         {
  223.         Write_Cmd(i++);
  224.         Write_Cmd(0x80);
  225.                   for(k = 0;k < 16;k++)
  226.                   {
  227.                       Write_Data(*ptr++);
  228.                   }
  229.         }
  230.         i = 0x80;
  231.          for(j = 0;j < 32;j++)
  232.         {
  233.              Write_Cmd(i++);
  234.         Write_Cmd(0x88);           
  235.                   for(k = 0;k < 16;k++)
  236.                   {
  237.                        Write_Data(*ptr++);
  238.                    }
  239.         }  
  240.     Write_Cmd(0x36);        //打開(kāi)繪圖顯示
  241.         Write_Cmd(0x30);        //回到基本指令集
  242. }
  243. /*********************************************************/
  244. /*                                                       */
  245. /* 設(shè)定顯示位置                                          */
  246. /*                                                       */
  247. /*********************************************************/
  248. void lcd_pos(uchar X,uchar Y)
  249. {                          
  250.    uchar  pos;
  251.    if (X==0)
  252.      {X=0x80;}
  253.    else if (X==1)
  254.      {X=0x90;}
  255.    else if (X==2)
  256.      {X=0x88;}
  257.    else if (X==3)
  258.      {X=0x98;}
  259.    pos = X+Y ;  
  260.    Write_Cmd(pos);     //顯示地址
  261. }

  262. /*******************************************
  263. 函數(shù)名稱(chēng):Disp1Char
  264. 功    能:在某個(gè)位置顯示一個(gè)字符
  265. 參    數(shù):x--位置的列坐標(biāo)
  266.           y--位置的行坐標(biāo)
  267.           data--顯示的字符數(shù)據(jù)
  268. 返回值  :無(wú)
  269. ********************************************/
  270. void Disp1Char(uchar x,uchar y,uchar data)
  271. {
  272.     lcd_pos( x, y );                        
  273.     Write_Data( data );               
  274. }

  275. /*******************************************
  276. 函數(shù)名稱(chēng):DispNchar
  277. 功    能:讓液晶從某個(gè)位置起連續(xù)顯示N個(gè)字符
  278. 參    數(shù):x--位置的列坐標(biāo)
  279.           y--位置的行坐標(biāo)
  280.           n--字符個(gè)數(shù)
  281.           ptr--指向字符存放位置的指針
  282. 返回值  :無(wú)
  283. ********************************************/
  284. void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
  285. {
  286.     uchar i;
  287.    
  288.     for (i=0;i<n;i++)
  289.     {
  290.         Disp1Char(x++,y,ptr[i]);
  291.         if (x == 0x0f)
  292.         {
  293.            x = 0;
  294.             y ^= 1;
  295.         }
  296.     }
  297. }

  298. /*******************************************
  299. 函數(shù)名稱(chēng):DispString
  300. 功    能:讓液晶從某個(gè)位置起連續(xù)顯示N個(gè)字符
  301. 參    數(shù):x--位置的列坐標(biāo)
  302.           y--位置的行坐標(biāo)
  303.           n--字符個(gè)數(shù)
  304.           ptr--指向字符存放位置的指針
  305. 返回值  :無(wú)
  306. ********************************************/

  307. void  DispString(uchar x,uchar y,uchar *ptr)
  308. {
  309.     uchar i = 0;
  310.     lcd_pos( x, y );
  311.     while(ptr[i] != '\0')
  312.      {                         //顯示字符
  313.       
  314.        Write_Data(ptr[i]);
  315.        i++;
  316.      }

  317. }
  318. /*******************************************
  319. 函數(shù)名稱(chēng):Draw_TX
  320. 功    能:顯示一個(gè)16*16大小的圖形
  321. 參    數(shù):Yaddr--Y地址
  322.           Xaddr--X地址
  323.           dp--指向圖形數(shù)據(jù)存放地址的指針
  324. 返回值  :無(wú)
  325. ********************************************/
  326. void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp)
  327. {
  328.     uchar j;
  329.     uchar k=0;

  330.    // Write_Cmd(0x01);  //清屏,只能清除DDRAM
  331.     Write_Cmd(0x34);  //使用擴(kuò)展指令集,關(guān)閉繪圖顯示
  332.     for(j=0;j<16;j++)
  333.     {
  334.         Write_Cmd(Yaddr++);       //Y地址
  335.         Write_Cmd(Xaddr);    //X地址
  336.           Write_Data(dp[k++]);  
  337.           Write_Data(dp[k++]);
  338.     }
  339.     Write_Cmd(0x36);  //打開(kāi)繪圖顯示
  340.   //  Write_Cmd(0x30);  //回到基本指令集模式
  341. }
  342. /***********************************************
  343.                寫(xiě)入用戶(hù)自定義函數(shù)
  344. ***********************************************/
  345. void CGRAM()
  346. {
  347.      int i;
  348.      Write_Cmd(0x30);
  349.      Write_Cmd(0x40);          //對(duì)CGRAM第一個(gè)自定義符操作
  350.      for(i=0;i<16;i++)
  351.        {
  352.         Write_Data(user16x16[i*2]);
  353.         Write_Data(user16x16[i*2+1]);
  354.       }
  355. }  
  356. /***********************************************
  357.                顯示用戶(hù)自定義字符
  358. ***********************************************/
  359. void DisplayCGRAM(unsigned char x,unsigned char y)
  360. {
  361. switch(y)
  362.      {
  363.    case 1: Write_Cmd(0x80+x);break;
  364.    case 2: Write_Cmd(0x90+x);break;
  365.    case 3: Write_Cmd(0x88+x);break;
  366.    case 4: Write_Cmd(0x98+x);break;
  367.    default:break;
  368.   }
  369.     Write_Data(00);                                          //é???óDò???×?·?2ù×÷0x04á?  ?ùò??±?óD′
  370.     Write_Data(00);                 //D′×?·?          Write_Data(user16x16[i*2]);
  371.                         //            Write_Data(user16x16[i*2+1]);
  372. }   

  373. /*************************************************************


  374. //為反白做準(zhǔn)備,目地是在圖形顯示時(shí)防止有噪點(diǎn)


  375. *************************************************************/
  376. void display()        //為反白做準(zhǔn)備,目地是在圖形顯示時(shí)防止有噪點(diǎn)

  377. {

  378. uchar i,j;

  379. Write_Cmd(0x34); //寫(xiě)數(shù)據(jù)時(shí),關(guān)閉圖形顯示

  380. for(i=0;i<32;i++)

  381. {

  382. Write_Cmd(0x80+i); //先寫(xiě)入水平坐標(biāo)值

  383. Write_Cmd(0x80); //寫(xiě)入垂直坐標(biāo)值

  384. for(j=0;j<16;j++) //再寫(xiě)入兩個(gè)8位元的數(shù)據(jù)

  385. Write_Data(0x00);

  386. Delay_Nms(1);

  387. }

  388. for(i=0;i<32;i++)

  389. {

  390. Write_Cmd(0x80+i);

  391. Write_Cmd(0x88);

  392. for(j=0;j<16;j++)

  393. Write_Data(0x00);

  394. Delay_Nms(1);

  395. }
  396. Write_Cmd(0x36);//寫(xiě)完數(shù)據(jù),開(kāi)圖形顯示
  397. }

  398. /*******************************************************

  399.          反白函數(shù)
  400. *********************************************************/
  401. void photodisplay(uchar x,uchar y,uchar width)        //反白,X值為0-7,Y值為0-3,width為行反白格數(shù)

  402. {

  403. uchar i,j,flag=0x00;

  404. display();

  405. if(y>1)

  406. {

  407. flag=0x08;

  408. y=y-2;

  409. }

  410. Write_Cmd(0x34); //寫(xiě)數(shù)據(jù)時(shí),關(guān)閉圖形顯示,且打開(kāi)擴(kuò)展指令集


  411. ……………………

  412. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
12864菜單程序.rar (1 MB, 下載次數(shù): 61)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费福利 | 国产一区999 | 日韩中文一区 | 亚洲天天干 | 国产1区 | 国产精品一区久久久久 | 日韩av免费看 | 日韩不卡一区二区三区 | 亚洲激情网站 | 精品少妇一区二区三区在线播放 | 狠狠干五月天 | 国产欧美日韩 | 中文在线一区二区 | 欧美一区二区视频 | 中文二区| 九九热视频这里只有精品 | 天天操天天摸天天干 | 久久看片| www.青娱乐| 国产高清自拍视频在线观看 | 天堂在线91 | 亚洲91av | 99久久精品国产一区二区三区 | 欧美一级二级三级视频 | 日韩av第一页 | 操操操日日日 | 亚洲欧洲在线看 | 天天噜天天干 | 国产美女特级嫩嫩嫩bbb片 | 97在线观看| 国产精品亚洲成在人线 | 国产精品福利网站 | 亚洲成人一区 | 久久精品欧美视频 | 91免费高清 | 北条麻妃av一区二区三区 | 激情av免费看 | 欧美a√| 国产一级片免费视频 | 精品视频一区二区三区 | 久久香焦 |