LCD1602显示不正常(有程序)
用51单片机控制1602显示,51单片机计数,在1602上显示出来,不知道怎么回事:比如从00 到09显示正常,到显示10时,1就显示不出来了,计数到20是,十位就显示出来,个位就时有时无了,计数是正常的,在proteus上仿真也如此#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define P00 P0
#define P01 P1
#define P02 P2
#define P03 P3
sbit naiyapass=P0^0;
sbitzhishideng=P3^7;
uchar flag1,flag2,ID, num,m=0;
uint t=0;
//////////////////////////////////////
uchar code table[]="zong ji shu";
uchar code table1[]="count:";
unsigned char nu;
sbit lcden=P3^3; //shinengxinhao
sbit lcdrw=P3^4; //duxiexuanzeduan(H/L) bixu di dianping 筿キ钡!!!!!!!!!!!
sbit lcdrs=P3^5; //shuju/mingling xuanzeduan(H/L)
/////////////////////////////////////
uchar number={0x30,0x13,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void delay1ms(uint count)
{
uint i,a;
for(i=0;i<count;i++)
for(a=0;a<120;a++);
}
void write_com(uchar com) //xie ming ling
{
lcdrs=0;
P1=com;
delay1ms(10);
lcden=1;
delay1ms(10);
lcden=0;
}
void write_data(uchar date) //xie shu ju
{
lcdrs=1;
delay1ms(50);
P1=date;
delay1ms(50);
lcden=1;
delay1ms(50);
lcden=0;
}
void init() //chushihua
{
//dula=0;
//wela=0;
lcdrw=0;
lcden=0; //Τ礚
write_com(0x38);
write_com(0x0c); //砞竚秨陪ボぃ陪ボ夹
write_com(0x06); //糶才皐
write_com(0x01); //陪ボ睲0计沮皐睲0
}
void lcdxianshi()
{
nu=(t/1000)%10; //HIGH
nu=(t/100)%10;
nu=(t/10)%10;
nu=(t/1)%10; //LOW
write_com(0x80+0x46);
for(num=0;num<4;num++) //xianshi 5 wei
{
write_data(number]);
}
}
///////////////////////////
void main()
{
P00=0xff;
P01=0xff;
P02=0xff;
P03=0xff;
flag1=0;
flag2=0;
cy=1;
ID=0;
t=0;
init();
write_com(0x80);
for(num=0;num<11;num++)
{
write_data(table);
delay1ms(20);
}
write_com(0x80+0x40);
for(num=0;num<6;num++)
{
write_data(table1);
delay1ms(20);
}
/////////////////////////////////////////////
lcdxianshi();
while(1)
{
if(naiyapass==0)
{
++t;
delay1ms(50);
lcdxianshi();
delay1ms(50);
if(t==20)
{
zhishideng=0;
}
if(t>=25)
{
zhishideng=1;
}
if(t==35)
{
t=0;
do
{
;
}while(naiyapass==0);
delay1ms(50);
}
} //if(naiyapass)
}//while
}//main 应该是LCD驱动问题,每次写显示的数据时先写入DDRAM地址,保证地址跟屏的位置对应上!
你这样的程序很难帮你查
页:
[1]