|
之前看到一個(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í)物
用Proteus仿真
單片機(jī)源程序如下:
- #define setXy(x,y) lcdWrite(0,(x<<6)|(y&15)|0x80)
- #define dataA 4
- #define dataB 5
- #define commPin 6
- void lcdWrite(byte RS,char dat)
- {
- byte i;
- for (i = 2; i > 0; --i) //運(yùn)行兩次,分別對(duì)應(yīng)字節(jié)高4位和低4位
- {
- digitalWrite( dataB,dat & 0x80); //LED_D7口。置位數(shù)據(jù)口為1。如果D7是1,先給D7位的C4充電(C1、C2、C3也會(huì)充滿電,這里不用管),在跌到低電平之前,將其他3個(gè)位充好電,再將1602使能讀入,即可完成半個(gè)字節(jié)數(shù)據(jù)的讀入。
- digitalWrite( dataA,dat & 0x20); //LED_D5口。置位數(shù)據(jù)口為1
- digitalWrite( commPin,RS);//置位命令口為1。如果RS是1,是數(shù)據(jù),0是命令
- delayMicroseconds(400); //683電容,延時(shí)400us
- digitalWrite( commPin,HIGH); //置位命令口為1
- digitalWrite( dataB,dat & 0x40); //LED_D6口。置位數(shù)據(jù)口為1
- digitalWrite( dataA,dat & 0x10); //LED_D4口。置位數(shù)據(jù)口為1
- delayMicroseconds(1); //0.5us < t < 1.36us
- digitalWrite( commPin,LOW); //命令口清零,1602使能,讀入數(shù)據(jù)
- delayMicroseconds(50);
- dat <<= 4;
- }
- }
- void lcdPrint(char *p)
- {
- while(*p) lcdWrite(1,*p++);
- }
- void lcdInit(void)
- {
- byte i = 3;
- digitalWrite( dataB,LOW); //D7=0
- digitalWrite( commPin,LOW); //命令口清零
- delayMicroseconds(400); //683電容,延時(shí)400us
- do{
- digitalWrite( dataB,LOW); //D6=0
- delayMicroseconds(1);
- digitalWrite( dataA,HIGH); //D5=1
- delayMicroseconds(400); //683電容,延時(shí)400us
- if (i == 0) {digitalWrite( dataA,LOW); } //D4=0
- digitalWrite( commPin,HIGH); //置位命令口為1
- delayMicroseconds(3);
- digitalWrite( commPin,LOW); //命令口清零
- delayMicroseconds(3);
- }while(i--);
- delay(100);
- lcdWrite(0,0x28); //4線 2行 5x7
- delay(50);;
- lcdWrite(0,0x06);//輸入方式自動(dòng)增量,沒有顯示移位
- delay(50);;
- lcdWrite(0,0x0c);//開啟顯示屏,光標(biāo)不顯示,無閃爍
- delay(50);;
- lcdWrite(0,0x01);//清除顯示屏,地址計(jì)數(shù)器AC歸零
- delay(50);;
- }
- int adc;
- void setup()
- {
- byte aa=45;
- pinMode(dataA,OUTPUT);
- pinMode(dataB,OUTPUT);
- pinMode(commPin,OUTPUT);
- delay(100);
- lcdInit();//對(duì)LCD進(jìn)行初始化
- }
- void loop()
- {
- setXy(0,0);
- lcdPrint(" ");
- setXy(0,0);
- lcdPrint("The value is:");
- setXy(1,0);
- lcdPrint(" ");
- setXy(1,0);
- lcdPrint("352");
- delay(1000);
復(fù)制代碼
以上程序51hei提供下載:
三線連接1602.zip
(1.11 KB, 下載次數(shù): 42)
2020-2-27 15:12 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|