01-串口测试程式(接收).c
来自「CAN现场总线.rar」· C语言 代码 · 共 108 行
C
108 行
// 01-串口测试程式(接收).c
// 接收来至串口的数据,对应每一个ASCII码,然后显示相对应的数字
// 29-09-09 akuei2
#include "stdio.h"
#include "reg52.h"
#define uchar unsigned char
//定义数码管码
uchar code Led_Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//定义位选码
//0b111011111,0b11011111,0b10111111,0b01111111
uchar code Led_Select[]={0xEF,0xDF,0xBF,0x7F};
uchar Buffer_RXD,Number,N,Temp;
//50微秒延迟函数
void Delay_50us(int t)
{
uchar j;
t--;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//数码管显示函数
void Display(void)
{
P0=Led_Code[Number]; // 送数码管码
P2=Led_Select[3]; // 送位选码
Delay_50us(20); // 延迟1微秒
P0=P2=0xff; // 消影
}
//接收数据对应数字函数
void Edit_Number(void)
{
if(Temp!=Buffer_RXD) // 如果接受的数据与前一个数据不一样...
{
switch(Buffer_RXD)
{
case '0': Number=0; break;
case '1': Number=1; break;
case '2': Number=2; break;
case '3': Number=3; break;
case '4': Number=4; break;
case '5': Number=5; break;
case '6': Number=6; break;
case '7': Number=7; break;
case '8': Number=8; break;
case '9': Number=9; break;
}
}
}
//初始化函数
void Init(void)
{
TMOD=0x20; // T1工作模式2,T0工作模式1
SM0=0;SM1=1; // 设置串口的工作模式
TH1=0xfd; // 给TH1赋值,决定赋给TL1的值
TL1=0xfd; // 给TL1赋值决定波特率9600kb/s
TR0=1; // 定时器0启动
ET0=1;
TR1=1; // 定时器1启动
IT0 = 1; // 外部中断0负边沿触发
EX0 = 1; // 打开外部中断0
REN=1; // 不应许串口接收数据
EA=1; // 开启中断
ES=1; // 串口中断应许
Number=0;
Buffer_RXD=0;
}
//主函数
void main(void)
{
Init(); // 调用初始化函数
while(1)
{
Display(); // 数码管不停的显示
}
}
//串口接收中断
void Ir_RXD(void) interrupt 4
{
ES = 0; // 关闭串口
if(RI==1)
{
RI = 0;
Buffer_RXD = SBUF;
Temp=Buffer_RXD;
}
ES = 1; // 打开串口
Edit_Number(); // 调用函数
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?