?? 遙控一個數.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 + -