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

標(biāo)題: 詳細(xì)LCD1602串行或者并行數(shù)據(jù)傳輸51單片機(jī)程序(自編) [打印本頁]

作者: 晴楓    時(shí)間: 2017-7-28 10:38
標(biāo)題: 詳細(xì)LCD1602串行或者并行數(shù)據(jù)傳輸51單片機(jī)程序(自編)
詳細(xì)LCD1602串行或者并行數(shù)據(jù)傳輸51單片機(jī)程序(自編)


單片機(jī)串行源程序如下:
  1. #include "reg52.h"  
  2. #include <intrins.h>  
  3.    
  4. //LCD1602接口定義              
  5. #define    LCD_DATA    P1  //P1口(P14~P17)與LCD高四位(D4~D7)對應(yīng)相接  
  6. sbit   LCD1602_RS=P1^2;        //數(shù)據(jù)指令  
  7. sbit   LCD1602_EN=P1^3;        //使能  
  8.    
  9. //延時(shí)函數(shù),12mhz 6t延遲時(shí)間10*255us  
  10. void LCD_init(void);  
  11. void LCD_en_write(void);  
  12. void LCD_write_command(unsigned char command) ;  
  13. void LCD_write_data(unsigned char Recdata);  
  14. void LCD_set_xy (unsigned char x, unsigned char y);  
  15. void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);  
  16. void LCD_write_char(unsigned char X,unsigned char Y,unsigned char Recdata);  
  17. void delay_nus(unsigned int n);  
  18. void delay_nms(unsigned int n);  
  19.    
  20. //以下函數(shù)用于輸出字符串和數(shù)字  
  21. int LCD_PutNum(unsigned long num,int XS,int pos);  
  22. int LCD_PutStr(unsigned char *DData,int pos);  
  23.    
  24. //-------------------------1us延時(shí)函數(shù)---------------------------------  
  25. void delay_1us(void)   
  26. {  
  27.     _nop_();  
  28. }  
  29. //------------------------N us延時(shí)函數(shù)---------------------------------  
  30. void delay_nus(unsigned int n)   
  31. {  
  32. unsigned int i=0;  
  33. for (i=0;i<n;i++)  
  34. delay_1us();  
  35. }  
  36.   //-----------------------1ms延時(shí)函數(shù)----------------------------------  
  37. void delay_1ms(void)  
  38. {  
  39. unsigned int i;  
  40. for (i=0;i<1140;i++);  
  41. }  
  42.   //-----------------------N ms延時(shí)函數(shù)---------------------------------  
  43. void delay_nms(unsigned int n)  
  44. {  
  45. unsigned int i=0;  
  46. for (i=0;i<n;i++)  
  47. delay_1ms();  
  48. }  
  49.   //------------------------液晶初始化-----------------------------------  
  50. void LCD_init(void)  
  51. {  
  52. LCD_write_command(0x28);  
  53. delay_nus(40);   
  54. LCD_write_command(0x28);  
  55. delay_nus(40);   
  56. LCD_write_command(0x28);  
  57. delay_nus(40);   
  58.    
  59. LCD_en_write();  
  60. delay_nus(40);  
  61. LCD_write_command(0x28); //4位顯示  
  62. LCD_write_command(0x0c); //顯示開  
  63. LCD_write_command(0x01); //清屏  
  64. delay_nms(2);  
  65. }  
  66.    
  67.   //----------------------液晶使能函數(shù)-------------------------------------  
  68. void LCD_en_write(void)  
  69. {                       //EN由高電平跳變到低電平時(shí)液晶使能  
  70. LCD1602_EN=1;  
  71. delay_nus(1);  
  72. LCD1602_EN=0;  
  73. }  
  74. //------------------------寫指令函數(shù)--------------------------------------  
  75. void LCD_write_command(unsigned char command)   
  76. {  
  77. delay_nus(16);  
  78. LCD1602_RS=0; //RS=0  
  79. LCD_DATA &=0X0f; //清高四位  
  80. LCD_DATA|=command&0xf0; //寫高四位  
  81. LCD_en_write();  
  82. command=command<<4; //低四位移到高四位  
  83. LCD_DATA&=0x0f; //清高四位  
  84. LCD_DATA|=command&0xf0; //寫低四位  
  85. LCD_en_write();  
  86. }  
  87.    
  88. //------------------------寫數(shù)據(jù)函數(shù)--------------------------------------  
  89. void LCD_write_data(unsigned char Recdata)   
  90. {  
  91. delay_nus(16);  
  92. LCD1602_RS=1; //RS=1  
  93. LCD_DATA&=0X0f; //清高四位  
  94. LCD_DATA|=Recdata&0xf0; //寫高四位  
  95. LCD_en_write();  
  96. Recdata=Recdata<<4; //低四位移到高四位  
  97. LCD_DATA&=0X0f; //清高四位  
  98. LCD_DATA|=Recdata&0xf0; //寫低四位  
  99. LCD_en_write();                                                                                                                                                                                                                                                                                                                                                                                                
  100. }  
  101.    
  102. //-----------------------地址定位函數(shù)-------------------------------------  
  103. void LCD_set_xy( unsigned char x, unsigned char y )   
  104. {  
  105.     unsigned char address;  
  106.     if (y == 0) address = 0x80 + x;  
  107.     else address = 0xc0 + x;  
  108.     LCD_write_command(address);  
  109. }  
  110.    
  111.    
  112. //----------------------在某個(gè)地址處,寫一個(gè)字符----------------------------  
  113. void LCD_write_char(unsigned char X,unsigned char Y,unsigned char Recdata) //列x=0~15,行y=0,1  
  114. {  
  115.     LCD_set_xy(X, Y); //寫地址  
  116.     LCD_write_data(Recdata);  
  117. }  
  118. //----------------------------輸出字符串-------------------------------------  
  119. int LCD_PutStr(unsigned char *DData,int pos)  //pos表示字符顯示位置,0~31  
  120. {   
  121.     unsigned char i;   
  122.     if(pos==-1)  
  123.     {  
  124.         LCD_write_command(0x01); //清屏  
  125.         delay_nms(2);  
  126.         pos=0;   
  127.     }   
  128.     while((*DData)!='\0')  
  129.     {      
  130.         switch(*DData)  
  131.         {   
  132.             case '\n': //如果是\n,則換行   
  133.             {   
  134.                 if(pos<17)  
  135.                 {  
  136.                     for(i=pos;i<16;i++) LCD_write_char(i%16, i/16,' ');  
  137.                     pos=16;  
  138.                 }  
  139.                 else  
  140.                 {   
  141.                     for(i=pos;i<32;i++) LCD_write_char(i%16, i/16,' ');  
  142.                     pos=0;  
  143.                 }   
  144.                 break;   
  145.             }  
  146.    
  147.             case '\b': //如果是\b,則退格  
  148.             {  
  149.                 if(pos>0) pos--;  
  150.                 LCD_write_char(pos%16, pos/16, ' ');   
  151.                 break;   
  152.             }  
  153.    
  154.             default:   
  155.             {   
  156.                 if((*DData)<0x20)  //小于0x20的顯示不了?  
  157.                 {  
  158.                     *DData=' ';  
  159.                 }  
  160.    
  161.                 LCD_write_char(pos%16, pos/16,*DData);  
  162.                 pos++;   
  163.                 break;   
  164.             }   
  165.         }   
  166.         DData++;   
  167.     }  
  168.     return(pos);  
  169. }  
  170. //----------------------------輸出數(shù)字---------------------------------  
  171. //這段程序?qū)懛ㄎ业睦斫獯笾率沁@樣:num為去掉小數(shù)點(diǎn)之后的數(shù)字,XS為小數(shù)點(diǎn)  
  172. //從左數(shù)第幾位,pos為顯示的位置  
  173. //---------------------------------------------------------------------  
  174. int LCD_PutNum(unsigned long num,int XS,int pos)  
  175. {   
  176.     unsigned long tmp=0;   
  177.     unsigned char numbits=0; //總數(shù)字位數(shù)  
  178.     if(pos==-1)  
  179.     {   
  180.         LCD_write_command(0x01);  
  181.         delay_nms(2);   
  182.         pos=0;   
  183.     }   
  184.    
  185.     if(num==0)  
  186.     {  
  187.         LCD_write_char(pos%16, pos/16, '0');  
  188.         pos++;  
  189.     }  
  190.     else  
  191.     {  
  192.         if(num<0)  
  193.         {   
  194.             LCD_write_char(pos%16, pos/16, '-');   
  195. ……………………

  196. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

主函數(shù)還沒有寫,大家可以按自己寫需求寫,程序存在問題還很多,請多多指教,一起進(jìn)步:
LCD1602.zip (61.29 KB, 下載次數(shù): 101)



作者: 初夏電子    時(shí)間: 2018-3-16 15:32
學(xué)到了很多,讓我受益很多謝謝
作者: 歷練小小    時(shí)間: 2019-3-7 18:47
沒有主函數(shù)啊
作者: seafly    時(shí)間: 2019-3-9 10:59
謝謝分享

作者: zhenzhenyah    時(shí)間: 2020-12-9 14:06
請問串行的電路圖是什么樣子的啊?
作者: zhenzhenyah    時(shí)間: 2020-12-9 14:07
請問串行的電路圖是什么樣子的啊,下載了壓縮包只有程序

作者: 51hei團(tuán)團(tuán)    時(shí)間: 2020-12-9 16:18
zhenzhenyah 發(fā)表于 2020-12-9 14:07
請問串行的電路圖是什么樣子的啊,下載了壓縮包只有程序

看程序頂部有端口定義,按端口定義接線就可以了,如果以前沒有接過這種電路 最好去51hei先找一個(gè)電路圖,搜索"1602 4線"或者"1602 四線"這幾個(gè)字即可,有很多人分享http://www.zg4o1577.cn/bbs/dpj-52853-1.html
http://www.zg4o1577.cn/bbs/dpj-167284-1.html

作者: poanst    時(shí)間: 2020-12-9 18:43

謝謝分享,寫的很詳細(xì)!!
作者: zhenzhenyah    時(shí)間: 2020-12-23 14:24
51hei團(tuán)團(tuán) 發(fā)表于 2020-12-9 16:18
看程序頂部有端口定義,按端口定義接線就可以了,如果以前沒有接過這種電路 最好去51hei先找一個(gè)電路圖,搜 ...

好的,謝謝





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久精品欧美一区二区三区不卡 | 欧美成人专区 | 91亚洲国产精品 | 久久久久久亚洲 | 超碰综合 | 国产日韩欧美在线观看 | 日韩欧美中文 | 日本成年免费网站 | 91精品国产综合久久久久久 | 欧美成人免费在线视频 | 一区在线视频 | 在线一区观看 | 国产三区av | 久草精品在线 | 国产91色在线 | 亚洲 | 欧美一区二区三区在线观看视频 | 99re热精品视频国产免费 | 又黄又爽的网站 | 久久成人免费 | 黄网免费 | 国产区视频在线观看 | www日本在线播放 | 黄页网址在线观看 | 国产精品免费观看视频 | 韩日一区二区三区 | 91精品国产91久久久久久密臀 | 国产精品久久久久久久久久 | 一级黄在线观看 | 日韩国产黄色片 | 午夜精品久久久久久久久久久久久 | 国产一区中文 | 99久久久无码国产精品 | 成人国产午夜在线观看 | 9191av| 欧美日韩在线视频一区 | 麻豆亚洲 | 一区二区视频在线 | 国产一区二区三区四区五区加勒比 | 欧美成人精品二区三区99精品 | 亚洲 中文 欧美 日韩 在线观看 | 成人黄色av|