1602液晶仿真程序


//**0503030214 胡伟银 2008年7月24 邵阳滩头 [email=541019865@qq.com**//]541019865@qq.com**//[/email]
//**1602核心HD44780,液晶显示模块**//
//**初次做遇到很多低级错误,特别是在PROTEL仿真时上拉电阻没有标总线相关网络编号导致无法正常显示**//
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code tablez[]={"I LOVE YOU!"};
uchar code table[]={"Time:"};
uchar code tables[]={"0123456789"};
uchar code table1[]={"Good Luck!"};
sbit ie=P1^0;
sbit rw=P1^1;
sbit rs=P1^2;
uchar num,t0,num2,num1;
void write_cmd(uchar cmd);
void delay(uint z)//延时子程序
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void init()//初始化子程序
{   TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num=9;
num2=9;
t0=0;
EA=1;
ET0=1;
TR0=1;
ie=0;
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);
write_cmd(0x80+0x03);
  
}
bit checkbusy()//检测忙子程序
{ bit result;
rs=0;
rw=1;
ie=1;
result= (bit)(P0&0x80);
ie=0;
return result;
  
}
void write_date(uchar date)//向1602写入数据
{
rs=1;//选择数据操作
rw=0;
P0=date;
delay(5);
ie=1;
delay(5);
ie=0;
}
void write_cmd(uchar cmd)//向1602写入指令
{
rs=0;
rw=0;
P0=cmd;
delay(5);
ie=1;
delay(5);
ie=0;
}
void main()
{
init();
write_cmd(0x83);
for(num1=0;num1<11;num1++)
{
write_date(tablez[num1]);}
write_cmd(0x83+0x40);
for(num1=0;num1<5;num1++)
{
write_date(table[num1]);}
    write_cmd(0x80+0x4b);
write_date('s');
while(1)
{
if(t0==20)
{t0=0;
     write_cmd(0x80+0x49);
  if(num>=0)
   {   num--;
    write_date(tables[num]);
   }

     write_cmd(0x80+0x48);
  if(num2>0)
      {
  
     write_date(tables[num2]);
          if(num==0)
                  {
     num2--;
                    num=10;
         }
     
               }
    }
}
   
}
void timer0() interrupt 1//中断服务程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
}

yej.rar
(2008-07-25 11:18:55, Size: 12.6 KB, Downloads: 7)


我也来说两句 查看全部回复

最新回复

  • tourlost (2008-7-28 09:26:12)

    貌似是沙发? RAR里面是什么啊  程序都贴出来了
  • tourlost (2008-7-28 09:29:22)

    我日  系统太黑了 下一次扣非鸡巴多  只有狂灌了