📄 遥控一个数.c
字号:
#include <AT89X52.h>
#define uint unsigned int
static unsigned char data dl,temp,de;
static unsigned char data IRCode[3],IRCON,IRCON2;
bit DT=0;
bit flag; /////////// 0 对应串口 1 遥控
uint num_1=0,num_2=0,k=0,i=0,n=0,j,num,voicer=1;
uint led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint ledpoint[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
void wei(void);
void disp0(void);
void disp1(void);
void disp2(void);
void disp3(void);
void ledwork(void);
void computer(void);
void voice()
{
uint m;
for(m=0;m<k;m++) /////可以获得 按键的发声次数
{
for(j=0; j<8000; j++);
P3_7=0;
for(j=0;j<5000;j++);
P3_7=1;
}
}
void main(void)
{
P3_7=1;
P1_0=0;
TMOD=0x21; //////T1 自动装入 8bit T0 16位模式
TH0 = 0xB8;
TL0 = 0x00;
IT0=0;
EA = 1;
ET0 = 1; /////// T0中断
EX0 = 1;
DT=0; ///////标志
TR0=1;
flag=0; /////////////////串口控制
do
{
if(DT)
{
for(j=0; j<8000; j++); //这里起到按键值正确后会有一个延时,防止重复按键
DT = 0;
}
EX0 = 1;
if(voicer==1)
{voice();voicer=0;
for(j=0; j<10000; j++);}
P0=led[k];}
while(1);
}
//定时器0定时中断
void Timer0(void) interrupt 1 using 1
{
if(flag) //////////遥控控制
{
TH0=0xFD;
TL0=0x1E; //设定时值为800us
if(IRCON<3)
{
if(IRCON2<8) //每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位
{
IRCON2++;
IRCode[IRCON]=IRCode[IRCON]<<1; //每读一次放入变量中的二进制的一个位,每次左移一位
IRCode[IRCON]=IRCode[IRCON]|P3_2; //每八次填满一个字节,一个字节存放遥控编码4个位
}
else
{
IRCON++; //填满一个字节,指向下一个变量
IRCON2=0; //计数清零
}
}
else
{
flag=0; ////////////串口控制
/////////////////////////暂时不允许int0中断
if((IRCode[1]!=0xFF)&&(IRCode[2]!=0xFF))
{
if(IRCode[1]==0x55)
{
switch(IRCode[2])
{
case 0xAB: //1-8键控制
k=1;
break;
case 0xAC:
k=2;
break;
case 0xAD:
k=3;
break;
case 0xB2:
k=4;
break;
case 0xB3:
k=5;
break;
case 0xB4:
k=6;
break;
case 0xB5:
k=7;
break;
case 0xCA:
k=8;
break;
case 0xCB:
k=9;
break;
case 0xAA:
k=0; ////////////// 改变参数显示的类型! ///实现当前检测根数?
break;
case 0x2A:
k=11; //////music+++++++++++++++++ // 人工的 触发
break;
case 0x2B:
k=12; //////music------------------ 认为是 Man_or_PC 切换
break;
case 0x52:
k=13; //////对比+++++++
break;
case 0x53:
k=14; //////对比--------
break;
case 0x32:
k=15; //////色彩+++++++
break;
case 0x33:
k=16; //////色彩-------
break;
case 0x2C:
k=17; //////亮度+++++
break;
case 0x2D:
k=18; //////亮度-------
break;
case 0xD2: //按关闭电源键
P0 = 0xFF;
k=10;
break;
}
voicer=1;}
}
}
}
}
void Int0(void) interrupt 0 using 2
{
EX0 = 0; //外部中断0关闭
DT=1;
TR0=0; //先 停止 T0
flag=1; ////////遥控控制
TH0=0xFD;
TL0=0x1E; //设定时值为800us
for(IRCON=0; IRCON<3; IRCON++)
IRCode[IRCON] = 0;
IRCON = 0;
IRCON2 = 0; //计数清零
TR0 = 1; //再启动///////////记数
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -