单片机发送的数据由4*4矩阵键盘输入按键分为数字键0-9和功能键(发送键)。输入的数据(0-255)应显示在数码管上。当发送键按下时,将输入的数据通过串口通信发送给计算机,计算机有isp程序接收该数据。STC89C52RC C语言代码
时间: 2024-02-24 07:57:49 浏览: 78
单片机串口发送接收C代码
4星 · 用户满意度95%
以下是STC89C52RC单片机使用4*4矩阵键盘输入数字和功能键,并将输入数据显示在数码管上,并通过串口通信发送给计算机的C语言代码:
```c
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar keyscan();
void delay(uint x);
void send_data(uchar dat);
void main()
{
uchar key, dat, i;
TMOD = 0x20; //定时器1工作在模式2,8位自动重装载
TH1 = 0xfd; //波特率9600
TL1 = 0xfd;
TR1 = 1; //启动定时器1
SM0 = 0;
SM1 = 1; //使用串口模式1
REN = 1; //启动串口接收
EA = 1;
ES = 1; //开启总中断和串口中断
while(1)
{
key = keyscan(); //扫描键盘
if(key != 0xff) //如果有按键按下
{
if(key == 0x0d) //如果按下的是发送键
{
SBUF = dat; //通过串口发送数据
}
else //如果按下的是数字键
{
dat = key; //保存输入的数据
for(i=0; i<500; i++) //防抖延时
{
if(keyscan() != key) break;
delay(1);
}
}
}
P0 = table[dat]; //在数码管上显示输入的数据
}
}
uchar keyscan() //键盘扫描函数
{
uchar i, j, key;
for(i=0; i<4; i++)
{
P1 = 0x0f << i; //按行扫描
key = P1;
key &= 0xf0;
if(key != 0xf0) //如果有按键按下
{
delay(5); //延时去抖动
key = P1;
key &= 0xf0;
if(key != 0xf0) //如果抖动后仍有按键按下
{
key |= (0x0f << i);
return key; //返回按键值
}
}
}
return 0xff; //无按键按下
}
void delay(uint x) //延时函数
{
uint i, j;
for(i=x; i>0; i--)
for(j=110; j>0; j--);
}
void send_data(uchar dat) //通过串口发送数据
{
SBUF = dat;
while(!TI);
TI = 0;
}
void serial() interrupt 4 using 1 //串口中断函数
{
uchar dat;
if(RI) //如果接收到数据
{
RI = 0;
dat = SBUF;
//处理接收到的数据
}
}
```
注意:以上代码仅供参考,可能存在错误或不足之处,使用时请根据实际情况进行修改和完善。
阅读全文