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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2478|回復: 1
打印 上一主題 下一主題
收起左側

1602按鍵輸入顯示單片機源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:263238 發表于 2017-12-20 11:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1602按鍵輸入顯示
單片機源程序如下:
  1. /*-----------------------------------------------
  2.   名稱:LCD1602
  3.   內容:通過矩陣鍵盤輸入,依次顯示0-F16中字符
  4.   引腳定義如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
  5. ------------------------------------------------*/
  6. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  7. #include<intrins.h>

  8. sbit RS = P2^4;   //定義端口
  9. sbit RW = P2^5;
  10. sbit EN = P2^6;

  11. #define RS_CLR RS=0
  12. #define RS_SET RS=1

  13. #define RW_CLR RW=0
  14. #define RW_SET RW=1

  15. #define EN_CLR EN=0
  16. #define EN_SET EN=1

  17. #define DataPort P0
  18. #define KeyPort P1

  19. unsigned char code dofly_code[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//轉換成液晶顯示的字符
  20. /*------------------------------------------------
  21. uS延時函數,含有輸入參數 unsigned char t,無返回值
  22. unsigned char 是定義無符號字符變量,其值的范圍是
  23. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  24. 長度如下 T=tx2+5 uS
  25. ------------------------------------------------*/
  26. void DelayUs2x(unsigned char t)
  27. {   
  28. while(--t);
  29. }
  30. /*------------------------------------------------
  31. mS延時函數,含有輸入參數 unsigned char t,無返回值
  32. unsigned char 是定義無符號字符變量,其值的范圍是
  33. 0~255 這里使用晶振12M,精確延時請使用匯編
  34. ------------------------------------------------*/
  35. void DelayMs(unsigned char t)
  36. {
  37.      
  38. while(t--)
  39. {
  40.      //大致延時1mS
  41.      DelayUs2x(245);
  42.          DelayUs2x(245);
  43. }
  44. }
  45. /*------------------------------------------------
  46.               判忙函數
  47. ------------------------------------------------*/
  48. bit LCD_Check_Busy(void)
  49. {
  50. DataPort= 0xFF;
  51. RS_CLR;
  52. RW_SET;
  53. EN_CLR;
  54. _nop_();
  55. EN_SET;
  56. return (bit)(DataPort & 0x80);
  57. }
  58. /*------------------------------------------------
  59.               寫入命令函數
  60. ------------------------------------------------*/
  61. void LCD_Write_Com(unsigned char com)
  62. {  
  63. while(LCD_Check_Busy()); //忙則等待
  64. RS_CLR;
  65. RW_CLR;
  66. EN_SET;
  67. DataPort= com;
  68. _nop_();
  69. EN_CLR;
  70. }
  71. /*------------------------------------------------
  72.               寫入數據函數
  73. ------------------------------------------------*/
  74. void LCD_Write_Data(unsigned char Data)
  75. {
  76. while(LCD_Check_Busy()); //忙則等待
  77. RS_SET;
  78. RW_CLR;
  79. EN_SET;
  80. DataPort= Data;
  81. _nop_();
  82. EN_CLR;
  83. }

  84. /*------------------------------------------------
  85.                 清屏函數
  86. ------------------------------------------------*/
  87. void LCD_Clear(void)
  88. {
  89. LCD_Write_Com(0x01);
  90. DelayMs(5);
  91. }
  92. /*------------------------------------------------
  93.               寫入字符串函數
  94. ------------------------------------------------*/
  95. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  96. {     
  97. if (y == 0)
  98.         {     
  99.          LCD_Write_Com(0x80 + x);     
  100.         }
  101. else
  102.         {     
  103.         LCD_Write_Com(0xC0 + x);     
  104.         }        
  105. while (*s)
  106.         {     
  107. LCD_Write_Data( *s);     
  108. s ++;     
  109.         }
  110. }
  111. /*------------------------------------------------
  112.               寫入字符函數
  113. ------------------------------------------------*/
  114. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  115. {     
  116. if (y == 0)
  117.         {     
  118.         LCD_Write_Com(0x80 + x);     
  119.         }   
  120. else
  121.         {     
  122.         LCD_Write_Com(0xC0 + x);     
  123.         }        
  124. LCD_Write_Data( Data);  
  125. }
  126. /*------------------------------------------------
  127.               初始化函數
  128. ------------------------------------------------*/
  129. void LCD_Init(void)
  130. {
  131.    LCD_Write_Com(0x38);    /*顯示模式設置*/
  132.    DelayMs(5);
  133.    LCD_Write_Com(0x38);
  134.    DelayMs(5);
  135.    LCD_Write_Com(0x38);
  136.    DelayMs(5);
  137.    LCD_Write_Com(0x38);  
  138.    LCD_Write_Com(0x08);    /*顯示關閉*/
  139.    LCD_Write_Com(0x01);    /*顯示清屏*/
  140.    LCD_Write_Com(0x06);    /*顯示光標移動設置*/
  141.    DelayMs(5);
  142.    LCD_Write_Com(0x0C);    /*顯示開及光標設置*/
  143.    }

  144.    /*------------------------------------------------
  145. 按鍵掃描函數,返回掃描鍵值
  146. ------------------------------------------------*/
  147. unsigned char KeyScan(void)  //鍵盤掃描函數,使用行列反轉掃描法
  148. {
  149. unsigned char cord_h,cord_l;//行列值中間變量
  150. KeyPort=0x0f;            //行線輸出全為0
  151. cord_h=KeyPort&0x0f;     //讀入列線值
  152. if(cord_h!=0x0f)    //先檢測有無按鍵按下
  153. {
  154.   DelayMs(10);        //去抖
  155.   if((KeyPort&0x0f)!=0x0f)
  156.   {
  157.     cord_h=KeyPort&0x0f;  //讀入列線值
  158.     KeyPort=cord_h|0xf0;  //輸出當前列線值
  159.     cord_l=KeyPort&0xf0;  //讀入行線值

  160.     while((KeyPort&0xf0)!=0xf0);//等待松開并輸出

  161.     return(cord_h+cord_l);//鍵盤最后組合碼值
  162.    }
  163.   }return(0xff);     //返回該值
  164. }
  165. /*------------------------------------------------
  166. 按鍵值處理函數,返回掃鍵值
  167. ------------------------------------------------*/
  168. unsigned char KeyPro(void)
  169. {
  170. switch(KeyScan())
  171. {
  172.   case 0x7e:return 0;break;//0 按下相應的鍵顯示相對應的碼值
  173.   case 0x7d:return 1;break;//1
  174.   case 0x7b:return 2;break;//2
  175.   case 0x77:return 3;break;//3
  176.   case 0xbe:return 4;break;//4
  177.   case 0xbd:return 5;break;//5
  178.   case 0xbb:return 6;break;//6
  179.   case 0xb7:return 7;break;//7
  180.   case 0xde:return 8;break;//8
  181.   case 0xdd:return 9;break;//9
  182.   case 0xdb:return 10;break;//a
  183.   case 0xd7:return 11;break;//b
  184.   case 0xee:return 12;break;//c
  185.   case 0xed:return 13;break;//d
  186.   case 0xeb:return 14;break;//e
  187.   case 0xe7:return 15;break;//f
  188.   default:return 0xff;break;
  189. }
  190. }

  191. /*------------------------------------------------
  192.                     主函數
  193. ------------------------------------------------*/
  194. void main(void)
  195. {
  196. unsigned char i,j,num;

  197. ……………………

  198. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
1602按鍵輸入顯示.zip (19.52 KB, 下載次數: 32)


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

使用道具 舉報

沙發
ID:779113 發表于 2020-6-15 09:33 | 只看該作者
真的厲害
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 嫩草黄色影院 | 欧美日韩精品一区二区三区视频 | 国产精品一区二区免费 | 国产91丝袜在线18 | 一区二区三区观看视频 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 成人精品一区二区 | 天天狠狠 | 欧美日韩国产一区二区三区 | 午夜视频导航 | 亚洲一区二区三区在线播放 | 国产精品久久久久久久久免费软件 | 日本精品久久久久久久 | 91在线色视频 | 日本中文字幕日韩精品免费 | 黄色毛片在线看 | 国产精品国产a | 91精品国产91久久久久久最新 | 99视频久| av网站免费看 | 精品伊人 | 免费在线观看一区二区 | 伊人伊人伊人 | 欧美另类视频 | 欧美亚洲国产一区二区三区 | 久久久久国产精品www | 欧美激情一区二区 | 黄色精品| 黑人精品xxx一区一二区 | www精品 | 福利社午夜影院 | 91在线观看视频 | 一级黄色片在线免费观看 | 亚洲高清视频一区 | 91精品久久久久久久久久入口 | 亚洲欧美另类在线 | 亚洲欧美一区二区三区在线 | 日韩精品一二三区 | 久久综合九九 | 国产999精品久久久 日本视频一区二区三区 | 亚洲不卡av在线 |