基于51单片机的数字频率计
本程序是一个数字频率计,最大能测60KHz
单片机源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #include"lcd.h"
- #include<stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
-
- unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','H','Z',};
- uint time_count,count,sum;
-
- uint dis[6];
-
-
- void initial(void);
- void display(); //LCD显示程序
- void main()
- {
- InitLcd1602(); //LCD1602初始化
- initial(); //定时器初始化
-
- while(1)
- {
- display();
- }
- }
- void initial() //定时器初始化
- {
- count=0;
- time_count=0;
- sum=0;
- TMOD=0x02; //定时器0工作方式2
-
- TH0=0x06; //定时器初值250US
- TL0=0x06;
- IT0=1; //外部中断0,下降沿有效
- EA=1;
- ET0=1;
- EX0=1;
- TR0=1;//开中断
- }
-
-
-
- void int0() interrupt 0 //外部中断0,每个下降沿计数一次就是一个信号周期
- {
- count++;
-
- }
- void timer0() interrupt 1
- {
- time_count++;
- if(time_count==3690) //计数一秒,因为11.0592MHZ晶振,所以值不为4000,而是3690
- {
- sum=count; //一秒的下降沿的次数和即为频率
- time_count=0; // 250us的次数清零
- count=0; //下降沿次数清零
- //display();
- }
- }
- void display()
- {
- dis[0]=sum/10000;//万位
-
- dis[5]=sum%10000;
- dis[1]=dis[5]/1000; //千位
- dis[5]=dis[5]%1000;
-
- dis[2]=dis[5]/100; // 百位
- dis[5]=dis[5]%100;
- dis[3]=dis[5]/10; // 十位
- dis[4]=dis[5]%10; // 个位
-
- DisplayOneChar(0, 1, ASCII[dis[0]]); //显示万位
- DisplayOneChar(1, 1, ASCII[dis[1]]); //千位
- DisplayOneChar(2, 1, ASCII[dis[2]]); //百位
- DisplayOneChar(3, 1, ASCII[dis[3]]); //十位
- DisplayOneChar(4, 1, ASCII[dis[4]]); //个位
- DisplayOneChar(8, 1, ASCII[10]); //显示H
- DisplayOneChar(9, 1, ASCII[11]); //显示 Z
-
- }
复制代码
所有资料51hei提供下载:
频率.rar
(33.09 KB, 下载次数: 36)
|