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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12232|回復: 26
收起左側

51單片機12864三級菜單圖形菜單程序,很6的一個程序哦!

  [復制鏈接]
ID:84765 發表于 2017-3-1 13:43 | 顯示全部樓層 |閱讀模式
0.png
完整源碼下載:
caidan12864 .zip (207.75 KB, 下載次數: 354)



單片機主程序預覽:
  1. /**************************************************************
  2. *        +---------------------------------------------------+          *
  3. *                              12864三級菜單顯示                                                  *
  4. *        +---------------------------------------------------+            *
  5. *                                                                                                                          *
  6. *  此源碼版權屬 小牛 全權享有,如欲引用,敬請署名并告知                  *
  7. *        嚴禁隨意用于商業目的,違者必究,后果自負                          *
  8. *                                                                                                                         *
  9. *  運行環境:STC12C5A60S2單片機 12M晶振                                                  *
  10. *  程序說明:在12864上面實現三級菜單顯示                                          *
  11. **************************************************************/
  12. #include<reg52.h>
  13. #include<intrins.h>
  14. #include"def.h"
  15. #include"mode.h"
  16. #include"fuction.h"

  17. void main()
  18. {       

  19.         init();
  20.         while(1)
  21.         {
  22.                 menucut(0,mun,table10,table0sub[0]);
  23.                 menucut(1,table0,table9,table1sub[0]);
  24.                 menucut(2,table1,table8,table2sub[0]);
  25.                 menucut(3,table2,table7,table3sub[0]);
  26.                 menucut(4,table3,table6,table4sub[0]);
  27.                 menucut(5,table4,table11,table5sub[0]);
  28.                 menucut(6,table5,table12,table6sub[0]);               
  29.         }
  30. }
復制代碼
  1. void init()
  2. {
  3.         w_com(0x01);        //清屏
  4.         w_com(0x02);        //地址-》00H
  5.         w_com(0x0c);        //顯示狀態設置
  6.         w_com(0x30);        //功能設定
  7.         w_com(0x80);
  8.         w_com(0x01);        //清屏

  9. }
  10. //——————————讀忙!—————————————//
  11. void r_busy()
  12. {
  13.         IO=0xff;
  14.         R_S=0;
  15.         W_R=1;
  16.         E=1;
  17.         while(IO&0x80);
  18.         E=0;
  19.       
  20. }
  21. //——————————寫指令—————————————//
  22. void w_com(uchar com)
  23. {
  24.         r_busy();
  25.         R_S=0;
  26.         W_R=0;
  27.         E=0;
  28.         E=1;
  29.         IO=com;
  30.         E=0;
  31. }
  32. //——————————擴充指令——————————————//
  33. void w_ecom(uchar ecom)
  34. {
  35.         w_com(0x34); //選擇8位數據發送,選擇為擴充指令
  36.         r_busy();
  37.         R_S=0;
  38.         W_R=0;
  39.         E=0;
  40.         E=1;
  41.         IO=ecom;
  42.         E=0;
  43. }
  44. //——————————寫數據—————————————//
  45. void w_dat(uchar dat)
  46. {
  47.       
  48.         r_busy();

  49.         R_S=1;
  50.         W_R=0;
  51.         E=0;
  52.         E=1;
  53.         IO=dat;
  54.         E=0;
  55. }

  56. void delay(uchar x)
  57. {
  58.         uchar i,j;
  59.         for(i=0;i<x;i++)
  60.                 for(j=0;j<124;j++);
  61. }

  62. void draw_pic(uchar *pic)
  63. {
  64.         uchar i,j;
  65.         w_com(0x01);        //清屏

  66.         for(i=0;i<32;i++)
  67.         {      
  68.                 w_ecom(0x80+i);                   //擴充指令,設定繪圖RAM垂直地址
  69.                 w_ecom(0x80);                   //擴充指令,設定繪圖RAM水平地址
  70.                 for(j=0;j<16;j++)
  71.                 {
  72.                         w_dat(*(pic++));
  73.                 }
  74.         }

  75.         for(i=0;i<32;i++)
  76.         {      
  77.                 w_ecom(0x80+i);                        //擴充指令,設定繪圖RAM垂直地址
  78.                 w_ecom(0x88);                        //擴充指令,設定繪圖RAM水平地址
  79.                 for(j=0;j<16;j++)
  80.                 {
  81.                
  82.                         w_dat(*(pic++));
  83.                 }
  84.         }
  85.                
  86.         w_com(0x36);
  87.         flag=1;
  88. }

  89. void draw_submune(uchar *pic,uchar row)                   //定義兩個變量*pic-->圖片字模的首地址;row-->子菜單要選擇的行
  90. {
  91.         uchar i,j;
  92.         flag=0;
  93.         w_com(0x01);        //清屏

  94.         for(i=0;i<32;i++)
  95.         {      
  96.                 w_ecom(0x80+i);                   //擴充指令,設定繪圖RAM垂直地址
  97.                 w_ecom(0x80);                   //擴充指令,設定繪圖RAM水平地址
  98.                 for(j=0;j<16;j++)
  99.                 {
  100.                         if((i>(16*(row-1))) && (i<(row*16)) && row<3)         //用于判斷LCD前32行的行反白
  101.                         w_dat(~(*(pic++)));                                                                 //如果是選擇的反白行就反顯其數據
  102.                         else                                                                                         //否則就正常顯示其數據
  103.                         w_dat(*(pic++));
  104.                 }
  105.         }

  106.         for(i=0;i<32;i++)
  107.         {      
  108.                 w_ecom(0x80+i);                        //擴充指令,設定繪圖RAM垂直地址
  109.                 w_ecom(0x88);                        //擴充指令,設定繪圖RAM水平地址
  110.                 for(j=0;j<16;j++)
  111.                 {
  112.                
  113.                         if((i>(16*(row-3))) && (i<((row-2)*16)) && row>2)                //用于判斷LCD后32行的行反白
  114.                         w_dat(~(*(pic++)));                                                                                //如果是選擇的反白行就反顯其數據                                                                                                
  115.                         else                                                                                                        //否則就正常顯示其數據
  116.                         w_dat(*(pic++));

  117.                 }
  118.         }
  119.                
  120.         w_com(0x36);                                                                                 
  121.         flag=1;                                                                                                                           //子菜單顯示標志位      
  122. }


  123. void key()
  124. {

  125.         if((s3==0) || (s2==0) )
  126.         {
  127.                 delay(10);
  128.                 if(s3==0)
  129.                 {
  130.                         temp++;
  131.                         if(temp>6)
  132.                         temp=0;
  133.                         while(!s3);      
  134.                 }

  135.                 else if(s2==0)
  136.                 {
  137.                         temp--;
  138.                         if(temp>6)
  139.                         temp=6;
  140.                         while(!s2);      
  141.                 }
  142.         }
  143. }

  144. void keycut()
  145. {
  146.         if((s1==0) || (s0==0) )
  147.         {
  148.                 delay(10);
  149.                 if(s1==0)
  150.                 {
  151.                         submune=1;
  152.                         if(sub && subflag)
  153.                         subflag1=1;

  154.                         while(!s1);      
  155.                 }
  156.                
  157.                 if(submune==0)
  158.                 return;

  159.                 else if(s0==0)
  160.                 {

  161.                         sub=0;
  162.                         submune=0;
  163.                         subflag1=0;
  164.                         submune1=1;

  165.                         if(sub1)
  166.                         {
  167.                                 submune=1;
  168.                                 sub1=0;
  169.                                 sub=0;
  170.                                 flag=1;
  171.                                 subflag=0;
  172.                         }
  173.                        
  174.                         else
  175.                         {
  176.                                 flag=0;
  177.                                 submune=0;
  178.                                 subflag=0;
  179.                         }
  180.                         
  181.                        
  182.                        
  183.                         while(!s0);
  184.                        
  185.                 }
  186.                
  187.                
  188.         }


  189. }

  190. void key_submune()
  191. {

  192.         if((s3==0) || (s2==0))
  193.         {
  194.                 delay(10);
  195.                 if(s3==0)
  196.                 {
  197.                         submune1++;
  198.                         if(submune1>4)
  199.                         submune1=1;
  200.                         while(!s3);      
  201.                 }

  202.                 else if(s2==0)
  203.                 {
  204.                         submune1--;
  205.                         if(submune1==0)
  206.                         submune1=4;
  207.                         while(!s2);      
  208.                 }
  209.                 subflag=0;
  210.         }
  211. }

  212. void key_submune1()
  213. {

  214.         if((s3==0) || (s2==0))
  215.         {
  216.                 delay(10);
  217.                 if(s3==0)
  218.                 {
  219.                         submune2++;
  220.                         if(submune2>4)
  221.                         submune2=1;
  222.                         while(!s3);      
  223.                 }

  224.                 else if(s2==0)
  225.                 {
  226.                         submune2--;
  227.                         if(submune2==0)
  228.                         submune2=4;
  229.                         while(!s2);      
  230.                 }
  231.                 subflag=0;
  232.         }
  233. }

  234. /****************************************************************************
  235. *         num-->第一級菜單的標志位;*add-->第一級菜單的圖片的地址入口                        *
  236. *        *sbuadd第二級菜單的圖片的地址入口;*sbuadd1第三級菜單的圖片的地址入口;        *
  237. *****************************************************************************/
  238. void menucut(uchar num,uchar *add,uchar *sbuadd,uchar *sbuadd1)         
  239. {
  240.         while(num==temp)                                          //第一級菜單的標志位判斷條件
  241.         {
  242.                 draw_pic(add);                                          //畫第一級菜單的圖形界面

  243. /*第一級菜單界面等待時的要支持第一級菜單的切換和第二級界面的進入和返回 */
  244.                 while((num==temp) && flag)               
  245.                 {
  246.                         key();                                                //第一級菜單界面的切換
  247.                         keycut();                                        //第二級界面的進入
  248.                         while((num==temp) && (submune==1)) //第二級菜單的標志位判斷條件
  249.                         {
  250.                                 draw_submune(sbuadd,submune1);        //畫第二級菜單的圖形界面
  251.                                 subflag=1;                                                //畫完第二級菜單的圖形界面要置位進入可以進行界面切換的循環
  252. /*第二級菜單界面等待時的要支持第二級菜單的切換和第三級界面的進入和返回 */
  253.                                 while((num==temp) && (submune==1) && subflag)
  254.                                 {
  255.                                         sub=1;                                 //第三級菜單的標志位用于區分其級數
  256.                                         keycut();                         //第二級菜單界面的進入第三級菜單切換和返回第一級菜單
  257.                                         key_submune();                 //第二級界面的進入
  258.                                         while(subflag1 && sub)
  259.                                         {
  260. /*第三級菜單是一個二維數組所以在第二級進入第三級的時候要根據第二級的標志位選擇進入第三級的的地址入口*/
  261.                                                 draw_submune(sbuadd1+((submune1-1)*1024),submune2);          //畫第三級菜單的圖形界面
  262.                                                 subflag=1;
  263.                                                 sub1=1;                  //畫完第三級菜單的圖形界面要置位進入可以進行界面切換的循環
  264.                                                 while(subflag1 && sub && subflag)
  265.                                                 {
  266.                                                          key_submune1();   //第三級界面的切換
  267.                                                          keycut();                   //第三級界面的返回
  268.                                                 }               
  269.                                         }
  270.                                 }               
  271.                         }
  272.                 }
  273.         }
  274. }

  275. #endif
復制代碼



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:236426 發表于 2017-9-28 20:42 | 顯示全部樓層
下載了,參考一下
回復

使用道具 舉報

ID:201936 發表于 2017-9-29 08:35 | 顯示全部樓層
下載了學習學習
回復

使用道具 舉報

ID:230847 發表于 2017-9-30 09:03 來自手機 | 顯示全部樓層
謝謝樓主,學習一下
回復

使用道具 舉報

ID:235691 發表于 2017-9-30 10:35 | 顯示全部樓層

下載了,參考一下
回復

使用道具 舉報

ID:235868 發表于 2017-9-30 19:39 | 顯示全部樓層
樓主,切換了幾個界面,液晶屏突然就死機了,是怎么回事啊
回復

使用道具 舉報

ID:101808 發表于 2017-11-14 18:10 | 顯示全部樓層
45k啊,這可是個大程序!
回復

使用道具 舉報

ID:344184 發表于 2018-6-3 20:29 | 顯示全部樓層
謝謝樓主,學習一下
回復

使用道具 舉報

ID:63646 發表于 2018-7-17 10:35 | 顯示全部樓層
非常好的資料
回復

使用道具 舉報

ID:378458 發表于 2018-7-24 14:25 | 顯示全部樓層
正好在研究菜單,下載下來好好學習下
回復

使用道具 舉報

ID:374157 發表于 2018-8-10 14:36 | 顯示全部樓層
下載試試
回復

使用道具 舉報

ID:334500 發表于 2018-8-19 10:15 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:408907 發表于 2018-10-13 10:28 | 顯示全部樓層
哈哈 好好學習一下!!
回復

使用道具 舉報

ID:82419 發表于 2018-10-13 18:18 來自手機 | 顯示全部樓層
留下腳印
回復

使用道具 舉報

ID:408907 發表于 2018-10-21 21:54 | 顯示全部樓層
學習一下,看看如何搞定菜單。
回復

使用道具 舉報

ID:37147 發表于 2019-5-17 18:35 | 顯示全部樓層
不知如何移植STM32
回復

使用道具 舉報

ID:202803 發表于 2019-6-18 22:40 | 顯示全部樓層
樓主能貼圖片出來看看嗎
回復

使用道具 舉報

ID:547522 發表于 2019-7-7 10:08 來自手機 | 顯示全部樓層
對于我來說超牛啊,51黑有你更精彩。
回復

使用道具 舉報

ID:589541 發表于 2019-7-24 14:16 | 顯示全部樓層
看看,學習學習,
回復

使用道具 舉報

ID:206373 發表于 2019-7-29 16:58 | 顯示全部樓層
下載了,參考一下
回復

使用道具 舉報

ID:617478 發表于 2020-2-26 07:40 | 顯示全部樓層
下載了,參考一下
回復

使用道具 舉報

ID:108573 發表于 2020-2-26 10:15 | 顯示全部樓層
不錯,記錄一下:12864多級菜單
回復

使用道具 舉報

ID:231648 發表于 2020-4-7 16:26 | 顯示全部樓層
移植OLED 屏幕試試額 多謝博主
回復

使用道具 舉報

ID:71535 發表于 2020-4-7 17:18 | 顯示全部樓層
12864多級菜單學了很久還沒弄明白,希望這次好學。
回復

使用道具 舉報

ID:123917 發表于 2024-6-20 22:48 | 顯示全部樓層
請教,我下載后怎么看不到第二圖片的代碼
回復

使用道具 舉報

ID:1064915 發表于 2024-6-21 11:10 | 顯示全部樓層
程序是帶字庫的,能否改成ks0108的學習下
回復

使用道具 舉報

ID:1044755 發表于 2024-7-31 10:21 | 顯示全部樓層
相見恨晚啊,收藏一下,以后下載
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女视频三区 | 99久久精品视频免费 | 美女黄18岁以下禁止观看 | 亚洲一区二区三区欧美 | 成人av一区二区三区 | 中文av网站 | 国产不卡视频 | 亚洲网在线 | 中文字幕一区二区三区四区不卡 | 涩涩视频在线观看免费 | 日韩欧美一区在线 | 影音先锋中文字幕在线观看 | 久久精品色欧美aⅴ一区二区 | 波多野结衣二区 | 国产做爰| 国产999精品久久久久久 | 欧美激情精品久久久久久 | 欧美全黄 | 国产精品激情 | 精品国产99 | 亚洲综合在 | 国产成人aⅴ | 国产精品久久久久久久久久软件 | 欧美日韩综合一区 | 欧美精品久久久久久久久老牛影院 | 亚洲a视频 | 成人免费在线视频 | 久久精品亚洲精品国产欧美 | 欧美精品久久久 | 人人九九精| 国产欧美视频一区 | 亚洲 欧美 日韩在线 | 极品粉嫩国产48尤物在线播放 | 99在线精品视频 | 欧美一区二区三区在线 | 伊人超碰| 成人精品福利 | 99热精品国产 | 日韩欧美中文 | 久草在线视频中文 | 91精品国产91久久久久久最新 |