标题:
单片机与PC机通信
[打印本页]
作者:
兴仔
时间:
2019-6-10 18:18
标题:
单片机与PC机通信
#include<reg51.h>
#include<intrins.h>
unsigned char key_s,key_v,tmp;
unsigned char display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x82,0xF8,0x80,0x90};
char code str[]="welcome!\n\r";/*定义向PC机发送的内容*/
void send_str();/*声明发送字符串函数*/
bit scan_key();/*声明按键函数*/
void proc_key();/*声明按键处理函数*/
void send_char(unsigned char td);/*声明发送字符函数*/
void delayms(unsigned char ms);/*声明延时函数*/
sbit K1=P1^4;
void main()
{
TMOD=0x20;/*定时器1工作于8位自动重载模式,用于产生波特率 */
TH1=0xFD; /*波特率9600*/
TL1=0xFD;
SCON=0x50;/*设定串行口工作方式*/
PCON=0xef;/*波特率不倍增*/
TR1=1; /*启动定时器1*/
IE=0x00;/*禁止任何中断*/
while(1)
{
if(scan_key())
delayms(10); /*延时去抖动*/
if(scan_key())
{
key_v=key_s;
proc_key();
}
if(RI) /*是否传来数据*/
{
RI=0;
tmp=SBUF; /*暂存接受到的数据*/
delayms(10);
P0=display_code[tmp-0x30]; /*数据传送到PO口*/
send_char(tmp); /*回传接受的数据*/
}
}
}
bit scan_key() /*扫描按键*/
{
key_s=0x00;
key_s|=K1;
return(key_s^key_v);
}
void proc_key() /*按键处理*/
{
if((key_v&0x01)==0) /*k1按键按下*/
{
send_str(); /*传送字符串*/
}
}
void send_char(unsigned char td) /*传送一个字符*/
{
SBUF=td;
while(!T1); /*等待数据传送*/
T1=0; /*清除数据传送标志*/
}
void send_str() /*传送字符串*/
{
unsigned char i=0;
while(str[i]!='\0')
{
SBUF=str[i];
T1=0; /*清除数据传送标志*/
i++;
}
}
void delayms(unsigned char ms) /*延时子程序*/
{
unsigned char j;
while(ms--)
{
for(j=0;j<120;j++);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1