玉萌業余發展 發表于 2023-5-8 09:44
歡迎各位黒友一起研究學習。
改成51不行
- #include "reg52.h"
- unsigned char q,b,s,g,xs,ir[13],j,c;unsigned int r,m,d0,d1,value;
- unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/"?0~F??
- sbit XP32=P3^2;
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- void delay(int i)
- {
- while(i--);
- }
- void display()
- {
- unsigned char i;
- xs=0;
- if(xs==0)
- {
- g=value/1%16;
- s=value/16%16;
- b=value/256%16;
- q=value/4096%16;
- }
- for(i=0;i<4;i++)
- {
- switch(i)
- {
-
- case(0):
- LSA=0;LSB=0;LSC=0; break;/"??0?
- case(1):
- LSA=1;LSB=0;LSC=0; break;/"??1?
- case(2):
- LSA=0;LSB=1;LSC=0; break;/"??2?
- case(3):
- LSA=1;LSB=1;LSC=0; break;/"??3?
- }
- if(i==0)
- {
- P0=smgduan[q];
- }
- if(i==1)
- {
- P0=smgduan[b];
- }
- if(i==2)
- {
- P0=smgduan[s];
- }
- if(i==3)
- {
- P0=smgduan[g];
- }
-
-
- //P0=smgduan[i];
- delay(100);
- P0=0x00;
-
- }
- }
- void ircl()
- {
- unsigned char c1;
- if(!XP32)
- {
- d1=0;
- TR0=1;
- while(!XP32);
- TR0=0;
- ir[j]=d1;
- }
-
- if(XP32==1&&j>0)
- {
- c++;
- if(c>250){c1++;c=0;}
- if(c1>5){j=0;c1=0;}
-
- }
- }
- void main()
- {
-
- TMOD=0x11;
-
- TH0=0xFF;
- TL0=0xF2;
- TR0=0;
- ET0=1;
- xs=0;
-
- IT0=1;
- EX0=1;
- EA=1;
- while(1)
- {
- ircl();
-
-
- display();
- }
- }
- void int1() interrupt 0
- {
- unsigned int i;
- j++;
- if(m==0)
- {
- for(i=1;i<13;i++)
- {
- r=r<<1;
- if(ir[i]>70&&ir[i]<125)
- {
- r=r|0x001;
- }
- }
- }
-
-
- // if(r==0xfd81|r==0xfd82|r==0xfd84|r==0xfd88|r==0xfd90|r==0xfdc3|r==0xfda0|r==0xfdc6)
- if(j>12)
- {
- value=r;j=0; m=0;r=0;
- }
-
- }
- void t0() interrupt 1
- {
- TH0=0xFF;
- TL0=0xF2;
- d1++;
- }
- //1.085069444444444e-6
復制代碼 |