|
数码管显示部分的原理图(开发板中只需要截图显示部分即可):http://www.51hei.com/f/51hei-5.pdf
电路:红外接收头接在 单片机的外部中断0口。数码管用8位共阴极数码管,2个573锁存 详见上面的51hei单片机开发板的pdf图,本人测试成了.
- #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;
- }
- }
复制代码
|
|