51单片机串口通讯的问题
#include<reg52.h>
#define GPIO_KEY P1
unsigned char KeyValue;
bit flag;
void Delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f; //测试
if(GPIO_KEY!=0x0f) //读取按键是否按下
{
Delay10ms();//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
//测试列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0)) //检测按键松手检测
{
Delay10ms();
a++;
}
}
}
}
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main()
{
KeyDown();
UsartConfiguration();
while(1)
{
}
}
void Usart() interrupt 4
{
SBUF = KeyValue;
while(!TI);
TI = 0;
}
代码正在审核中
请各位大神看看问题出在哪里?
你的流程错了,应该是在while(1)里进行键盘扫描,就是执行KeyDown();,在判断有按键按下时,向串口发送数据,串口的发送数据一般不在中断里,至少在你的这种情况下,发送数据是不在串口中断里的。
你好 改正之后现在计算机可以接收到数据 但是不是按照十进制数显示的 这里我的unchar型变量怎么转换成十进制发送呢
a = KeyValue / 100; 百位,
b = KeyValue%100/10;十位,
c = KeyValue%10;个位,
共3个字节