单片机1602液晶用烧写程序烧入程序后,只显示16个方格,如图所示,怎么处理啊?
展开全部
程序肯定是有问题了,现让液晶显示出来内容,这样就说明1602的驱动是对的,
#include<stc.h>#define uchar unsigned char
#define uint unsigned int
uchar code table[]="SHUZILEIDA"; //让液晶显示这两行字
uchar code table1[]="IIS80.COM!";
sbit lcdrs=P1^5; //数据/命令选择端sbit lcdrw=P1^6;
sbit lcden=P1^7; //液晶使能信号
sbit duan=P1^0; // 数码管段控制sbit wei=P1^1; // 数码管位控制
sbit rst=P3^4;//DS1302复位端,低电平关闭 uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //命令{
lcdrs=0; //选择写命令
P0=com;
delay(5);
lcden=1; //使能信号
delay(5);
lcden=0; //关闭使能
}
void write_data(uchar date) //数据{
lcdrs=1; //选择写数据
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init(){
lcden=0;
write_com(0x38); //00111000 设置16*2显示,5*7点阵 8为数据接口
write_com(0x0c); //00001100 设置开显示,不显示光标
write_com(0x06); // 00000110 写一个字符后地址指针加 1
write_com(0x01); //00000001 显示清0,数据指针清零 /* */
}
void main(){
P0=0XFF;
wei=0;
P0=0X00;
duan=0; //关闭数码管
lcdrw=0; //lcd写操作
init();
write_com(0x80+0x10+0x03); // 数据行位置
for(num=0;num<10;num++) {
write_data(table[num]);
delay(20);
}
write_com(0x80+0x40);// 数据行位置 for(num=0;num<10;num++)
{
write_data(table1[num]);
delay(20);
}
/* for(num=0;num<16;num++) //屏幕左移
{
write_com(0x18);
delay(2000);
} */
while(1);
}
#include<stc.h>#define uchar unsigned char
#define uint unsigned int
uchar code table[]="SHUZILEIDA"; //让液晶显示这两行字
uchar code table1[]="IIS80.COM!";
sbit lcdrs=P1^5; //数据/命令选择端sbit lcdrw=P1^6;
sbit lcden=P1^7; //液晶使能信号
sbit duan=P1^0; // 数码管段控制sbit wei=P1^1; // 数码管位控制
sbit rst=P3^4;//DS1302复位端,低电平关闭 uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //命令{
lcdrs=0; //选择写命令
P0=com;
delay(5);
lcden=1; //使能信号
delay(5);
lcden=0; //关闭使能
}
void write_data(uchar date) //数据{
lcdrs=1; //选择写数据
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init(){
lcden=0;
write_com(0x38); //00111000 设置16*2显示,5*7点阵 8为数据接口
write_com(0x0c); //00001100 设置开显示,不显示光标
write_com(0x06); // 00000110 写一个字符后地址指针加 1
write_com(0x01); //00000001 显示清0,数据指针清零 /* */
}
void main(){
P0=0XFF;
wei=0;
P0=0X00;
duan=0; //关闭数码管
lcdrw=0; //lcd写操作
init();
write_com(0x80+0x10+0x03); // 数据行位置
for(num=0;num<10;num++) {
write_data(table[num]);
delay(20);
}
write_com(0x80+0x40);// 数据行位置 for(num=0;num<10;num++)
{
write_data(table1[num]);
delay(20);
}
/* for(num=0;num<16;num++) //屏幕左移
{
write_com(0x18);
delay(2000);
} */
while(1);
}
更多追问追答
追问
还是不行啊
追答
sbit lcdrs=P1^5; //数据/命令选择端sbit lcdrw=P1^6;
sbit lcden=P1^7; //液晶使能信号
sbit duan=P1^0; // 数码管段控制sbit wei=P1^1; // 数码管位控制
sbit rst=P3^4;//DS1302复位端,低电平关闭 uchar num;这
这几个IO口要更改成和你单片机一致的,这个程序我是测试过的,还有就是看一下你的背光是否太亮了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
北京晶宇兴科技
2020-02-18 广告
2020-02-18 广告
选择晶振,应综合考虑多方面因素。这里分享一些小经验,希望对你有所帮助。晶体振荡器被广泛应用到军、民用通信电台,微波通信设备,程控电话交换机,无线电综合测试仪,BP机、移动电话发射台,高档频率计数器、GPS、卫星通信、遥控移动设备等。它有多种...
点击进入详情页
本回答由北京晶宇兴科技提供
2013-04-21 · 知道合伙人教育行家
关注
展开全部
要么是程序有问题,要么是程序中你写的数据太快,lcd忙不过来
追问
不会的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询