單片機(jī)
9鍵遙控器,單片機(jī)紅外接收,驅(qū)動(dòng)數(shù)碼管顯示的程序該怎么寫(xiě)? 不知道我這么寫(xiě)的對(duì)不對(duì)?
#include "stc15f2k60s2.h"
#define uchar unsigned char
#define uint unsigned int
int i;
sbit IRIN = P3^6; //紅外接收器數(shù)據(jù)線
uchar IRCOM[7];
unsigned char code a[] ={0x98,0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18 };
/**************************** 延時(shí)函數(shù) ***********************************/
void delay(unsigned int a)
{
while(a--);
}
void delay1(unsigned char x) //x*0.14MS 1個(gè)for循環(huán)8個(gè)機(jī)器周期 =8*14*0.001=0.112ms
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
void main(void)
{
IE = 0x81; //允許總中斷中斷,使能 INT0 外部中斷
TCON = 0x01; //觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)
IRIN=1; //I/O口初始化
P20=0; //數(shù)碼管初始化
P21=0;
P22=0;
P23=0;
P41=0;
P42=0;
P43=0;
P44=0;
while(1);
}
void IR_IN() interrupt 0
{
unsigned char j,k,N=0;
EX0 = 0;
// delay1(15);
delay1(120); //0.07
if (IRIN==1)
{ EX0 =1;
return;
}
//確認(rèn)IR信號(hào)出現(xiàn)
while (!IRIN) //等IR變?yōu)楦唠娖?,跳過(guò)9ms的前導(dǎo)低電平信號(hào)。
{delay1(8);}
for (j=0;j<7;j++) //收集四組數(shù)據(jù)
{
for (k=0;k<8;k++) //每組數(shù)據(jù)有8位
{
while (IRIN) //等 IR 變?yōu)榈碗娖?,跳過(guò)4.5ms的前導(dǎo)高電平信號(hào)。
{delay1(8);}
while (!IRIN) //等 IR 變?yōu)楦唠娖?/p>
{delay1(8);}
while (IRIN) //計(jì)算IR高電平時(shí)長(zhǎng)
{
delay1(8);
N++;
if (N>=30)
{ EX0=1;
return;} //0.14ms計(jì)數(shù)過(guò)長(zhǎng)自動(dòng)離開(kāi)。
} //高電平計(jì)數(shù)完畢
IRCOM[j]=IRCOM[j] >> 1; //數(shù)據(jù)最高位補(bǔ)“0”
if (N>=8)
{IRCOM[j] = IRCOM[j] | 0x80;} //數(shù)據(jù)最高位補(bǔ)“1”
N=0;
}
}
if (IRCOM[5]!=0x00)
{ EX0=1;
return; }
if(IRCOM[6]== a[1]) ;
{
P21=1;
P22=1;
P23=1;
P20=0;
P41=1;
P42=1;
P43=1;
P44=0;
}
if(IRCOM[6]== a[2]) ;
{
P21=1;
P22=0;
P23=0;
P20=0;
P41=1;
P42=0;
P43=0;
P44=0;
}
if(IRCOM[6]== a[3]) ;
{
P21=0;
P22=1;
P23=1;
P20=0;
P41=1;
P42=1;
P43=0;
P44=1;
}
if(IRCOM[6]== a[4]) ;
{
P21=1;
P22=1;
P23=0;
P20=0;
P41=1;
P42=1;
P43=0;
P44=1;
}
if(IRCOM[6]== a[5]) ;
{
P21=1;
P22=0;
P23=0;
P20=0;
P41=1;
P42=0;
P43=1;
P44=1;
}
if(IRCOM[6]== a[6]) ;
{
P21=1;
P22=1;
P23=0;
P20=0;
P41=0;
P42=1;
P43=1;
P44=1;
}
if(IRCOM[6]== a[7]) ;
{
P21=1;
P22=1;
P23=1;
P20=0;
P41=0;
P42=1;
P43=1;
P44=1;
}
if(IRCOM[6]== a[8]) ;
{
P21=1;
P22=0;
P23=0;
P20=0;
P41=1;
P42=1;
P43=0;
P44=0;
}
if(IRCOM[6]== a[9]) ;
{
P21=1;
P22=1;
P23=1;
P20=0;
P41=1;
P42=1;
P43=1;
P44=1;
}
if(IRCOM[6]== a[10]) ;
{
P21=1;
P22=1;
P23=0;
P20=0;
P41=1;
P42=1;
P43=1;
P44=1;
}
EX0 = 1;
}