我这个1602的显示程序为什么不能实现功能?程序没有错呀!大神们帮帮忙,小白求教。
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#define LCD P0
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
void lcdint();
void lcdshow(unsigned char x,unsigned char y,unsigned char sudu );
main()
{
unsigned char sudu=222;
lcdint();
lcdshow(0,0,sudu);
while(1);
}
void Delay10ms(unsigned int n)
{
unsigned char a,b;
for( ;n>0;n++)
{
for(a=130;a>0;a--)
{
for(b=30;b>0;b--);
}
}
}
void lcdwritecmd(unsigned char cmd) // 写入命令
{
//EN=0;
RS=0;
RW=0;
LCD=cmd;
Delay10ms(1);
EN=1;
Delay10ms(1);
EN=0;
}
void lcdwritedate(unsigned char dat) //写入数据
{
//EN=0;
RS=1;
RW=0;
LCD=dat;
Delay10ms(1);
EN=1;
Delay10ms(1);
EN=0;
}
void lcdset(unsigned char x,unsigned char y) //选择显示位置
{
unsigned char addr;
if(y==0)
{
addr=0x80+x;
}
else
{
addr=0x80+0x40+x;
}
lcdwritecmd(addr);
}
void lcdshow(unsigned char x,unsigned char y,unsigned char sudu) //显示函数
{
unsigned char k;
unsigned char sz[3];
lcdset(x,y);
sz[0]=sudu/100;
sz[1]=sudu%100/10;
sz[2]=sudu%100%10;
for(k=0;k<3;k++)
{
lcdwritedate(sz[k]);
}
}
void lcdint() //1602定义
{
Delay10ms(1);
lcdwritecmd(0x38);
Delay10ms(1);
lcdwritecmd(0x38);
Delay10ms(1);
lcdwritecmd(0x38);
lcdwritecmd(0x38);
lcdwritecmd(0x0c);
lcdwritecmd(0x06);
lcdwritecmd(0x01);
lcdwritecmd(0x80);
}
#define LCD P0
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
void lcdint();
void lcdshow(unsigned char x,unsigned char y,unsigned char sudu );
main()
{
unsigned char sudu=222;
lcdint();
lcdshow(0,0,sudu);
while(1);
}
void Delay10ms(unsigned int n)
{
unsigned char a,b;
for( ;n>0;n++)
{
for(a=130;a>0;a--)
{
for(b=30;b>0;b--);
}
}
}
void lcdwritecmd(unsigned char cmd) // 写入命令
{
//EN=0;
RS=0;
RW=0;
LCD=cmd;
Delay10ms(1);
EN=1;
Delay10ms(1);
EN=0;
}
void lcdwritedate(unsigned char dat) //写入数据
{
//EN=0;
RS=1;
RW=0;
LCD=dat;
Delay10ms(1);
EN=1;
Delay10ms(1);
EN=0;
}
void lcdset(unsigned char x,unsigned char y) //选择显示位置
{
unsigned char addr;
if(y==0)
{
addr=0x80+x;
}
else
{
addr=0x80+0x40+x;
}
lcdwritecmd(addr);
}
void lcdshow(unsigned char x,unsigned char y,unsigned char sudu) //显示函数
{
unsigned char k;
unsigned char sz[3];
lcdset(x,y);
sz[0]=sudu/100;
sz[1]=sudu%100/10;
sz[2]=sudu%100%10;
for(k=0;k<3;k++)
{
lcdwritedate(sz[k]);
}
}
void lcdint() //1602定义
{
Delay10ms(1);
lcdwritecmd(0x38);
Delay10ms(1);
lcdwritecmd(0x38);
Delay10ms(1);
lcdwritecmd(0x38);
lcdwritecmd(0x38);
lcdwritecmd(0x0c);
lcdwritecmd(0x06);
lcdwritecmd(0x01);
lcdwritecmd(0x80);
}
首先调试,试试能不能点亮一个点,然后是显示一个字符。
