关于由51单片机控制LCD1602的显示问题。
程序如下:#include"reg52.h"#include"stdio.h"#defineucharunsignedchar#defineuintunsignedint...
程序如下:
#include "reg52.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^0;//H数据,L命令
sbit lcden=P2^2;//高脉冲使能,使能脉宽最小150ns
sbit rw=P2^1;
uchar code table[]= "Leakage Level";
uchar code table1[]="1";
uchar code table2[]="2";
uchar code table3[]="3";
void delay(uchar x)
{ uint y;
for(;x>0;x--)
{
for(y=100;y>0;y--)
{}
}
}
void lcdwrdata(uchar dat)
{
// dat = ((dat&0x01)<<7)|((dat&0x02)<<5)|((dat&0x04)<<3)|((dat&0x08)<<1)|((dat&0x10)>>1)|((dat&0x20)>>3)|((dat&0x40)>>5)|((dat&0x80)>>7);
rs=1;//写数据时RS拉高
lcden=1;
P0=dat;
delay(6);
lcden=0;
delay(6);
}
void lcdwrcom(uchar cdat)//写指令数据到LCD
{
// cdat = ((cdat&0x01)<<7)|((cdat&0x02)<<5)|((cdat&0x04)<<3)|((cdat&0x08)<<1)|((cdat&0x10)>>1)|((cdat&0x20)>>3)|((cdat&0x40)>>5)|((cdat&0x80)>>7);
rs=0;//写指令时RS拉低
lcden=1;
P0=cdat;//
delay(6);//不加此延时将导致不能写入指令,但能写入显示数据
lcden=0;
delay(6);
}
void lcd_init()
{
lcdwrcom(0x38);//0x38设置显示模式为:16X2 显示,5X7 点阵,8 位数据接口
lcdwrcom(0x0c);//打开显示光标闪烁
lcdwrcom(0x06);//
lcdwrcom(0x01);//
}
void main()
{ uchar n;
rw=0;
delay(200);
lcden=0;
lcd_init();
lcdwrcom(0x00|0x80);
for(n=0;n<13;n++)
{
lcdwrdata(table[n]);
delay(100);
}
if((P1^4==1)&&(P1^5==0)&&(P1^6==0))
{
for(n=0;n<1;n++)
{
lcdwrcom(0x40|0x80);
lcdwrdata(table1[n]);
delay(100);
}
}
else if((P1^4==1)&&(P1^5==1)&&(P1^6==0))
{
for(n=0;n<1;n++)
{
lcdwrcom(0x40|0x80);
lcdwrdata(table2[n]);
delay(100);
}
}
else if((P1^4==1)&&(P1^5==1)&&(P1^6==1))
{
for(n=0;n<1;n++)
{
lcdwrcom(0x40|0x80);
lcdwrdata(table3[n]);
delay(100);
}
}
}
我想由P1.4 ,P1.5, P1.6口的值,在lcd第二排显示不同的数字,但是运行起来一直都显示的1,没有变化。 展开
#include "reg52.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^0;//H数据,L命令
sbit lcden=P2^2;//高脉冲使能,使能脉宽最小150ns
sbit rw=P2^1;
uchar code table[]= "Leakage Level";
uchar code table1[]="1";
uchar code table2[]="2";
uchar code table3[]="3";
void delay(uchar x)
{ uint y;
for(;x>0;x--)
{
for(y=100;y>0;y--)
{}
}
}
void lcdwrdata(uchar dat)
{
// dat = ((dat&0x01)<<7)|((dat&0x02)<<5)|((dat&0x04)<<3)|((dat&0x08)<<1)|((dat&0x10)>>1)|((dat&0x20)>>3)|((dat&0x40)>>5)|((dat&0x80)>>7);
rs=1;//写数据时RS拉高
lcden=1;
P0=dat;
delay(6);
lcden=0;
delay(6);
}
void lcdwrcom(uchar cdat)//写指令数据到LCD
{
// cdat = ((cdat&0x01)<<7)|((cdat&0x02)<<5)|((cdat&0x04)<<3)|((cdat&0x08)<<1)|((cdat&0x10)>>1)|((cdat&0x20)>>3)|((cdat&0x40)>>5)|((cdat&0x80)>>7);
rs=0;//写指令时RS拉低
lcden=1;
P0=cdat;//
delay(6);//不加此延时将导致不能写入指令,但能写入显示数据
lcden=0;
delay(6);
}
void lcd_init()
{
lcdwrcom(0x38);//0x38设置显示模式为:16X2 显示,5X7 点阵,8 位数据接口
lcdwrcom(0x0c);//打开显示光标闪烁
lcdwrcom(0x06);//
lcdwrcom(0x01);//
}
void main()
{ uchar n;
rw=0;
delay(200);
lcden=0;
lcd_init();
lcdwrcom(0x00|0x80);
for(n=0;n<13;n++)
{
lcdwrdata(table[n]);
delay(100);
}
if((P1^4==1)&&(P1^5==0)&&(P1^6==0))
{
for(n=0;n<1;n++)
{
lcdwrcom(0x40|0x80);
lcdwrdata(table1[n]);
delay(100);
}
}
else if((P1^4==1)&&(P1^5==1)&&(P1^6==0))
{
for(n=0;n<1;n++)
{
lcdwrcom(0x40|0x80);
lcdwrdata(table2[n]);
delay(100);
}
}
else if((P1^4==1)&&(P1^5==1)&&(P1^6==1))
{
for(n=0;n<1;n++)
{
lcdwrcom(0x40|0x80);
lcdwrdata(table3[n]);
delay(100);
}
}
}
我想由P1.4 ,P1.5, P1.6口的值,在lcd第二排显示不同的数字,但是运行起来一直都显示的1,没有变化。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询