|
本帖最后由 ll13536121668 于 2018-6-27 09:49 编辑
30路红外遥控开关因使用不方便,
想用一只管脚复用到每路输出增加30只手动开关可以吗
程序什样修改才能增加30只手动开关,
劳烦各位师傅研究一下什样修改
//12M晶振
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P3_2=P3^2;
sbit LED=P3^3;
sbit A0=P0^0 ;
sbit A1=P0^1 ;
sbit A2=P0^2 ;
sbit A3=P0^3 ;
sbit A4=P0^4 ;
sbit A5=P0^5 ;
sbit A6=P0^6 ;
sbit A7=P0^7 ;
sbit B0=P2^0 ;
sbit B1=P2^1 ;
sbit B2=P2^2 ;
sbit B3=P2^3 ;
sbit B4=P2^4 ;
sbit B5=P2^5 ;
sbit B6=P2^6 ;
sbit B7=P2^7 ;
sbit C0=P1^0 ;
sbit C1=P1^1 ;
sbit C2=P1^2 ;
sbit C3=P1^3 ;
sbit C4=P1^4 ;
sbit C5=P1^5 ;
sbit C6=P1^6 ;
sbit C7=P1^7 ;
sbit D0=P3^0 ;
sbit D1=P3^1 ;
//sbit D3=P3^3 ;
sbit D4=P3^4 ;
sbit D5=P3^5 ;
sbit D6=P3^6 ;
sbit D7=P3^7 ;
unsigned char data IRCode[4],IRCON,IRCON2;
unsigned int k,s=1;
unsigned char i,m,count;
//uchar code dis_7[]={0x18,0xDB,0x31,0x91,0xD2,0x94,0x14,0xD9,0x10,0x90,0xFF,0x3C,0xf7};
//uchar code scan_con[]={0x7F,0xBF,0xDF,0xEF};//段码表 从右至左扫描
//uchar data dis[]={0x00,0x00};
uchar data keyvol,disout,n;
//void scan();
//void delay1ms( uchar t);
/***************延时函数*******************/
void delay1ms( uint t)
{
uint k,n;
for (k=0;k<t;k++)
{
for (n=0;n<121;n++);
}
}
/***************延时函数*******************/
void delay850us( void)
{ uint j;
for (j=0;j<105;j++);//24M晶振时j=200,12M晶振时,j=105;
}
/***************延时函数*******************/
void delay1200us( void)
{ uint j;
for (j=0;j<150;j++);//24M晶振时j=400,12M晶振时,j=150;
}
/**********************************/
void main()
{
EA = 1; //允许CPU中断
EX0 = 1; //开INT0中断;
while (1)
{
if (LED==0)
{
delay1ms( 500);
LED=1;
}
}
}
/**********************************/
//INT0中断
void INT0Fun(void) interrupt 0 //using 2
{
EA = 0; //外部中断0关闭
for (i=0;i<12;i++)
{
delay850us();
if (P3_2==0) count++;
else break ;
}
if (count==12)
{ count=0;
while (P3_2==0);
delay850us(); //跳过564us的高电平。
for (IRCON=0;IRCON<4;IRCON++)
{
for (IRCON2=0;IRCON2<8;IRCON2++) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
{
IRCode[IRCON]=IRCode[IRCON]>>1; //每读一次放入变量中的二进制的一个位,每次左移一位
while (P3_2==0);
delay850us();
if (P3_2)
{
IRCode[IRCON]=IRCode[IRCON] | 0x80; //每八次填满一个字节,一个字节存放遥控编码4个位
delay1200us();
}
}
}
if ((IRCode[0]==0x00) && (IRCode[1]==0xFF))
{
if (IRCode[2]==~IRCode[3])
{
keyvol=IRCode[2];
n=keyvol;
LED=0;
switch (keyvol)
{
case 1: { A0= ~ A0 ; break;}
case 2: { A1= ~ A1 ; break;}
case 3: { A2= ~ A2 ; break;}
case 4: { A3= ~ A3 ; break;}
case 5: { A4= ~ A4 ; break;}
case 6: { A5= ~ A5 ; break;}
case 7: { A6= ~ A6 ; break;}
case 8: { A7= ~ A7 ; break;}
case 9: { B0= ~ B0 ; break;}
case 10: { B1= ~ B1 ;break; }
case 11: { B2= ~ B2 ;break; }
case 12: { B3= ~ B3 ;break; }
case 13: { B4= ~ B4 ;break; }
case 14: { B5= ~ B5 ; break;}
case 15: { B6= ~ B6 ;break; }
case 16: { B7= ~ B7 ;break; }
case 17: { C0= ~ C0 ; break;}
case 18: { C1= ~ C1 ; break;}
case 19: { C2= ~ C2 ;break; }
case 20: { C3= ~ C3 ;break; }
case 21: { C4= ~ C4 ;break; }
case 22: { C5= ~ C5 ;break; }
case 23: { C6= ~ C6 ;break; }
case 24: { C7= ~ C7 ;break; }
case 25: { D0= ~ D0 ;break; }
case 26: { D1= ~ D1 ;break; }
case 27: { D4= ~ D4 ;break; }
case 28: { D5= ~ D5 ;break; }
case 29: { D6= ~ D6 ;break; }
case 30: { D7= ~ D7 ;break; }
case 31: { P0=0XFF; P1=0XFF; P2=0XFF; P0=0XFF; P3=( P3&0X0C )|0XF3; break; }
case 32: { P0=0X00; P1=0X00; P2=0X00; P0=0X00; P3= P3&0X0C ; break; }
default : break;
}
}
}
}
count=0;
for (IRCON=0; IRCON<3; IRCON++)
IRCode[IRCON] = 0;
EA = 1;
}
/*****************************************/
|
|