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

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

在这里插入图片描述
神奇地调到了个整数
在这里插入图片描述
在这里插入图片描述

发布了4 篇原创文章 · 获赞 4 · 访问量 233

猜你喜欢

转载自blog.csdn.net/SuperRabbit007/article/details/104298307