80S52:定时/计数模块(2)
功能:计算NE555芯片的震荡频率并用八位数码管显示。
大概就是之前的八位数码管以及定时/计数模块(1)拼接和拓展的科学怪兔
#include<reg52.h>
#define date P0
#define place P2
typedef unsigned int u16;
typedef unsigned char u8;
void delay(u16 num){ //土味延时
u16 i,j;
for(i=1;i<=num;++i)
for(j=110;j>0;--j)
;
}
u8 code number[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
//段码
//不同板子的解码不同我的那块是神秘的共阴极。。。
u8 code where[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//位码
u16 t,n1,n2,num;
void display(u16 x,u16 y){//显示函数(位置,数字)
place=where[x];
delay(2);
date=number[y];
delay(2);
date=0xff;
}
void main(){
TMOD=0x51;//T1计数T0定时
EA=1;//总中断
ET0=1;//T0中断
TH0=(65535-50000)/256;//T0初值
TL0=(65535-50000)%256;
TH1=0;//T1初值
TL1=0;
TR0=1;//T0开始工作
TR1=1;//T1开始工作
while(1){
num=(n1*256+n2)*20;//因为我是1/20秒一记所以。。。
display(6,num%10);//不科学的显示(不要看,不要看)
num/=10;
display(5,num%10);
num/=10;
display(4,num%10);
num/=10;
display(3,num%10);
num/=10;
display(2,num%10);
num/=10;
display(1,num%10);
num/=10;
}
}
void timer_set(void) interrupt 1{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TR1=0;
n1=TH1;//记录计数器读数
n2=TL1;
TH1=0;
TL1=0;
TR1=1;
}
神奇地调到了个整数