|
再次输入的时候,lcd怎么清掉之前的数据
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int
// 定义LCD控制引脚
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
// 定义按键引脚
sbit KEY = P1^6;
// 定义数据数组
uchar data_to_send[8];
uchar received_data;
// 延时函数
void delayms(uint ms)
{
uchar i;
while (ms--)
for (i = 0; i < 123; i++);
}
// 向LCD写指令函数
void w_com(uchar com)
{
RS = 0;
RW = 0;
E = 1;
P0 = com;
E = 0;
delayms(1);
}
// 向LCD写数据函数
void w_dat(uchar dat)
{
RS = 1;
RW = 0;
E = 1;
P0 = dat;
E = 0;
delayms(1);
}
// LCD初始化函数
void lcd_ini(void)
{
delayms(10);
w_com(0x38);
delayms(10);
w_com(0x0c);
delayms(10);
w_com(0x06);
delayms(10);
w_com(0x01);
delayms(10);
w_com(0x80);
delayms(10);
}
// 通过串口发送一个字节数据
void send_data(uchar data_to_send)
{
SBUF = data_to_send;
while (TI == 0);
TI = 0;
}
// 串口初始化函数
void uart_init()
{
// 9600bps 11.0592MHz
SCON = 0x50; // 8位数据,可变波特率
TMOD &= 0x0F; // 清除定时器1模式位
TMOD |= 0x20; // 设定定时器1为8位自动重装方式
TL1 = 0xFD; // 设定定时初值
TH1 = 0xFD; // 设定定时器重装值
ET1 = 0; // 禁止定时器1中断
TR1 = 1; // 启动定时器1
EA = 1; // 开启总中断
ES = 1; // 开启串口中断
}
// 主函数
void main()
{
uchar i;
lcd_ini();
uart_init();
while (1)
{
if (KEY == 0)
{
delayms(20);
if (KEY == 0)
{
for (i = 0; i < 8; i++)
{
send_data(data_to_send[ i]);
}
while (KEY == 0);
}
}
}
}
// 串口中断服务函数
void uart_interrupt() interrupt 4
{
if (RI == 1)
{
RI = 0;
received_data = SBUF;
w_dat(received_data);
}
} |
|