欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥杯单片机学习过程记录(二十七)第五届国赛串口通信相关代码补充

程序员文章站 2022-06-08 20:41:42
...

蓝桥杯单片机学习过程记录(二十七)第五届国赛串口通信相关代码补充

蓝桥杯单片机学习过程记录(二十七)第五届国赛串口通信相关代码补充

/*
//UART串口通信
第五届国赛uart串口内容相关补充
设置数组存储输入输入字符,并与设定的密码相判断。
*/
#include<STC15F2K60S2.H>
unsigned char count_uart,uart_num;
unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char urdat[6],urdat_set[6]={"AAASSS"};
void delayms(int ms);
void sendbyte(unsigned char dat);
void UartInit(void);
//void sendstring(unsigned char *str);
void display_12(yi,er);
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void allinit();
void uart_pd();
void main(){
	allinit();
	UartInit();EA=1;ES=1;
//	sendstring("Hello,everyone\r\n");
	yi=10;er=10;san=10;si=10;wu=10;liu=10;qi=10;ba=10;
	while(1){
		uart_pd();
		display_12(yi,er);
		display_34(san,si);
		display_56(wu,liu);
		display_78(qi,ba);
	}
}
//串口初始化
void UartInit(void)	
{
	SCON = 0x50;	
	AUXR |= 0x40;		
	AUXR &= 0xFE;		
	TMOD &= 0x0F;		
	TL1 = 0xE0;		
	TH1 = 0xFE;		
	ET1 = 0;		
	TR1 = 1;		
}
//中断接收
void uart_service() interrupt 4{
	//接收完人工进行清零
	if(RI==1){
		RI=0;
		//存入数组
		urdat[count_uart]=SBUF;
	}
	//发送
	sendbyte(urdat[count_uart]);
	count_uart++;
	if(count_uart==6)
		count_uart=0;
}
//判断与设定密码是否一致,一致的话小灯亮
void uart_pd(){
	unsigned char i;
	for(i=0;i<6;i++){
		if(urdat[i]==urdat_set[i]){
			uart_num++;
		}
	}
	if(uart_num==6){
		P2=0X80;P0=0X00;
	}
	uart_num=0;
}
//发送字节
void sendbyte(unsigned char dat){
	SBUF=dat;
	while(TI==0);
	TI=0;
}
//初始化
void allinit(){
	P2=0XA0;P0=0X00;
	P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;
	P2=0X80;P0=0XFF;
}
//延时
void delayms(int ms){
	int q,w;
	for(q=0;q<ms;q++)
		for(w=0;w<845;w++);
}
//数码管
void display_12(yi,er){
	P2=0XC0;P0=0X01;P2=0XE0;P0=seg[yi];delayms(1);
	P2=0XC0;P0=0X02;P2=0XE0;P0=seg[er];delayms(1);
}
void display_34(san,si){
	P2=0XC0;P0=0X04;P2=0XE0;P0=seg[san];delayms(1);
	P2=0XC0;P0=0X08;P2=0XE0;P0=seg[si];delayms(1);
}
void display_56(wu,liu){
	P2=0XC0;P0=0X10;P2=0XE0;P0=seg[wu];delayms(1);
	P2=0XC0;P0=0X20;P2=0XE0;P0=seg[liu];delayms(1);
}
void display_78(qi,ba){
	P2=0XC0;P0=0X40;P2=0XE0;P0=seg[qi];delayms(1);
	P2=0XC0;P0=0X80;P2=0XE0;P0=seg[ba];delayms(1);
	P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;delayms(1);
}

//void sendstring(unsigned char *str){
//	while(*str !='\0'){
//	sendbyte(*str++);
//	}
//}