|
STC90C52RC 頻率計(jì)3位小數(shù)電路圖
依據(jù)<發(fā)一個(gè)3位小數(shù)的單片機(jī)頻率計(jì)程序備忘.RAR>而繪.
STC90C52RC 頻率計(jì)3位小數(shù).PNG (5.12 KB, 下載次數(shù): 45)
下載附件
2022-1-16 06:28 上傳
單片機(jī)源程序如下:
- //利用外中斷記錄脈沖數(shù),利用T0記錄秒數(shù),f=總脈沖數(shù)/總秒數(shù)
- //每10秒更新一次,1000秒后可以精確到3位小數(shù),用于檢測(cè)32768Hz晶振
- #define MAIN_Fosc 11059200L //定義主時(shí)鐘
- #include<reg52.h>
- //#include "STC90.H"
- #include "INTRINS.H"
- #include "Delayms.h"
- #include "lcd1602.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit COUNT_IN=P3^2;
-
- unsigned long count=0,pul;
- unsigned long f=0,t10s=0;
- unsigned int ms50=0;
- //bit flag;
- void init()
- {
- IT0=1; //INT0負(fù)跳變觸發(fā)
- TMOD &= 0xF0; //清定時(shí)器0
- TMOD |= 0x01; //定時(shí)器0:16位定時(shí)器
- TH0=0x4c; //11.0592Mhz50ms
- TL0=0x00;
- ET0=1;//開(kāi)定時(shí)中斷
- EX0=1;//開(kāi)外部INTO中斷
- TR0=1;//啟動(dòng)定時(shí)
- // EA=1; //CPU開(kāi)中斷總允許
- }
- void EXINT0() interrupt 0
- {
- count++; //脈沖數(shù)累加
- }
- void time0() interrupt 1
- {
- TH0=0x4c;
- TL0=0x00; //50ms11.0592Mhz
- ms50=ms50+1; //累計(jì)50毫秒數(shù)
- if (ms50>=200) //設(shè)定10秒刷新時(shí)間,200*50ms=10s
- {
- t10s++; //10秒累加
- ms50=0;
- pul=count;
- // flag=1; //10秒時(shí)間到標(biāo)志
- }
- }
- void display_1602_plj(void)
- {
- DisplayOneChar(0,0,'P');//標(biāo)題
- DisplayOneChar(1,0,'i');
- DisplayOneChar(2,0,'n');
- DisplayOneChar(3,0,'L');
- DisplayOneChar(4,0,'v');
- DisplayOneChar(5,0,'J');
- DisplayOneChar(6,0,'i');
- //DisplayOneChar(7,0,' ');
- DisplayOneChar(8,0,'t'); //累計(jì)秒數(shù)
- DisplayOneChar(9,0,':');
- if(t10s>=1000)
- {DisplayOneChar(11,0,t10s%10000/1000+48);}
- if(t10s>=100)
- {DisplayOneChar(11,0,t10s%1000/100+48);}
- if(t10s>=10)
- {DisplayOneChar(12,0,t10s%100/10+48);}
- if(t10s>=1)
- {DisplayOneChar(13,0,t10s%10+48);}
- DisplayOneChar(14,0,'0');
- DisplayOneChar(15,0,'S');
- if(f>=100000000) //頻率
- {DisplayOneChar(0,1,f%1000000000/100000000+48);}
- if(f>=10000000)
- {DisplayOneChar(1,1,f%100000000/10000000+48);}
- if(f>=1000000)
- {DisplayOneChar(2,1,f%10000000/1000000+48);}
- if(f>=100000)
- {DisplayOneChar(3,1,f%1000000/100000+48);}
- if(f>=10000)
- {DisplayOneChar(4,1,f%100000/10000+48);}
- DisplayOneChar(5,1,f%10000/1000+48);
- DisplayOneChar(6,1,'.');
- DisplayOneChar(7,1,f%1000/100+48);
- DisplayOneChar(8,1,f%100/10+48);
- DisplayOneChar(9,1,f%10+48);
- DisplayOneChar(10,1,'H');
- DisplayOneChar(11,1,'z');
- }
- void main()
- {
- Delayms(255); //上電延時(shí)
- Delayms(255); //上電延時(shí)
- Delayms(255); //上電延時(shí)
- Delayms(255); //上電延時(shí)
- init();
- Delayms(50); //上電延時(shí)
- InitLcd(); //液晶初始化
- display_1602_plj();
- EA=1; //CPU開(kāi)中斷總允許
- while(1)
- {
- if (t10s>=1) //10秒取樣時(shí)間到
- {
- f=pul*100/t10s; //頻率=脈沖個(gè)數(shù)/時(shí)間,3位小數(shù)
- display_1602_plj();
- }
- }
- }
復(fù)制代碼
Keil代碼hex文件下載:
89c52 lcd1602頻率計(jì)3位小數(shù).rar
(49.94 KB, 下載次數(shù): 14)
2022-2-9 03:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|