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

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

QQ登錄

只需一步,快速開始

搜索
查看: 6452|回復(fù): 10
收起左側(cè)

實(shí)用任意三個(gè)單片機(jī)IO口連接LCD1602A液晶屏

  [復(fù)制鏈接]
ID:688914 發(fā)表于 2020-2-27 15:13 | 顯示全部樓層 |閱讀模式
之前看到一個(gè)牛人zhu123帖子,是用二線連接1602。只用2個(gè)IO口節(jié)省了資源,但效果不太好,顯示速度慢。改成三線后效果就很好,可以實(shí)用化。這種接法的原理就是利用電容的充電放電效應(yīng)進(jìn)行存儲(chǔ)數(shù)字位,類似動(dòng)態(tài)存儲(chǔ)器的原理。原貼是用51匯編寫的,現(xiàn)在我用Arduino實(shí)現(xiàn)了三線連接的實(shí)用化。經(jīng)實(shí)驗(yàn),瓷片電容選擇范圍可從10nf-100nf都可以。代碼有注釋,很好懂。
二線連接帖子位置http://www.zg4o1577.cn/bbs/dpj-20365-1.html

制作出來的實(shí)物圖如下:

實(shí)物

實(shí)物

用Proteus仿真

用Proteus仿真


單片機(jī)源程序如下:
  1. #define setXy(x,y) lcdWrite(0,(x<<6)|(y&15)|0x80)
  2. #define dataA  4
  3. #define dataB 5
  4. #define commPin  6

  5. void lcdWrite(byte RS,char dat)
  6. {
  7. byte i;
  8. for (i = 2; i > 0; --i) //運(yùn)行兩次,分別對(duì)應(yīng)字節(jié)高4位和低4位
  9.   {
  10.     digitalWrite( dataB,dat & 0x80);  //LED_D7口。置位數(shù)據(jù)口為1。如果D7是1,先給D7位的C4充電(C1、C2、C3也會(huì)充滿電,這里不用管),在跌到低電平之前,將其他3個(gè)位充好電,再將1602使能讀入,即可完成半個(gè)字節(jié)數(shù)據(jù)的讀入。
  11.     digitalWrite( dataA,dat & 0x20); //LED_D5口。置位數(shù)據(jù)口為1   
  12.     digitalWrite( commPin,RS);//置位命令口為1。如果RS是1,是數(shù)據(jù),0是命令   
  13.     delayMicroseconds(400);  //683電容,延時(shí)400us   
  14.     digitalWrite( commPin,HIGH);  //置位命令口為1
  15.     digitalWrite( dataB,dat & 0x40); //LED_D6口。置位數(shù)據(jù)口為1   
  16.     digitalWrite( dataA,dat & 0x10); //LED_D4口。置位數(shù)據(jù)口為1         
  17.     delayMicroseconds(1);      //0.5us < t < 1.36us
  18.     digitalWrite( commPin,LOW);  //命令口清零,1602使能,讀入數(shù)據(jù)
  19.     delayMicroseconds(50);
  20.     dat <<= 4;
  21.   }        
  22. }
  23. void lcdPrint(char *p)
  24. {
  25.   while(*p) lcdWrite(1,*p++);
  26. }
  27. void lcdInit(void)
  28. {
  29.    byte i = 3;
  30.   digitalWrite( dataB,LOW);  //D7=0
  31.   digitalWrite( commPin,LOW);  //命令口清零
  32.   delayMicroseconds(400); //683電容,延時(shí)400us
  33.   do{
  34.       digitalWrite( dataB,LOW);  //D6=0
  35.       delayMicroseconds(1);
  36.       digitalWrite( dataA,HIGH);  //D5=1      
  37.       delayMicroseconds(400); //683電容,延時(shí)400us
  38.       if (i == 0) {digitalWrite( dataA,LOW); } //D4=0      
  39.       digitalWrite( commPin,HIGH);  //置位命令口為1
  40.       delayMicroseconds(3);
  41.       digitalWrite( commPin,LOW);  //命令口清零
  42.       delayMicroseconds(3);
  43.     }while(i--);   
  44.   delay(100);
  45.   lcdWrite(0,0x28);  //4線 2行 5x7
  46.   delay(50);;
  47.   lcdWrite(0,0x06);//輸入方式自動(dòng)增量,沒有顯示移位
  48.   delay(50);;
  49.   lcdWrite(0,0x0c);//開啟顯示屏,光標(biāo)不顯示,無閃爍
  50.   delay(50);;
  51.   lcdWrite(0,0x01);//清除顯示屏,地址計(jì)數(shù)器AC歸零
  52.   delay(50);;
  53. }
  54. int  adc;
  55. void setup()
  56. {
  57.   byte aa=45;
  58.   pinMode(dataA,OUTPUT);
  59.   pinMode(dataB,OUTPUT);
  60.   pinMode(commPin,OUTPUT);  
  61.   delay(100);
  62.   lcdInit();//對(duì)LCD進(jìn)行初始化   
  63. }
  64. void loop()
  65. {
  66. setXy(0,0);
  67.   lcdPrint("                ");
  68.   setXy(0,0);
  69.   lcdPrint("The value is:");   
  70.   setXy(1,0);
  71.   lcdPrint("                ");
  72.   setXy(1,0);
  73.   lcdPrint("352");
  74.   delay(1000);
復(fù)制代碼

以上程序51hei提供下載:
三線連接1602.zip (1.11 KB, 下載次數(shù): 42)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:163501 發(fā)表于 2020-3-2 21:42 | 顯示全部樓層
很好的東西,可惜不會(huì)Arduino,不能移植。
回復(fù)

使用道具 舉報(bào)

ID:102702 發(fā)表于 2020-3-3 00:27 | 顯示全部樓層
樓主用的是什么單片機(jī),M8可以嗎?
回復(fù)

使用道具 舉報(bào)

ID:688914 發(fā)表于 2020-3-3 16:11 | 顯示全部樓層
Liangkan 發(fā)表于 2020-3-2 21:42
很好的東西,可惜不會(huì)Arduino,不能移植。

參考zhu123的帖子,應(yīng)該就可以了。
回復(fù)

使用道具 舉報(bào)

ID:688914 發(fā)表于 2020-3-3 16:22 | 顯示全部樓層
raymondau 發(fā)表于 2020-3-3 00:27
樓主用的是什么單片機(jī),M8可以嗎?

M8我沒有用過。屬于Arduino系列應(yīng)該可以用。
回復(fù)

使用道具 舉報(bào)

ID:102702 發(fā)表于 2020-3-3 21:17 | 顯示全部樓層
gdbin001 發(fā)表于 2020-3-3 16:22
M8我沒有用過。屬于Arduino系列應(yīng)該可以用。

好的,我試一下,謝謝!
回復(fù)

使用道具 舉報(bào)

ID:906120 發(fā)表于 2021-5-13 09:22 | 顯示全部樓層
這個(gè)用stc89c52能實(shí)現(xiàn)嗎?
回復(fù)

使用道具 舉報(bào)

ID:824490 發(fā)表于 2021-5-19 10:50 | 顯示全部樓層
自個(gè)玩玩可以,別真把它做進(jìn)產(chǎn)品。
回復(fù)

使用道具 舉報(bào)

ID:71297 發(fā)表于 2021-5-20 21:01 | 顯示全部樓層
可以用上少腳的單片機(jī)
回復(fù)

使用道具 舉報(bào)

ID:951974 發(fā)表于 2022-12-12 21:03 | 顯示全部樓層
自個(gè)玩玩可以,別真把它做進(jìn)產(chǎn)品
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-12-13 13:27 | 顯示全部樓層
8051版本
2022-12-13_132230.png

  1. #include <reg52.h>

  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 to 65535
  4. typedef         unsigned long        u32;  //0 to 4294967295
  5. sbit EN_RS = P2^5;
  6. sbit D4_D6 = P2^6;
  7. sbit D5_D7 = P2^7;
  8. #define SetRS 0x01
  9. #define RstRS 0x00
  10. void Delay2ms()                //@12.000MHz
  11. {
  12.     unsigned char i, j;

  13.     i = 4;
  14.     j = 225;
  15.     do
  16.     {
  17.         while (--j);
  18.     }
  19.     while (--i);
  20. }
  21. void Delay200us()                //@12.000MHz
  22. {
  23.     unsigned char i;

  24.     i = 97;
  25.     while (--i);
  26. }
  27. void ThreeWire(u8 dat)
  28. {
  29.     EN_RS = (bit)(dat & 0x01);
  30.     D4_D6 = (bit)(dat & 0x40);
  31.     D5_D7 = (bit)(dat & 0x80);
  32.     Delay200us();
  33.     D4_D6 = (bit)(dat & 0x10);
  34.     D5_D7 = (bit)(dat & 0x20);
  35.     EN_RS = 1;
  36.     EN_RS = 0;
  37.     D4_D6 = 0;
  38.     D5_D7 = 0;
  39.     Delay200us();
  40. }
  41. void LCD_Init_4bit();
  42. void LCD_WChar_4bit(u8 Row, u8 Address, char chr);
  43. void LCD_WStr_4bit(u8 Row, u8 Address, char *Str);

  44. void LCD_WCMD(u8 Cmd)
  45. {
  46.     ThreeWire(RstRS | (Cmd & 0xF0));
  47.     ThreeWire(RstRS | (Cmd << 4));
  48. }
  49. void LCD_WDAT(u8 Dat)
  50. {
  51.     ThreeWire(SetRS | (Dat & 0xF0));
  52.     ThreeWire(SetRS | (Dat << 4));
  53. }
  54. void LCD_Init_4bit()
  55. {
  56.     LCD_WCMD(0x02);
  57.     LCD_WCMD(0x28);
  58.     LCD_WCMD(0x0c);
  59.     LCD_WCMD(0x06);
  60.     LCD_WCMD(0x01);
  61.     Delay2ms();
  62. }
  63. void LCD_WChar_4bit(u8 Row, u8 Address, char chr)
  64. {
  65.     if(Row == 1)LCD_WCMD(0x80 + Address);
  66.     if(Row == 2)LCD_WCMD(0xc0 + Address);

  67.     LCD_WDAT(chr);
  68. }
  69. void LCD_WStr_4bit(u8 Row, u8 Address, char *Str)
  70. {
  71.     if(Row == 1)LCD_WCMD(0x80 + Address);
  72.     if(Row == 2)LCD_WCMD(0xc0 + Address);
  73.     while(*Str)
  74.     {
  75.         LCD_WDAT(*Str);
  76.         Str++;
  77.     }
  78. }
  79. void Delay1000ms()                //@12.000MHz
  80. {
  81.     unsigned char i, j, k;

  82.     i = 8;
  83.     j = 154;
  84.     k = 122;
  85.     do
  86.     {
  87.         do
  88.         {
  89.             while (--k);
  90.         }
  91.         while (--j);
  92.     }
  93.     while (--i);
  94. }

  95. u8 Count = 0;
  96. void main()
  97. {
  98.     EN_RS = 0;
  99.     D4_D6 = 0;
  100.     D5_D7 = 0;
  101.     LCD_Init_4bit();
  102.     LCD_WStr_4bit(1,0,"Hello World!");
  103.     LCD_WStr_4bit(2,0,"3 Wire LCD");
  104.     while (1)
  105.     {
  106.         LCD_WChar_4bit(2,13,Count/100%10 + '0');
  107.         LCD_WChar_4bit(2,14,Count/10%10 + '0');
  108.         LCD_WChar_4bit(2,15,Count%10 + '0');
  109.         Count++;
  110.         Delay1000ms();
  111.     }
  112. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃五月天 | 日本三级日产三级国产三级 | 免费观看一级黄色录像 | 日本手机看片 | 中文字幕精品视频 | 91久久精品国产91久久性色tv | 99亚洲| 午夜影院在线观看 | 亚洲欧美久久 | 日韩欧美成人一区二区三区 | 日韩中文字幕免费在线观看 | 午夜看电影在线观看 | 色综合久久天天综合网 | 天天色av | 高清一区二区视频 | 91黄色片免费看 | 免费看日韩视频 | 久久网一区二区三区 | 成人免费视频网站在线观看 | 欧美一区二区网站 | 国产精品福利在线 | 瑟瑟免费视频 | 国产一区二区不卡 | 中文字幕一区二区三区在线乱码 | 亚洲精品国产成人 | 成人高清视频在线观看 | 日韩黄色小视频 | 日韩精品视频在线播放 | 韩国av电影网 | 不卡的av一区 | 久久精品一区二区视频 | 国产农村妇女毛片精品久久麻豆 | 国产在线精品一区二区 | 国产精品欧美一区二区 | 国产小视频在线观看 | 久草www | 91在线精品一区二区 | 我我色综合 | 成人av久久 | 亚洲高清视频一区二区 | 久久日韩精品一区二区三区 |