主要实验功能:1.按下P3^0,串口发送1,2,3,4,5,6,7,8共8个数据到串口助手 2.串口助手传来的数据再LCD1602显示
问题1:发送到串口助手的数据错乱
问题2:LCD1602显示1的话,需要在串口助手传回11
#include <reg52.h>
#include <LCD1602.h>
typedef unsigned char u8;
void delayms(u8 ms){
u8 i;
while(ms--)
for(i=0;i<113;i++);
}
u8 scan(void){
static bit kp=0;
if((P3&0x0f)!=0x0f)
{
kp=1;
if((P3&0x0f)==0x0e) return 1;
}
else kp=0;
return 0;
}
void Init()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0; //波特率不加倍
TH1=0XFD; //计数器初始值设置,注意波特率是9600的
TL1=0XFD;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main() {
Init(); //串口初始化
LCD_Init(); //LCD1602初始化
while(1) {
}
}
void Usart() interrupt 4
{
u8 i = 0;
u8 receiveData;
if(scan() == 1)
{
SBUF = 0x01;
while(TI == 0);
TI = 0;
delayms(100);
SBUF = 0x02;
while(TI == 0);
TI = 0;
delayms(100);
SBUF = 3;
while(TI == 0);
TI = 0;
delayms(100);
SBUF = 4;
while(TI == 0);
TI = 0;
delayms(100);
SBUF = 5;
while(TI == 0);
TI = 0;
delayms(100);
SBUF = 6;
while(TI == 0);
TI = 0;
delayms(100);
SBUF = 7;
while(TI == 0);
TI = 0;
delayms(100);
SBUF = 8;
while(TI == 0);
TI = 0;
}
if(RI)
{
receiveData = SBUF; //接收到的数据
RI = 0; //清除接收中断标志位
LCD_ShowChar(1,1,receiveData);
}
}
|