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 + -
显示快捷键?