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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

詳細LCD1602串行或者并行數(shù)據(jù)傳輸51單片機程序(自編)

[復制鏈接]
跳轉到指定樓層
樓主
ID:195660 發(fā)表于 2017-7-28 10:38 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
詳細LCD1602串行或者并行數(shù)據(jù)傳輸51單片機程序(自編)


單片機串行源程序如下:
  1. #include "reg52.h"  
  2. #include <intrins.h>  
  3.    
  4. //LCD1602接口定義              
  5. #define    LCD_DATA    P1  //P1口(P14~P17)與LCD高四位(D4~D7)對應相接  
  6. sbit   LCD1602_RS=P1^2;        //數(shù)據(jù)指令  
  7. sbit   LCD1602_EN=P1^3;        //使能  
  8.    
  9. //延時函數(shù),12mhz 6t延遲時間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ù)---------------------------------  
  25. void delay_1us(void)   
  26. {  
  27.     _nop_();  
  28. }  
  29. //------------------------N us延時函數(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ù)----------------------------------  
  37. void delay_1ms(void)  
  38. {  
  39. unsigned int i;  
  40. for (i=0;i<1140;i++);  
  41. }  
  42.   //-----------------------N ms延時函數(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由高電平跳變到低電平時液晶使能  
  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. //----------------------在某個地址處,寫一個字符----------------------------  
  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. //這段程序寫法我的理解大致是這樣:num為去掉小數(shù)點之后的數(shù)字,XS為小數(shù)點  
  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黑下載附件…………
復制代碼

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


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:266711 發(fā)表于 2018-3-16 15:32 | 只看該作者
學到了很多,讓我受益很多謝謝
回復

使用道具 舉報

板凳
ID:442599 發(fā)表于 2019-3-7 18:47 | 只看該作者
沒有主函數(shù)啊
回復

使用道具 舉報

地板
ID:398105 發(fā)表于 2019-3-9 10:59 | 只看該作者
謝謝分享
回復

使用道具 舉報

5#
ID:770247 發(fā)表于 2020-12-9 14:06 | 只看該作者
請問串行的電路圖是什么樣子的啊?
回復

使用道具 舉報

6#
ID:770247 發(fā)表于 2020-12-9 14:07 | 只看該作者
請問串行的電路圖是什么樣子的啊,下載了壓縮包只有程序
回復

使用道具 舉報

7#
ID:328014 發(fā)表于 2020-12-9 16:18 | 只看該作者
zhenzhenyah 發(fā)表于 2020-12-9 14:07
請問串行的電路圖是什么樣子的啊,下載了壓縮包只有程序

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

使用道具 舉報

8#
ID:857626 發(fā)表于 2020-12-9 18:43 | 只看該作者

謝謝分享,寫的很詳細!!
回復

使用道具 舉報

9#
ID:770247 發(fā)表于 2020-12-23 14:24 | 只看該作者
51hei團團 發(fā)表于 2020-12-9 16:18
看程序頂部有端口定義,按端口定義接線就可以了,如果以前沒有接過這種電路 最好去51hei先找一個電路圖,搜 ...

好的,謝謝
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区国产精品 | 国产一级视屏 | 99伊人| 91精品国产综合久久久久久漫画 | 超碰欧美 | 久久精品屋 | 国产高清免费 | 日韩国产高清在线观看 | 亚洲欧美视频 | 亚洲男人的天堂网站 | 久久久久久免费毛片精品 | 精品一二区 | 91精品国产乱码麻豆白嫩 | 日本成人毛片 | 在线色网| 欧美精品一区二区三区四区五区 | 欧美成人一区二区三区 | 国产清纯白嫩初高生视频在线观看 | 97热在线 | 欧美日韩精品在线一区 | 99久久精品免费 | 久久午夜电影 | 91综合在线视频 | 91九色在线观看 | 特黄毛片| 欧美一区不卡 | 91久久 | 亚洲精品乱码8久久久久久日本 | 亚洲精品一区二区三区在线 | 91视频.com | 荷兰欧美一级毛片 | 在线成人免费视频 | 亚洲欧美日韩国产综合 | 99久久中文字幕三级久久日本 | 99视频在线| 91久久久久久久久久久 | 久久小视频 | 亚洲一区二区三区在线观看免费 | 日本一区二区三区免费观看 | 丁香色婷婷 | 色香婷婷|