?? jiema.c
字號:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint k);//延時
void add(void); //把數組轉化為地址碼和數據碼
void addled(void); //計算出led要顯示的數
void display(void);//led顯示
void count(void);
uchar SEG7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽
uchar scan_led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //片選 高平亮
uchar led[8]={1,2,3,4,5,6,7,8}; //每位led要顯示的數
sbit P32=P3^2;
bit finish;//結束標志位
uchar tt[33];
uchar j,t;
uchar data1,data2,address1,address2;
void main(void)
{
TH0=0;TL0=0;
TMOD=0x19;
TR0=0;
EX0=1;//允許中斷
IT0=1;//下降沿中斷
TH1=252;TL1=0;
ET1=1;
TR1=1;
PT1=1;
EA=1;
while(1){
if(finish==1){finish=0;
add();
//addled();
count();
}
}
}
////////////////////////////////////////////
void delay(uint k)//延時
{k=k*8;
while(--k);
}
//////////////////////////////////
void int0()interrupt 0
{uchar i;
EX0=0;
TR0=1;
while(P32==0);
while(P32==1){if(TH0>20)break;}//時間大于5.3ms時就退出
TR0=0;
t=(TH0*256+TL0)/100;
TH0=0;TL0=0;
tt[0]=t;
//if(t>42&&t<48){
for(i=1;i<=32;i++)
{
TR0=1;
while(P32==0);
while(P32==1){if(TH0>20)break;}//時間大于2.7ms時就退出
TR0=0;
t=(TH0*256+TL0)/100;
TH0=0;TL0=0;
//if(t>4&&t<7)
tt[i]=t; //0.56ms為0
//if(t>15&&t<18)
//tt[i]=1;//1.68ms為1
TH0=0;TL0=0;
}
finish=1;
// }
EX0=1;
}
///////////////////////////////////////////
void add(void) //把數組轉化為地址碼和數據碼
{uchar i;
address1=0;
address2=0;
data1=0;
data2=0;//清0
for(i=8;i>0;i--)
{address1=(address1<<1)|tt[i];
address2=(address2<<1)|tt[i+8];
data1=(data1<<1)|tt[i+16];
data2=(data2<<1)|tt[i+24];
}
}
///////////////////////////////////////////
void addled(void) //計算出led要顯示的數
{if((data1+data2)==0xff)//數據碼和反碼的檢驗
{led[7]=address1>>4;//取高位
led[6]=address1&0x0f;//取低位
led[5]=address2>>4;
led[4]=address2&0x0f;
led[3]=data1>>4;
led[2]=data1&0x0f;
led[1]=data2>>4;
led[0]=data2&0x0f;
}
}
//////////////////////////////////////////
void display(void)//led顯示
{ P0=0xff;
P2=scan_led[j]; //片選掃瞄
P0=SEG7[led[j]]; //共陽段顯
j++;
if(j>=8)j=0;
}
////////////////////////
void timer1()interrupt 3
{TH1=245;TL1=0;
display();
}
////////////////////////////
void count(void)
{led[7]=tt[0]/10;
led[6]=tt[0]%10;
led[5]=tt[1]/10;
led[4]=tt[1]%10;
led[3]=tt[2]/10;
led[2]=tt[2]%10;
led[1]=tt[3]/10;
led[0]=tt[3]%10;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -