最近仿照写了一段比较简单的程序,是仿真单片机与pc进行的串口通信:将按键的数字通过led显示,并发送给pc机上,可是结果没有出来,我估计在这块我的理解有点问题,希望大家能给我看看,下面是仿真图和程序,谢谢了!
#include<reg52.h>
unsigned char i,j,k;
unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73};
void inti();
void delay();
void keyscan();
void display();
void trainsmit();
void inti()
{
SCON=0x50;//串口工作方式2
PCON=0x00;//设置波特率
TMOD=0X02;//定时器工作方式2
TH0=0XFD;//设置波特率为9600
TL0=0XFD;
TR0=1;
EA=1;
ES=1;
}
void delay()
{
unsigned char i,j;
for(i=0;i<200;i++)
for(j=0;j<100;j++);
}
void keyscan()//键盘扫描
{
P3=0x0f;
if(P3!=0x0f)
delay();
if(P3!=0x0f)
{
while(P3!=0x0f);
switch(P3)
{
case 0x0e:i=0;break;
case 0x0d:i=1;break;
case 0x0b:i=2;break;
case 0x07:i=3;break;
}
}
P3=0xf0;
if(P3!=0xf0)
{
delay();
if(P3!=0xf0)
{
while(P3!=0xf0);
switch(P3)
{
case 0xe0:j=0;break;
case 0xd0:j=1;break;
case 0xb0:j=2;break;
case 0x70:j=3;break;
}
}
}
}
void display()
{
k=4*i+j;
P0=tab[k];
}
void trainsmit()//单片机向pc发送数据
{
SBUF=k;
while(!TI);
TI=0;
}
void main()
{
while(1)
{
inti();
keyscan();
trainsmit();
display();
}
}
单片机+RS232通信模块实现Modbus RTU串口通信