我用stc12c5a60s2单片控制1602液晶显示,开始液晶显示都是正常的。设置按键什么的按下显示都是正常的,我将液晶显示在哪里点了一晚上。第二天过来,看到的数据是对的。当我按下设置按钮时,显示就有些乱了,在连续按键。完全就乱掉了,该显示的不显示,不该显示的乱显示。我将换过
单片机,换过液晶,程序也重新烧过,以前写的程序也烧过。都显示出乱。。。。。。硬件没什么好说的,就几个引脚。这个到底是怎么回事啊?望高人们指点迷津啊!小弟在此谢过啦!!
sbit E=P2^7; //1602使能引脚
sbit RW=P2^6; //1602读写引脚
sbit RS=P2^5; //1602数据/命令选择引脚
sbit led=P2^4; //1602背光led控制位
sbit set_key=P2^0; //左1
sbit add_key=P2^1; //中间
sbit sub_key=P2^2; //右1
uchar code num[] ="0123456789 ";
uchar code start[] ="Set Data Please:Enter>> set_key ";
uchar code mode[] ="PuT/ZhiN >>>Choose:";
uchar code much[] ="Business:Cool >>>";
uchar code state[] ="Set Success:---ChengGong";
uchar code coin[] ="1_Cool--?_bage?=";
{
E=0;
RS=1;
RW=1;
P0=0xff;
}
/*------读忙信号-----*/
void read_busy()
{
P0=0xff;
RS=0;
RW=1;
E=1;
while(P0&0x80);
E=0;
}
/*-------------LCD写命令-----------------*/
void write_com(uchar com)
{
read_busy();
E=0;
RS=0;
RW=0;
P0=com;
delay(10);
E=1;
delay(10);
E=0;
}
/*-------------写数据-----------------*/
void write_data(uchar dat)
{
read_busy();
E=0;
RS=1;
RW=0;
P0=dat;
delay(10);
E=1;
delay(10);
E=0;
}
/*-------------液晶初始化函数-------------*/
void lcd_init()
{
delay(30);
write_com(0x38);
delay(10);
write_com(0x38);
delay(10);
write_com(0x08);
delay(10);
write_com(0x01);
delay(10);
write_com(0x06);
delay(10);
write_com(0x0c);
delay(10);
}
/*------------显示设置成功----------*/
void success_display(void)
{
uchar i;
write_com(0x01); //显示清屏
delay(10);
write_com(0x80); //显示在第一行
for(i=0;i<12;i++)
{
write_data(state[i]);
delay(10);
}
write_com(0x80+0x40+4);
for(i=0;i<12;i++)
{
write_data(state[i+12]);
delay(10);
}
}
/*--------------模式选择函数-------------*/
void mode_choose(void)
{
uchar i;
write_com(0x01); //显示清屏
delay(10);
write_com(0x80); //显示在第一行
for(i=0;i<12;i++)
{
write_data(mode[i]);
delay(10);
}
write_com(0x80+0x40); //显示在第一行
for(i=0;i<7;i++)
{
write_data(mode[i+12]);
delay(10);
}
if(set_mode==0) //普通模式
{
write_com(0x80+0x40+11); //显示在第一行
write_data(start[3]); //显示空
delay(10);
for(i=0;i<3;i++)
{
write_data(mode[i]);
delay(10);
}
}
else
{
write_com(0x80+0x40+11); //显示在第一行
for(i=0;i<4;i++)
{
write_data(mode[i+4]);
delay(10);
}
}
}
一周热门 更多>