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

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

QQ登錄

只需一步,快速開始

搜索
查看: 2802|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)按鍵LCD1602顯示程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include<intrins.h>
  4. sbit RS = P2^0; //Pin4
  5. sbit RW = P2^1; //Pin5
  6. sbit E= P2^2; //Pin6
  7. #define Data P0//數(shù)據(jù)端口
  8. char TimeNum[16];
  9. char Test1[16];
  10. void DelayUs(unsigned char us)//微秒級(jí)延時(shí)函數(shù)
  11. {
  12. unsigned char uscnt;
  13. uscnt=us>>1;
  14. while(--uscnt);
  15. }
  16. void DelayMs(unsigned char ms) //毫秒級(jí)延時(shí)函數(shù)
  17. {
  18. while(--ms)
  19. {
  20. DelayUs(250);
  21. DelayUs(250);
  22. DelayUs(250);
  23. DelayUs(250);
  24. }
  25. }
  26. void WriteCommand(unsigned char c)//寫命令函數(shù)
  27. {
  28. DelayMs(5);//操作前短暫延時(shí),保證信號(hào)穩(wěn)定
  29. E=0;
  30. RS=0;
  31. RW=0;
  32. _nop_();
  33. E=1;
  34. Data=c;
  35. E=0;
  36. }
  37. void WriteData(unsigned char c) //寫數(shù)據(jù)函數(shù)
  38. {
  39. DelayMs(5);//操作前短暫延時(shí),保證信號(hào)穩(wěn)定
  40. E=0;
  41. RS=1;
  42. RW=0;
  43. _nop_();
  44. E=1;
  45. Data=c;
  46. E=0;
  47. RS=0;
  48. }
  49. void ShowChar(unsigned char pos,unsigned char c)//寫字符函數(shù)
  50. {
  51. unsigned char p;
  52. if (pos>=0x10)
  53. p=pos+0xb0; //是第二行則命令代碼高4位為0xc
  54. else
  55. p=pos+0x80; //是第二行則命令代碼高4位為0x8
  56. WriteCommand (p);//寫命令
  57. WriteData (c);//寫數(shù)據(jù)
  58. }
  59. void lcd_sfm(unsigned char add,unsigned char date)//顯示位置和數(shù)據(jù)
  60. {
  61. unsigned char shi,ge;
  62.   shi=date/10;
  63.   ge=date%10;
  64.   WriteCommand(0x80+0x40+add);
  65.   WriteData(0x30+shi);
  66.   WriteData(0x30+ge);
  67. }
  68. void ShowString (unsigned char line,char *ptr)//寫字符串函數(shù)
  69. {
  70. unsigned char l,i;
  71. l=line<<4;//若line=0,則地址的高四位為0;若line=1.則地址的高四位為1
  72. for (i=0;i<16;i++)
  73. ShowChar (l++,*(ptr+i));//循環(huán)顯示16個(gè)字符
  74. }
  75. void InitLcd()//初始化函數(shù)
  76. {
  77. DelayMs(15);
  78. WriteCommand(0x38); //display mode
  79. WriteCommand(0x38); //display mode
  80. WriteCommand(0x38); //display mode
  81. WriteCommand(0x06); //顯示光標(biāo)移動(dòng)位置
  82. WriteCommand(0x0c); //顯示開及光標(biāo)設(shè)置
  83. WriteCommand(0x01); //顯示清屏
  84. }
  85. void delay(unsigned int t)
  86. {while(t--);
  87. }
  88. unsigned char keyscan(void)                              //矩陣鍵盤掃描函數(shù)
  89. {
  90.         unsigned char h,l;                                          //定義行、列值中間變量
  91.         P1=0x0f;                                          //列線輸出全為0,行為1
  92.         h=P1&0x0f;                                          //讀入行線
  93.         if(h!=0x0f)                                          //檢測(cè)有無按鍵按下,行不全為1
  94.         {        delay(100);                //延時(shí)去抖
  95.                 if(h!=0x0f)                                  //如果確實(shí)按下
  96.                 {
  97.                         h=P1&0x0f;            //再次讀入行線
  98.                         P1=0xf0;              //輸出當(dāng)前列線值,行線反轉(zhuǎn)
  99.                         l=P1&0xf0;                          //讀入列線值
  100.                         return (h+l);                  //鍵盤最后組合編碼值,也就是鍵值
  101.                 }
  102.         }
  103.         return 0xff;                                  //其余情況返回該值
  104. }
  105. unsigned char getkey( )
  106. {
  107. unsigned char key,key_num;
  108. key=keyscan();                  //用key讀取keyscan()的值
  109. switch(key)
  110.                 {   case 0xee: key_num=0;  break;               
  111.                         case 0xed: key_num=1;  break;
  112.                         case 0xeb: key_num=2;  break;
  113.                         case 0xe7: key_num=3;  break;
  114.                         case 0xde: key_num=4;  break;
  115.                         case 0xdd: key_num=5;  break;
  116.                         case 0xbd: key_num=6;  break;
  117.                         case 0x7d: key_num=7;  break;
  118.                         case 0xbe: key_num=8;  break;
  119.                     case 0xdb: key_num=9;  break;
  120.                         case 0xbb: key_num=10; break;
  121.                         case 0x7b: key_num=11; break;
  122.                         case 0x7e: key_num=12; break;
  123.                         case 0xd7: key_num=13; break;
  124.                         case 0xb7: key_num=14; break;
  125.                     case 0x77: key_num=15; break;
  126.                            default:key_num=0xff; break;
  127.                 }
  128. return key_num;               
  129. }
  130. void main(void)//主函數(shù)
  131. { unsigned char kk;
  132. float x=99.0;
  133. InitLcd();//初始化LCD
  134. DelayMs(15);//延時(shí)保證信號(hào)穩(wěn)定
  135. lcd_sfm(5,43);
  136. ShowString(0,"LCD");
  137. while(1)
  138. { kk=getkey();
  139.   if(kk!=0xff)
  140.   {         lcd_sfm(5,kk);   
  141.   }         
  142. }
  143. }

復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中国美女一级黄色片 | 国产 日韩 欧美 中文 在线播放 | 亚洲精品久久久久久下一站 | 日韩91在线| 精品福利在线视频 | 在线观看日韩 | 国产情侣在线看 | 九九天堂网 | 中文字幕99 | 国产一级片免费视频 | 国产精品久久久久久52avav | 成人在线视频观看 | 日韩欧美视频 | 欧美午夜一区 | 欧美激情视频一区二区三区在线播放 | 日韩福利电影 | 欧美激情精品久久久久久变态 | 欧美一区二区在线观看 | 久久久久久久久久一区 | 中文字幕在线一区二区三区 | av色站| 欧美日韩中文字幕在线 | 久久成人一区 | 久久黄视频 | 蜜桃免费av| 成人免费在线观看视频 | 日韩欧美日韩在线 | 日韩免费 | 国产91精品在线 | 中文字幕第三页 | 日日摸日日添日日躁av | av影音资源 | 国产精品毛片一区二区在线看 | 色婷婷久久久亚洲一区二区三区 | 四虎影视一区二区 | 精品一二三| 在线欧美亚洲 | 欧美精品一区二区免费 | 国产一在线 | 成人不卡视频 | 仙人掌旅馆在线观看 |