標(biāo)題:
單片機(jī)紅外線解碼程序數(shù)碼管顯示 程序源代碼
[打印本頁]
作者:
niujia
時(shí)間:
2015-7-15 23:36
標(biāo)題:
單片機(jī)紅外線解碼程序數(shù)碼管顯示 程序源代碼
數(shù)碼管顯示部分的原理圖(開發(fā)板中只需要截圖顯示部分即可):
http://www.torrancerestoration.com/f/51hei-5.pdf
電路:紅外接收頭接在 單片機(jī)的外部中斷0口。數(shù)碼管用8位共陰極數(shù)碼管,2個(gè)573鎖存 詳見上面的51hei單片機(jī)開發(fā)板的pdf圖,本人測(cè)試成了.
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^7;
sbit dula=P2^6;
uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar dis_smg[6];
uchar ircode[4];
uchar irdata[33];
uchar bitnum;
uchar irtime;
uchar startflag;
uchar irreceok,irprosok;
void time0init()
{
TMOD=0X02;
TH0=0X00;
TL0=0X00;
ET0=1;
TR0=1;
EA=1;
}
void int0init()
{
IT0=1;
EX0=1;
EA=1;
}
void irpros()
{
uchar k=1,i,j;
uchar value;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1;
if(irdata[k]>6)
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
}
irprosok=1;
}
void irwork()
{
dis_smg[0]=ircode[1]/16;
dis_smg[1]=ircode[1]%16;
dis_smg[2]=ircode[2]/16;
dis_smg[3]=ircode[2]%16;
dis_smg[4]=ircode[3]/16;
dis_smg[5]=ircode[3]%16;
}
void dis_ssmg()
{
static uchar i;
P0=0x00;
dula=1;
dula=0;
P0=smg_we[i];
wela=1;
wela=0;
P0=smg_du[dis_smg[i]];
dula=1;
dula=0;
i++;
if(i==8)
i=0;
}
void main()
{
time0init();
int0init();
while(1)
{
if(irreceok==1)
{
irpros();
irreceok=0;
}
if(irprosok==1)
{
irwork();
irprosok=0;
}
dis_ssmg();
}
}
void timer0() interrupt 1
{
irtime++;
}
void int0() interrupt 0
{
if(startflag)
{
if(irtime>32)
{
bitnum=0;
}
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;
}
}
else
{
startflag=1;
irtime=0;
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1