📄 8avand8vgaswitch.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 + -