1、采用的共阳极数码管,P1是段码,P2是位选。 2、检测INT0,INT1的下降沿间隔。输出数字,100us输出100,使用定时器0检测间隔时间。最大检测65535us |
#include<reg52.h> #define uint unsigned int #define uchar unsigned char // 0 1 2 3 4 5 6 7 8 9 uchar code Duan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //??0-9 uchar code wei[]={1,2,4,8}; // uchar Data_buffer[4]; uchar disp_num=0; uint time=0; uint time_count=0; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void disp_change(uint data_change) { Data_buffer[0]=data_change/1000; Data_buffer[1]=data_change/100%10; Data_buffer[2]=data_change/10%10; Data_buffer[3]=data_change%10; } void display() { if(disp_num==0)disp_change(time); P1=0; P2=wei[disp_num]; P1=Duan[Data_buffer[disp_num]]; if(disp_num==3)disp_num=0; else disp_num++; } void main() { EX0=0; EX1=0; EA=1; IT0=1; // IT1=1; TMOD=0x01; // TH0=0x0; //100us??? TL0=0x0; TR0=0; time=1234; EX0=1; ET0=1; while(1) { display(); delay(100); } } void zhongduan1()interrupt 0 { TR0=1; time_count=0; EX0=0; EX1=1; } void zhongduan2()interrupt 2 { TR0=0; time=TH0*256+TL0-15; TH0=0; TL0=1; EX0=1; EX1=0; } |