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

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

QQ登錄

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

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

4X4矩陣鍵盤(pán)掃描lcd1602液晶顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71259 發(fā)表于 2014-12-30 01:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit BEEP=P3^6;
  6. sbit RS=P2^0;
  7. sbit RW=P2^1;
  8. sbit E=P2^2;
  9. sbit BF=P0^7;
  10. uchar code digit[]="0123456789ABCDEF";
  11. uchar code key_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 };
  12. uchar code str[]="Input Data:";
  13. uchar key;
  14. /************************************
  15. 函數(shù)功能:1ms基準(zhǔn)延時(shí)
  16. 入口參數(shù):n
  17. ************************************/

  18. void delay1ms(unsigned int n )
  19. {
  20. unsigned char i;
  21. while(n--)
  22.   for(i=0;i<115;i++);
  23. }

  24. /************************************
  25. 函數(shù)功能: 500us延時(shí)
  26. ************************************/
  27. void delay500us()     
  28. {

  29. uchar i;

  30.   for(i=0;i<57;i++);

  31. }
  32. /************************************
  33. 函數(shù)功能: 蜂鳴器產(chǎn)生1KHZ頻率聲音,
  34. ************************************/
  35. void beep()
  36. {
  37.   uchar i;
  38. for(i=0;i<200;i++){
  39.   BEEP=~BEEP;
  40.   delay500us();
  41. }
  42. BEEP=1;

  43. }


  44. /************************************
  45. 函數(shù)功能:判斷液晶的忙碌狀態(tài)
  46. 返回值:result=1,忙碌;result=0,不忙
  47. ************************************/
  48. bit BusyTest()
  49. {
  50. bit result;
  51. RS=0;  //讀狀態(tài)時(shí),RS=0,RW=1,E=1
  52. RW=1;
  53. E=1;
  54. _nop_(); //延時(shí)一個(gè)時(shí)鐘周期
  55. _nop_();
  56. _nop_();
  57. _nop_(); //4個(gè)周期延時(shí),給硬件反應(yīng)時(shí)間
  58. result=BF;
  59. E=0;  //將E置0,不允許讀
  60. return result;
  61. }
  62. /************************************
  63. 函數(shù)功能:將模式設(shè)置指令或顯示地址送入液晶
  64. 入口參數(shù):dictate
  65. ************************************/
  66. void WriteInstruction(uchar dictate)
  67. {
  68. while(BusyTest()==1);  //如果忙就等待
  69. RS=0;      //寫(xiě)指令時(shí),RS=0.RW=0,E=負(fù)跳變
  70. RW=0;
  71. E=0;   //先將E拉低
  72. _nop_();  
  73. _nop_();     //給硬件反應(yīng)時(shí)間
  74. P0=dictate; //將數(shù)據(jù)送入P0口,即指令或地址
  75. _nop_();
  76. _nop_();
  77. _nop_();
  78. _nop_();    //反應(yīng)時(shí)間
  79. E=1;  //上升沿讀入指令或地址  
  80. _nop_();
  81. _nop_();
  82. _nop_();
  83. _nop_();
  84. E=0;     //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令
  85. }
  86. /************************************
  87. 函數(shù)功能:指定字符顯示的實(shí)際地址
  88. 入口參數(shù):x
  89. ************************************/
  90. void WriteAddress(uchar x)
  91. {
  92. WriteInstruction(x|0x80);   //顯示位置的確定方法為“0x80+地址碼x”
  93. }
  94. /************************************
  95. 函數(shù)功能:將數(shù)據(jù)(ASKII碼)寫(xiě)入液晶模塊
  96. 入口參數(shù):y(字符常量)
  97. ************************************/
  98. void WriteData(unsigned char y)
  99. {
  100. while(BusyTest()==1); //如果忙碌就等待
  101. RS=1;       //寫(xiě)數(shù)據(jù)時(shí)RS=1,RW=0,E=負(fù)跳變
  102. RW=0;
  103. E=0;    //先將E拉低
  104. _nop_();
  105. _nop_();
  106. P0=y;
  107. _nop_();
  108. _nop_();
  109. _nop_();
  110. _nop_();  //反應(yīng)時(shí)間
  111. E=1;
  112. _nop_();
  113. _nop_();
  114. _nop_();
  115. _nop_();
  116. E=0;     //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令
  117. }
  118. /************************************
  119. 函數(shù)功能:對(duì)LCD的顯示模式進(jìn)行初始化
  120. ************************************/
  121. void LcdInt()
  122. {
  123. delay1ms(15);    //首次寫(xiě)指令時(shí)給LCD一段較長(zhǎng)的反應(yīng)時(shí)間
  124. WriteInstruction(0x38);   //顯示模式設(shè)置:16X2顯示,5X7點(diǎn)陣,8位數(shù)據(jù)總線
  125. delay1ms(5);
  126. WriteInstruction(0x38);
  127. delay1ms(5);
  128. WriteInstruction(0x38);
  129. delay1ms(5);     //3次寫(xiě) 設(shè)置模式
  130. WriteInstruction(0x0c); //顯示模式設(shè)置:顯示開(kāi),有光標(biāo),光標(biāo)閃爍
  131. delay1ms(5);
  132. WriteInstruction(0x06);  //顯示模式設(shè)置:光標(biāo)右移,字符不移
  133. delay1ms(5);
  134. WriteInstruction(0x01);  //清屏
  135. delay1ms(5);

  136. }

  137. /************************************
  138. 函數(shù)功能: 掃描鍵盤(pán)
  139. ************************************/
  140. void key_scan()
  141. {
  142. uchar scan1,scan2,keycode,i;
  143. P1=0xf0;
  144. scan1=P1;
  145. if((scan1&0xf0)!=0xf0){          //判斷是否按鍵
  146.   delay1ms(15);        //延時(shí)消陡
  147.   scan1=P1;
  148.   if((P1&0xf0)!=0xf0){    //二次判斷是否按鍵
  149.    P1=0x0f;           //線反轉(zhuǎn)法德核心
  150.    scan2=P1;
  151.    keycode=scan1|scan2;       //組合成鍵編碼
  152.   }
  153.   for(i=0;i<16;i++){
  154.    if(keycode==key_code[i]){  //查表得鍵值
  155.     key=i;  
  156.    }
  157.   }
  158. }
  159. else{
  160.   P1=0xff;   //P1口寫(xiě)1,輸入狀態(tài)

  161. }
  162.    

  163. }
  164. /***************************************
  165. 函數(shù)功能:顯示數(shù)字
  166. ***************************************/
  167. void Display()
  168. {
  169. WriteAddress(0x47);
  170. delay1ms(5);
  171. WriteData(digit[key]);
  172. }



  173. /***********************************
  174. 函數(shù)功能:主函數(shù)
  175. ***********************************/

  176. void main()
  177. {
  178.   uchar i;
  179.   P1=0xff;   //寫(xiě)1,讀狀態(tài)
  180.   delay1ms(15);
  181.   LcdInt();
  182.   WriteInstruction(0x01);
  183.   delay1ms(5);
  184.   WriteAddress(0x02);
  185.   delay1ms(5);
  186.   for(i=0;str[i]!='\0';i++){
  187.     WriteData(str[i]);
  188.    delay1ms(10);
  189.   }



  190.   WriteAddress(0x47);
  191.   delay1ms(5);
  192.   WriteData('0');
  193.   while(1){
  194.    P1=0xf0;
  195.    if((P1&0xf0)!=0xf0){
  196.    delay1ms(15);
  197.    if((P1&0xf0)!=0xf0){
  198.             
  199.           key_scan();
  200.           Display();
  201.     beep();
  202.     delay1ms(200);
  203.    }
  204.      }
  205.      }
  206. }

復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜在线免费观看 | 亚洲三区在线观看 | 日韩综合 | 午夜久久久久久久久久一区二区 | 一级片免费在线观看 | 国产成人在线一区二区 | 久久99视频免费观看 | 91精品国产91久久综合桃花 | 日韩精品一区二区三区视频播放 | 污视频免费在线观看 | 男女下面一进一出网站 | 国产一二三区免费视频 | 亚洲精品在线免费 | 噜久寡妇噜噜久久寡妇 | 91av视频| 国产精品视频免费观看 | 国内精品久久久久久久影视简单 | 亚洲国产精品久久久久秋霞不卡 | 国产精久久久久久久妇剪断 | 密桃av | 成年人网站在线观看视频 | 欧美一区二区 | 欧美久久久久久久 | 欧美a∨ | 天天爽夜夜爽精品视频婷婷 | 人人干人人舔 | 精品亚洲一区二区三区四区五区 | 国产精品视频区 | 国产色片 | 羞羞网站在线观看 | 国产在线小视频 | 日韩国产中文字幕 | 欧美精品1区 | 一区二区三区亚洲视频 | 国产在线观看一区二区 | 成人av一区二区亚洲精 | 伊人久久伊人 | 91免费视频 | 久久久网 | 日本小电影网站 | 亚洲欧洲一区二区 |