|
请大侠们帮我看个1602的原理图和代码!无法显示!
[复制链接]
小弟最近在学1602的显示原理,无奈搞了很久都没有进展,无法显示出字符来啊,郁闷中,请大虾们帮我看看!
代码是网上下的,经过自己修改,时序上我觉得应该没有问题,但是proteus上就是仿真不出来啊!!file:///C:/Documents%20and%20Settings/Administrator/桌面
#include
#define Lcd_Data P0 //定义数据端口
sbit RS = P2 ^ 0; //定义连接端口
sbit RW = P2 ^ 1;
sbit E = P2 ^ 2;
sbit Busy = P0 ^ 7;
unsigned char code welcome[] = {"Elitist Teamwork"};
unsigned char code email[] = {"1234567890.com"};
void Delay(unsigned int t)//延时子程序,延时 1MS*t S
{
unsigned char a;
while(--t != 0)
{
for(a = 0; a < 125; a++);
}
}
void Read_Busy(void)//读忙信号判断
{
do{
Lcd_Data = 0xff;
RS = 0;
RW = 1;
E = 0;
Delay(2);
E = 1;
}while(Busy);
}
void Write_Comm(unsigned char lcdcomm) //写指令函数
{
Lcd_Data = lcdcomm;
RS = 0;
RW = 0;
E = 0;
Read_Busy();
E = 1;
}
void Write_Data(unsigned char lcddata)//写数据函数
{
Lcd_Data = lcddata;
RS = 1;
RW = 0;
E = 0;
Read_Busy();
E = 1;
}
void Init_LCD(void)//初始化LCD
{
Write_Comm(0x01);//清显示
Delay(200); //稍微延时,等待LCM进入工作状态
Write_Comm(0x02);//光标归位,此处不设置可能出现错误
Write_Comm(0x38);//8位2行5*8
Write_Comm(0x06);//文字不动,光标右移
Write_Comm(0x0e);//显示开/关,光标开闪烁关;0x0f开
}
void main(void)//主函数
{
unsigned char i;
Init_LCD(); //初始化 LCM
Write_Comm(0x80+16);//写入"welcome首地址(第一行)
for(i=0;i<16;i++)
{
Write_Data( welcome );//显示welcometo字样
}
Write_Comm(0xc0+16);//写入第2行
for(i=0;i<14;i++)
{
Write_Data( email );//显示
}
for(i=0;i<16;i++)
{
Write_Comm(0X18);
Delay(400);
}
while(1);//等待
}
麻烦有做过的前辈们指导指导,不胜感激!!
|
|