- UID
- 231945
- 帖子
- 26
- 积分
- 62
- 威望
- 58
- 金币
- 761
- 贡献
- 4
- 职业
- 电路设计,单片机,音响,功放
- 注册时间
- 2009-12-9
- 最后登录
- 2010-1-27
|
1#
发表于 2009-12-10 15:35
| 只看该作者
[分享]= = = = = = = = = = 1602/2002/2402液晶驱动程序 = = = = = = = = = =
本帖最后由 ayumi7 于 2009-12-10 15:43 编辑
1602 16字符2行
2002 20个字符2行
2402 24个字符2行
使用命令和接口方式都是一样的
唯一就是显示字符数量差异
稍微修改下地址就能可以了
源程序
建造目标 '目标 1'
正在编绎 2002A.C...
连接中...
Program Size: data=10.0 xdata=0 code=277
正在从 "2002a" 产生 HEX文件...
"2002a" - 0 错误 (s), 0 警告 (s).
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={" USER ID:Ayumi7 "};
uchar code table1[]={" PASSWORD:********* "};
sbit lcden=P2^5;
sbit lcdrs=P2^7;
sbit lcdrw=P2^6;
uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**********************************************************/
//发送命令子函数
/**********************************************************/
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/**********************************************************/
//发送数据子函数
/**********************************************************/
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()//初始化
{
lcden=0;
lcdrs=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);//设置光标和显示开关
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void main()
{
while(1)
{
init();
write_com(0x80+0x14);//字符初始位置+偏移量
for(num=0;num<20;num++)//字符移动量
{
write_data(table[num]);
delay(20);
}
write_com(0x80+0x54);//第二行
for(num=0;num<20;num++)
{
write_data(table1[num]);
delay(20);
}
for(num=0;num<20;num++)
{
write_com(0x18);
delay(200);
}
delay(5000);
for(num=0;num<20;num++)
{
write_com(0x18);
delay(200);
}
}
}
效果如下:
|
-
1
评分次数
-
-
杨峰:感谢分享,论坛有您更精彩!
|