朋友们,帮我看看这段程序,谢谢
字体: 小 中 大 | 打印 发表于: 2008-10-02 14:58 作者: forward007 来源: proteus仿真社区
我正在学习单片机,学到1602液晶的时候,自己编了这段程序,功能就是让液晶显示一个字母a。就是这个简单的功能折磨了一个上午,首先我实验板的1602是4位总线连接的。液晶是1602C。程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit Q2=P2^4;
sbit Q3=P2^5;
sbit Q4=P2^6;
sbit Q5=P2^7;//不是很重要,主要是为了关闭实验板上的数码管显示
sbit rs=P0^0; //P0.0接LCD的R/S端
sbit rw=P0^1; //P0.1接LCD的R/W端
sbit en=P0^2; //P0.2接LCD的E端
void delay(uchar);
void write1602(uchar,uchar);
void init() //初始化
{
Q2=1;
Q3=1;
Q4=1;
Q5=1;
delay(20);
rw=0; //不打算读取1602的任何状态或者数据
write1602(0x28,0);//功能设置
delay(20);
write1602(0x0e,0);//显示设置
delay(20);
write1602(0x01,0);//清屏
delay(20);
write1602(0x02,0);//AC清零
delay(20);
write1602(0x06,0);//输入方式
}
void delay(uchar z) //延时1ms子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write1602(uchar com,bit ii)
{
uchar temp;
temp=com;
delay(20);
rs=ii;
delay(20);
en=1;
delay(20);
P0=temp;
delay(20);
temp=com<<4;
en=0;
delay(20);
en=1;
delay(20);
P0=temp;
delay(20);
en=0;
delay(20);
} //这段时序很重要,我感觉没错啊!可能原因就出在这里。
void main()
{
init();
delay(50);
write_com(0x80+5,0);
delay(20);
write_com(0x31,1);
while(1);
}
听说1602是慢器件,可是我延时还不够么?还是那块错了!请大家帮忙看下了~~~
谢谢了
查看全部回复
我也来说两句
