- 阅读权限
- 50
- UID
- 61
- 帖子
- 33
- 精华
- 1
- 注册时间
- 2013-3-1
- 在线时间
- 33 小时
- UID
- 61
- 帖子
- 33
- 精华
- 1
- 注册时间
- 2013-3-1
- 在线时间
- 33 小时
|
本帖最后由 Tliang 于 2013-3-9 10:11 编辑
使用单片机的3个IO驱动LCD1602
只要加几个电容和电阻即可
说明:
这个办法我也是在网上看到的。不是我的原创。
工程包:
里面包括KEIL工程和PROTEUS仿真文件
原理:
这个是利用电容的记忆特性来做的。
也就是充放电。
当电容里面没有电的时候,就相当于短路。这个时候自然是0了
如果你想要他变成1,那么就给他充一段时间的电,给他充电的这个IO拉高,等到充好了。然后你再置0,这个时候就有两个不同的状态了。因为电容充完电后要变成0的话有一个放电过程。而你在他的电还没放完的时候就将数据写入LCD这样就OK了。
如果你要他变0就把他的电放完,也就是把IO拉低。等电放完后他又变成0.然后你在改变IO的状态。他充电也要一段时间才能到1.
使用KEIL和PROTEUS联调可以很清楚看到整个过程。很容易理解
图片:
代码: - #include<reg52.h>
- sbit E_And_RS = P1 ^ 2;
- sbit Data1 = P1 ^ 1;
- sbit Data2 = P1;
- typedef bit ubit;
- typedef unsigned char uint8;
- typedef unsigned int uint16;
- typedef unsigned long uint32;
- void delay(uint16 Time)
- {
- while(Time--);
- }
- void LCD_WriteDataAndComm(uint8 Data, ubit Control)
- {
- uint8 Flag;
- for(Flag = 0;Flag < 2;Flag++)
- {
- if(Control) //判断写命令还是写数据
- E_And_RS = 1; //写数据,对RS脚充电
- else
- E_And_RS = 0; //写命令,对RS脚放电
- if(Data & 0x20) //判断D7脚数据
- Data1 = 1; //为1则充电
- else
- Data1 = 0; //放电
- if(Data & 0x80) //判断D5脚数据
- Data2 = 1;
- else
- Data2 = 0;
- delay(30); //等待充满或放完
- if(Data & 0x10) //判断D4脚数据
- Data1 = 1; //输出数据
- else
- Data1 = 0;
- if(Data & 0x40) //判断D6脚数据
- Data2 = 1;
- else
- Data2 = 0;
- E_And_RS = 1; //拉高
- Data <<= 4;
- E_And_RS = 0; //数据写入.
- }
- delay(20);
- }
- void LCD_Init(void)
- {
- E_And_RS = 0; //RS脚放电
- Data1 = 1; //D5脚充电,
- Data2 = 0; //D7脚放电
- delay(30); //等待充满或放完
- Data1 = 0; //拉低D4
- E_And_RS = 1; //写入0x20,为4BIT模式
- delay(1);
- E_And_RS = 0; //写入数据,LCD1602为上升沿读出数据下降沿写入数据
- LCD_WriteDataAndComm(0x28, 0);
- LCD_WriteDataAndComm(0x08, 0);
- LCD_WriteDataAndComm(0x01, 0);
- LCD_WriteDataAndComm(0x06, 0);
- LCD_WriteDataAndComm(0x0C, 0);
- }
- void Show_Str(uint8 *Str, uint8 Addr)
- {
- LCD_WriteDataAndComm(Addr, 0);
- while(*Str)
- LCD_WriteDataAndComm(*Str++, 1);
- }
- void main(void)
- {
- LCD_Init();
- Show_Str("Tliang Holle!", 0x80);
- Show_Str("QQ:459436468", 0xc3);
- while(1);
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
|