您的位置 首页 系统

51单片机与电脑的全双工串口通讯

程序功能:4*4键盘按键数值和电脑按键数值显示在单片机数码管上和串口大师上(0~F)全双工说明:P2数码管段选,只选一个数码管,P1接键盘,

程序功用:4*4键盘按键数值和电脑按键数值显现在单片机数码管上和串口大师上(0~F)全双工

阐明:P2数码管段选,只选一个数码管,P1接键盘,P3.1=TXDP3.0=RXD 通过max232转化电平之后接电脑,翻开串口大师9600bps 1位校验位 8位数据位。借用请留言! 作者QQ:305659935 超

C文件包含两个.h文件

C言语程序如下:

#include
#include
#include<uart9600.h>
#include<44jianpan.h>

void main()
{

uchar key=0;
P2 = 0x7f;//数码管显现”-“
inituart9600();

TR1 = 1;// 发动定时器1

while(1)
{
receive_char();

keydown();

};

}

4*4键盘.h文件如下:

/
void delayms(uchar ms)
{
uchar t;
while(ms–)
{
for(t = 0; t < 120; t++);
}
}

void delay0(uchar x)
{
uchar i;
while(x–)
{
for (i = 0; i<13; i++) {;}
}
}

void beep()
{
uchar i;
for (i=0;i<180;i++)
{
delay0(5);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //封闭蜂鸣器
delayms(250); //延时
}

uchar keyscan()
{
uchar scan1,scan2,keycode,j;

JP=0xf0;
scan1=JP;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delayms(30); //延时30ms
scan1=JP;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
JP=0x0f;
scan2=JP;
keycode=scan1|scan2; //组合成键编码

for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;

return(key);

}
}
}
}
else JP=0xff;

return (16);
}

void keydown()
{
JP=0xf0;
if((JP&0xf0)!=0xf0)
{
keyscan();
P0=disp_code[key];
send_char(key);
beep();
}
}

#endif

uart(串口)协议程序如下:

#ifndef __UART9600_H__
#define __UART9600_H__
unsigned char code disp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
unsigned char tmp;
void send_char(unsigned char txd);
void inituart9600() //初始化计时器,装入值,设定参数 9600bps 1位校验位
{
TMOD = 0x20;// 定时器1作业于8位主动重载形式, 用于发生波特率
TH1 = 0xFD;// 波特率9600
TL1 = 0xFD;

SCON = 0x50;// 设定串行口作业方式
PCON =0x00;// 波特率不倍增

}

void receive_char() //承受1个字符,8位
{



if(RI)// 是否有数据到来
{
RI = 0;
tmp = SBUF;// 暂存接收到的数据,保存数据
P0=disp_code[tmp];
send_char(tmp);////////////////////////////////发回数据

}

}

void send_char(unsigned char txd) //// 传送一个字符,发射1byte,8位

{
SBUF = txd;
while(!TI);// 等特数据传送
TI = 0;// 铲除数据传送标志
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/261927.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部