- #include "reg52.h"
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit RCK=P3^2;
- u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};
- u8 inf[4];
- u8 Displaydata[3];
- u16 count;
- void delay(u16 i)
- {
- while(i--);
- }
- //10us
- void inter0(){
- EX0=1;
- IT0=1;
- EA=1;
- RCK=1;
- }
- void DigDisplay()
- {
- u8 i;
- for(i=0;i<3;i++)
- {
- switch(i)
- {
- case(0):
- LSA=1;LSB=1;LSC=1;break;
- case(1):
- LSA=0;LSB=1;LSC=1;break;
- case(2):
- LSA=1;LSB=0;LSC=1;break;
- }
- P0=Displaydata[i];
- delay(100);
- P0=0x00;
- }
- }
- void main(){
- inter0();
- while(1){
- Displaydata[0] = smgduan[inf[2]/16];
- Displaydata[1] = smgduan[inf[2]%16];
- Displaydata[2] = smgduan[16];
- DigDisplay();
- }
- }
- void getinf() interrupt 0
- {
- u8 i,j;
- u16 n;
- count=0;
- delay(700);
- if(RCK==0){
- n=1000;
- while((RCK==0)&&(n>0)){
- delay(1);
- n--;
- }
- if(RCK==1)
- {
- n=600;
- while((RCK==1)&&(n>0))
- {
- delay(1);
- n--;
- }//接收數(shù)據(jù)
- for(i=0;i<4;i++){
- for(j=0;j<8;j++){
- n=60;
- while((RCK==0)&&(n>0)){
- delay(1);
- n--;
- }
- n=250;
- while((RCK==1)&&(n>0)){
- delay(1);
- n--;
- count++;
- }
- inf[i]>>=1;
- if(count>70){
- inf[i] |= 0x80;
- }
- count=0;
- }
- }
- }
- }
- }
復制代碼
|