单片机实验(十三)NE555频率计

80S52:定时/计数模块(2)

功能:计算NE555芯片的震荡频率并用八位数码管显示。
大概就是之前的八位数码管以及定时/计数模块(1)拼接和拓展的科学怪兔

#include
#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;
}

单片机实验(十三)NE555频率计_第1张图片
神奇地调到了个整数
单片机实验(十三)NE555频率计_第2张图片
单片机实验(十三)NE555频率计_第3张图片

你可能感兴趣的:(笔记)