📄 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 + -