⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8avand8vgaswitch.c

📁 STC单片机串口通信程序
💻 C
字号:
#include<STC89C51RC_RD_PLUS.H>
#include<intrins.h>
#define len 4
//unsigned char self_command_array[4]={0x00,0x11,0x22,0x33};
//定义4个指示灯
sbit	LED1	=P3^3;
sbit	LED2	=P3^4;
sbit	LED4	=P3^5;
sbit	LED8	=P3^6;
//定义138译码器的ABC输入端
sbit	Key_A	=P4^0;
sbit	Key_B	=P4^1;
sbit	Key_C	=P4^2;

sbit	KEY	=P3^2;
sbit	judge	=P3^7;
unsigned char buf[len];//接收数据存储区={0xFE,0x03,0x??,0x00}
unsigned char bak[len]={0x00,0x2A,0x31,0x26};
//返回数据
char	ID=0;

//函数声明
void  send_char_com(unsigned char ch);//向串口发送一个字符 
void  send_string_com(unsigned char *str,unsigned char strlen);//向串口发送一个字符串
void  UART_Interrupt_Receive(void);//串口中断接收,并处理串口数据命令
void delay10ms(unsigned int k) ;//软件去抖动,延时10ms
void  delay(void);
void  soft_reset_to_ISP_Monitor(void);
void	key_deal(void);//键值处理


//主函数
void main(void)
{	
//	WDT_CONTR=0x
	SCON=0X50;//串口工作在方式1,一个起始位,8位数据,一个停止位,接受允许。
	TMOD=0X20;//T1工作在模式2,8位自动重装模式
	TH1=0Xfd;//晶振频率为11.0592MHZ,T1作为波特率发生器,SMOD=0,波特率为9600,定时器初值为0Xfd。
	TL1=0Xfd;
	TR1=1;//启动定时器1
	ES=1;//串口中断打开
	EA=1;//总中断允许
	LED1=0;LED2=0;LED4=0;LED8=0;
	delay();
	LED1=1;LED2=1;LED4=1;LED8=1;
	while(1)
	{
	if(judge==0)
	{
	  key_deal();
	  }
	}
}

//向串口发送一个字符 
void send_char_com(unsigned char ch)  
{
    SBUF=ch;
    while(TI==0);
    TI=0;
}

//向串口发送一个字符串,strlen为该字符串长度 
void send_string_com(unsigned char *str,unsigned char strlen)
{
    unsigned char k=0;
    do 
    {
        send_char_com(*(str + k));
        k++;
    } while(k < strlen);
}

//串口中断接收,并处理串口数据命令
void UART_Interrupt_Receive(void) interrupt 4
{
	unsigned char k=0;
	unsigned int j;
	for(k=0;k<len;k++)
	{
		for(j=0;j<5000&&!RI;j++);
		if(RI)
			{
				buf[k]=SBUF;
				RI=0;
			}
  	}
	if((buf[0]==0x00)&&(buf[1]==0x11)&&(buf[2]==0x22)&&(buf[3]==0x33))
  		{
  			send_string_com(buf,len);
  			delay();
  			delay();
  			soft_reset_to_ISP_Monitor();
  			}
  	if((buf[1]==0x2A)&&(buf[2]==0x31)&&(buf[3]==0x26))
  		{
  			switch(buf[0])
  			{
  				case	0X31://通道0
					P0=0XFE;P1=0XFF;P2=0XFE;
  					Key_A=0;Key_B=0;Key_C=0;
  					LED1=1;LED2=1;LED4=1;LED8=1;
				 	bak[0]=0x31;send_string_com(bak,len);
 					break;				
  				case	0X32://通道1
					P0=0XFF;P1=0XFF;P2=0XFD;
  					Key_A=0;Key_B=0;Key_C=0;
  					LED1=0;LED2=1;LED4=1;LED8=1;
				  	bak[0]=0x32;send_string_com(bak,len);
 					break;
  				case	0X33://通道2
					P0=0XFD;P1=0XFF;P2=0XFB;
  					Key_A=1;Key_B=0;Key_C=0;
  					LED1=1;LED2=0;LED4=1;LED8=1;
				  	bak[0]=0x33;send_string_com(bak,len);
 					break;
  				case	0X34://通道3
					P0=0XFF;P1=0XFF;P2=0XF7;
  					Key_A=1;Key_B=0;Key_C=0;
  					LED1=0;LED2=0;LED4=1;LED8=1;
 				 	bak[0]=0x34;send_string_com(bak,len);
  					break;
  				case	0X35://通道4
					P0=0XFB;P1=0XFF;P2=0XEF;
  					Key_A=0;Key_B=1;Key_C=0;
  					LED1=1;LED2=1;LED4=0;LED8=1;
 				 	bak[0]=0x35;send_string_com(bak,len);
 					break;
  				case	0x36://通道5
					P0=0XFF;P1=0XFF;P2=0XDF;
  					Key_A=0;Key_B=1;Key_C=0;
  					LED1=0;LED2=1;LED4=0;LED8=1;
 				 	bak[0]=0x36;send_string_com(bak,len);
  					break;
  				case	0x37://通道6
					P0=0XF7;P1=0XFF;P2=0XBF;
  					Key_A=1;Key_B=1;Key_C=0;
  					LED1=1;LED2=0;LED4=0;LED8=1;
 				 	bak[0]=0x37;send_string_com(bak,len);
  					break;
  				case	0x38://通道7
					P0=0XFF;P1=0XFF;P2=0X7F;
  					Key_A=1;Key_B=1;Key_C=0;
  					LED1=0;LED2=0;LED4=0;LED8=1;
 				 	bak[0]=0x38;send_string_com(bak,len);
  					break;
  				case	0x39://通道8 
					P0=0XEF;P1=0XFE;P2=0XFF;
  					Key_A=0;Key_B=0;Key_C=1;
  					LED1=1;LED2=1;LED4=1;LED8=0;
 				 	bak[0]=0x39;send_string_com(bak,len);
  					break;
  				case	0x41://通道9 
 					P0=0XFF;P1=0XFD;P2=0XFF;
  					Key_A=0;Key_B=0;Key_C=1;
  					LED1=0;LED2=1;LED4=1;LED8=0;
 				 	bak[0]=0x41;send_string_com(bak,len);				
  					break;
  				case	0x42://通道10 
 					P0=0XDF;P1=0XFB;P2=0XFF;
  					Key_A=1;Key_B=0;Key_C=1;
  					LED1=1;LED2=0;LED4=1;LED8=0;
  					bak[0]=0x42;send_string_com(bak,len);
  					break;
  				case	0x43://通道11
					P0=0XFF;P1=0XF7;P2=0XFF;
  					Key_A=1;Key_B=0;Key_C=1;
  					LED1=0;LED2=0;LED4=1;LED8=0;
 				 	bak[0]=0x43;send_string_com(bak,len);
  					break;
  				case	0x44://通道12
					P0=0XBF;P1=0XEF;P2=0XFF;
	  				Key_A=0;Key_B=1;Key_C=1;
  					LED1=1;LED2=1;LED4=0;LED8=0;
 			 		bak[0]=0x44;send_string_com(bak,len);
 					break;
  				case	0x45://通道13
				P0=0XFF;P1=0XDF;P2=0XFF;
  				Key_A=0;Key_B=1;Key_C=1;
  				LED1=0;LED2=1;LED4=0;LED8=0;
 			 	bak[0]=0x45;send_string_com(bak,len);
 					break;
  				case	0x46://通道14
				P0=0X7F;P1=0XBF;P2=0XFF;
  				Key_A=1;Key_B=1;Key_C=1;
  				LED1=1;LED2=0;LED4=0;LED8=0;
 			 	bak[0]=0x46;send_string_com(bak,len);
  					break;
  				case	0x47://通道15
				P0=0XFF;P1=0X7F;P2=0XFF;
  				Key_A=1;Key_B=1;Key_C=1;
  				LED1=0;LED2=0;LED4=0;LED8=0;
 			 	bak[0]=0x47;send_string_com(bak,len);
 					break;
  			}
  		}
  }

//用户程序软件复位并从系统的ISP监控程序区开始执行程序									
void soft_reset_to_ISP_Monitor(void)
{
	ISP_CONTR=0x60;
} 

//键值处理
void	key_deal(void)
{
	if(KEY==0) 
		{
			delay10ms(200); 
			if(KEY==0) 
				{ 
					ID++; 
					if(ID==17)
						{ 
							ID=0; 
							} 
							while(KEY==0); 
					}
			}
	switch(ID)
	{
		case 1:
			P0=0XFE;P1=0XFF;P2=0XFE;
  			Key_A=0;Key_B=0;Key_C=0;
  			LED1=1;LED2=1;LED4=1;LED8=1;
//  			bak[2]=0x00;send_string_com(bak,len);
			break;
		case 2:
			P0=0XFF;P1=0XFF;P2=0XFD;
  			Key_A=0;Key_B=0;Key_C=0;
  			LED1=0;LED2=1;LED4=1;LED8=1;
//		  	bak[2]=0x01;send_string_com(bak,len);
			break;
		case 3:
			P0=0XFD;P1=0XFF;P2=0XFB;
  			Key_A=1;Key_B=0;Key_C=0;
  			LED1=1;LED2=0;LED4=1;LED8=1;
//		  	bak[2]=0x02;send_string_com(bak,len);
			break;
		case 4:
			P0=0XFF;P1=0XFF;P2=0XF7;
  			Key_A=1;Key_B=0;Key_C=0;
  			LED1=0;LED2=0;LED4=1;LED8=1;
 //		 	bak[2]=0x03;send_string_com(bak,len);
			break;
		case 5:
			P0=0XFB;P1=0XFF;P2=0XEF;
  			Key_A=0;Key_B=1;Key_C=0;
  			LED1=1;LED2=1;LED4=0;LED8=1;
 //		 	bak[2]=0x04;send_string_com(bak,len);
			break;
		case 6:
			P0=0XFF;P1=0XFF;P2=0XDF;
  			Key_A=0;Key_B=1;Key_C=0;
  			LED1=0;LED2=1;LED4=0;LED8=1;
 //		 	bak[2]=0x05;send_string_com(bak,len);
			break;
		case 7:
			P0=0XF7;P1=0XFF;P2=0XBF;
  			Key_A=1;Key_B=1;Key_C=0;
  			LED1=1;LED2=0;LED4=0;LED8=1;
 //		 	bak[2]=0x06;send_string_com(bak,len);
			break;
		case 8:
			P0=0XFF;P1=0XFF;P2=0X7F;
  			Key_A=1;Key_B=1;Key_C=0;
  			LED1=0;LED2=0;LED4=0;LED8=1;
 //		 	bak[2]=0x07;send_string_com(bak,len);
			break;
		case 9:
			P0=0XEF;P1=0XFE;P2=0XFF;
  			Key_A=0;Key_B=0;Key_C=1;
  			LED1=1;LED2=1;LED4=1;LED8=0;
 //		 	bak[2]=0x08;send_string_com(bak,len);
			break;
		case 10:
			P0=0XFF;P1=0XFD;P2=0XFF;
  			Key_A=0;Key_B=0;Key_C=1;
  			LED1=0;LED2=1;LED4=1;LED8=0;
 //		 	bak[2]=0x09;send_string_com(bak,len);
			break;
		case 11:
			P0=0XDF;P1=0XFB;P2=0XFF;
  			Key_A=1;Key_B=0;Key_C=1;
  			LED1=1;LED2=0;LED4=1;LED8=0;
 // 			bak[2]=0x0A;send_string_com(bak,len);
			break;
		case 12:
			P0=0XFF;P1=0XF7;P2=0XFF;
  			Key_A=1;Key_B=0;Key_C=1;
  			LED1=0;LED2=0;LED4=1;LED8=0;
 //		 	bak[2]=0x0B;send_string_com(bak,len);
			break;
		case 13:
			P0=0XBF;P1=0XEF;P2=0XFF;
  			Key_A=0;Key_B=1;Key_C=1;
  			LED1=1;LED2=1;LED4=0;LED8=0;
 //		 	bak[2]=0x0C;send_string_com(bak,len);
			break;
		case 14:
			P0=0XFF;P1=0XDF;P2=0XFF;
  			Key_A=0;Key_B=1;Key_C=1;
  			LED1=0;LED2=1;LED4=0;LED8=0;
 //		 	bak[2]=0x0D;send_string_com(bak,len);
			break;
		case 15:
			P0=0X7F;P1=0XBF;P2=0XFF;
  			Key_A=1;Key_B=1;Key_C=1;
  			LED1=1;LED2=0;LED4=0;LED8=0;
 //		 	bak[2]=0x0E;send_string_com(bak,len);
			break;
		case 16:
			P0=0XFF;P1=0X7F;P2=0XFF;
  			Key_A=1;Key_B=1;Key_C=1;
  			LED1=0;LED2=0;LED4=0;LED8=0;
 // 			bak[2]=0x0F;send_string_com(bak,len);
			break;
		}
	}

//去抖动,延时10MS
void delay10ms(unsigned int k) 
{ 
	while(--k);
} 

//长延时0.5S
void delay(void)
{
	unsigned int j=0;
	unsigned int g=0;
	for(j=0;j<5;j++)
	{
		for(g=0;g<6000;g++)
		{
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
		  _nop_();
	   }
	  }
	}	





		

		
		
			
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -