|
基于51單片機(jī)的數(shù)字頻率計(jì)
本程序是一個(gè)數(shù)字頻率計(jì),最大能測(cè)60KHz
單片機(jī)源程序如下:
- #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(); //定時(shí)器初始化
-
- while(1)
- {
- display();
- }
- }
- void initial() //定時(shí)器初始化
- {
- count=0;
- time_count=0;
- sum=0;
- TMOD=0x02; //定時(shí)器0工作方式2
-
- TH0=0x06; //定時(shí)器初值250US
- TL0=0x06;
- IT0=1; //外部中斷0,下降沿有效
- EA=1;
- ET0=1;
- EX0=1;
- TR0=1;//開中斷
- }
-
-
-
- void int0() interrupt 0 //外部中斷0,每個(gè)下降沿計(jì)數(shù)一次就是一個(gè)信號(hào)周期
- {
- count++;
-
- }
- void timer0() interrupt 1
- {
- time_count++;
- if(time_count==3690) //計(jì)數(shù)一秒,因?yàn)?1.0592MHZ晶振,所以值不為4000,而是3690
- {
- sum=count; //一秒的下降沿的次數(shù)和即為頻率
- time_count=0; // 250us的次數(shù)清零
- count=0; //下降沿次數(shù)清零
- //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; // 個(gè)位
-
- 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]]); //個(gè)位
- DisplayOneChar(8, 1, ASCII[10]); //顯示H
- DisplayOneChar(9, 1, ASCII[11]); //顯示 Z
-
- }
復(fù)制代碼
所有資料51hei提供下載:
頻率.rar
(33.09 KB, 下載次數(shù): 36)
2018-3-23 17:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|