单片机上1602液晶全清屏指令为0x01,怎样清除下部分的的显示呢 在线等。

2025-02-27 15:34:38
推荐回答(4个)
回答1:

序肯定是有问题了,现让液晶显示出来内容,这样就说明1602的驱动是对的,
#include#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);
}

回答2:

1602和12864一样的只能是清全屏的 不能清每一行的
吉林大学应用技术学院经典33工作室

回答3:

第二行写一个长度适合的空数据即可
类似于 table2[ ] = { };
第二行的起始地址是 0x80+0x40 = 0xC0

回答4:

可能你是在中断中清屏的吧,正常来说应该是全部清屏