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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2408|回復: 1
收起左側

單片機+LCD12864一級菜單顯示源程序

[復制鏈接]
ID:341098 發表于 2020-4-22 18:35 | 顯示全部樓層 |閱讀模式
  1. #include <reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar   lcd_x,lcd_y,data_byte=0,count;
  6. uint TH_data,TL_data,RH_data,RL_data,CK_data;
  7. uint TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
  8. uchar num,ldata=0,lold=1;


  9. sbit RS = P2^0;//并行指令,數據選擇信號
  10. sbit RW = P2^1;//讀寫信號
  11. sbit EN = P2^2;//并行使能信號
  12. sbit PSB = P2^3;//并串口選擇信號
  13. sbit RST = P2^5;//復位信號
  14. sbit key1 = P2^6;        //定義按鍵1
  15. sbit key2 = P2^7;        //定義按鍵2


  16. void delay(uint a);//延時函數
  17. void delay0(unsigned int time);//延時函數
  18. void LCD_init();//LCD初始化程序
  19. void write_cmd(uchar cmd);//寫指令
  20. void write_data(uchar dat);//寫數據
  21. bit check_busy();//檢測LCD忙信號
  22. void delay1();//10us延時
  23. void lcd_dis_code(uint cmd_addr,uchar num,uchar dis[]);//顯示函數
  24. uchar code lcd0[]={"  科協菜單"};
  25. uchar code lcd1[]={"1:攝像頭"};
  26. uchar code lcd2[]={"2:傳感器"};
  27. uchar code lcd3[]={"3:液晶顯示"};
  28. uchar code lcd4[]={"4:單片機"};
  29. uchar code lcd5[]={"5:紅外傳感器"};
  30. uchar code lcd6[]={"6:MAX232"};
  31. uchar code lcd7[]={"7:晶振"};
  32. uchar code lcd8[]={"8:單片機"};
  33. uchar code lcd9[]={"9:紅外傳感器"};
  34. uchar code lcd10[]={"10:MAX232"};
  35. uchar code lcd11[]={"11:晶振"};

  36. void main()
  37.   {        
  38.         LCD_init();
  39.         while(1)
  40.         {                                //循環掃描按鍵及顯示
  41.                 if(key1==0)
  42.                             {                //按鍵1按下
  43.                                                  delay(5);
  44.                              if(key1==0)
  45.                                        {                //是否是剛按下,是執行,否則不執行
  46.                                                          ldata=ldata+1;        //顯示數據加1
  47.                                                          //lold=0;                //處理完,將按鍵視為按下
  48.                                                }
  49.                             }
  50.                 else if(key2==0)
  51.                              {        //按鍵2按下
  52.                                                           delay(5);
  53.                                     if(key2==0){                //是否是剛按下,是執行,否則不執行
  54.                                                                         ldata--;        //顯示數據減1
  55.                                                                 //        lold=0;                ////處理完,將按鍵視為按下
  56.                                              }
  57.                                           }
  58.                             switch(ldata)
  59.                                      {
  60.                  
  61.                                        case 0:{
  62.                                                                                lcd_dis_code(0x80,10,lcd0);        
  63.                                                                                lcd_dis_code(0x90,8,lcd1);
  64.                                                                                            lcd_dis_code(0x88,8,lcd2);
  65.                                                                                lcd_dis_code(0x98,12,lcd3);
  66.                                                                                            break;
  67.                                                    }
  68.                                                                     case 1:{
  69.                                                                                lcd_dis_code(0x80,8,lcd4);        
  70.                                                                                lcd_dis_code(0x90,12,lcd5);
  71.                                                                                            lcd_dis_code(0x88,8,lcd6);
  72.                                                                                lcd_dis_code(0x98,5,lcd7);
  73.                                                                                            break;
  74.                                                    }
  75.                                                                    case 2:{
  76.                                                                                lcd_dis_code(0x80,8,lcd8);        
  77.                                                                                lcd_dis_code(0x90,12,lcd9);
  78.                                                                                            lcd_dis_code(0x88,9,lcd10);
  79.                                                                                lcd_dis_code(0x98,12,lcd11);
  80.                                                                                            break;
  81.                                                    }
  82.                                                          }
  83.                                        

  84.                      
  85.        }
  86.   }
  87. void delay1()//延時10us
  88. {
  89.         unsigned char i;
  90.         for(i=0; i<3; i++);
  91. }

  92. /**********************12864模塊程序**********************/
  93.   
  94. void lcd_dis_code(uint cmd_addr,uchar num,uchar dis[])
  95. {
  96.         uint i;
  97.         write_cmd(cmd_addr);
  98.         for(i=0; i<num; i++)
  99.                 write_data(dis[i]);
  100. }

  101. void LCD_init()
  102. {
  103.         PSB = 1;
  104.         RST = 0;
  105.         delay(5);
  106.         RST = 1;
  107.           //write_cmd(0x34);//擴充指令
  108.         delay(5);
  109.     write_cmd(0x30);//基本指令
  110.         //delay(5);
  111.         //write_cmd(0x0f);//顯示開關光標
  112.         delay(5);
  113.         write_cmd(0x0c);
  114.     delay(10);
  115.         write_cmd(0x01);//清屏
  116.         delay(5);
  117.         write_cmd(0x06);
  118.         delay(20);

  119. }

  120. bit check_busy()
  121. {
  122.         bit temp;
  123.         RS = 0;
  124.         RW = 1;
  125.         EN = 1;
  126.         delay(5);
  127.         temp = (bit)(P0&0x80); //按位與操作
  128.         EN = 0;
  129.         return (temp);
  130. }

  131. void write_cmd(uchar cmd)
  132. {
  133.         while(check_busy());
  134.         RS = 0;
  135.         RW = 0;
  136.         EN = 0;
  137.         delay(5);
  138.         P0 = cmd;
  139.         delay(5);
  140.         EN = 1;
  141.         delay(5);
  142.         EN = 0;        
  143. }

  144. void write_data(uchar dat)
  145. {
  146.         while(check_busy());
  147.         RS = 1;
  148.         RW = 0;
  149.         EN = 0;
  150.         P0 = dat;
  151.         delay(5);
  152.         EN = 1;
  153.         delay(5);
  154.         EN = 0;        
  155. }

  156. void delay(uint a)
  157. {
  158.         uchar i;
  159.         while(a--)
  160.         {
  161.                 for(i=0; i<113; i++);
  162.         }
  163. }
  164. void delay0(unsigned int time)
  165. {
  166.         while(time--);
  167. }
復制代碼


評分

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

查看全部評分

回復

使用道具 舉報

ID:629438 發表于 2020-5-16 16:13 | 顯示全部樓層
不錯,謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区 | 夜夜艹天天干 | 91精品欧美久久久久久久 | 99精品99| 日本高清不卡视频 | 偷拍亚洲色图 | 精品一区二区在线视频 | 日韩中文一区 | 天堂免费 | 欧美日韩精品久久久免费观看 | 丝袜一区二区三区 | 91日b| 亚洲精品久久久一区二区三区 | 成人激情视频免费观看 | 草草精品 | 久久中文视频 | 亚洲瑟瑟 | 免费看a | 精品国产精品三级精品av网址 | 四虎影 | 欧美亚洲免费 | 国产粉嫩尤物极品99综合精品 | 精品国产一区二区在线 | 亚洲精品一区二区三区免 | 亚洲 欧美 日韩 在线 | 欧美性tv| 日操夜操 | 精品免费国产一区二区三区四区 | 国产精品无码永久免费888 | 日韩在线观看中文字幕 | 一级片在线播放 | 中文字幕亚洲精品 | 野狼在线社区2017入口 | 国产精品99久久久久久www | 色综合久久天天综合网 | 91精品国产综合久久精品 | 日韩av一区二区在线 | 国产精品欧美一区二区三区 | 91精品国产综合久久香蕉麻豆 | 国产精品1区2区3区 欧美 中文字幕 | 天天天天操 |