AT89C51(Atmel)晶元製作簡易的頻率計

2021-08-26 15:18:54 字數 1287 閱讀 8686

設計了乙個簡易的頻率計:

51晶元自帶2個定時器可以用作定時和計數作用,選擇t1作為計數器,去讀取高低電平的轉換次數。選擇t0作為定時器作用,計算1s時間內高低電平的次數,通過演算法算出對應的頻率。通過lcd顯示在液晶屏上面。

isis**圖如下

這是液晶屏的配置函式:

uchar num="0123456789";

sbitlcd_rs = p0^2;

sbitlcd_rw = p0^1;

sbitlcd_en = p0^0;

void lcdwritecmd(uchar cmd) //lcd 寫函式

void lcdwritedata(uchar dat) //lcd 寫資料

void clear() //lcd 清楚lcd

//lcd 初始化

void lcdinit()

//lcd 顯示函式

void lcddisplay(uint temp)

配置好後就能使用lcd了。

接下來配置我們需要的定時器和計數器,用於採集頻率:

void time_init(void)

void interrupt_init(void)

void counter_init(void)

配置定時器0為定時模式,th0 = 0x3c ;tl0 = 0xb0,0x3cb0 = 15536

time = 65536-15536 = 50000 = 50ms. 50ms定時器進一次中斷。

然後呼叫中斷函式:定時器進行中斷20次中斷後flag標誌位置1;1s採集時間內高低電平的變換次數。

void t0_time() interrupt 1

}void t1_counter() interrupt 3

然後在主函式中對採集到的資料進行處理

void main()

lcddisplay(ff);}}

這樣乙個簡易的頻率計就做好了,進入isis進行**,輸入8khz

可以看到成功檢測出8khz的頻率。

附帶程式

基於89c51晶元的開發 搶答器

搶答器簡介 總共有8個按鈕,其中7個按鈕給選手使用,1個按鈕給主持人使用,當1位選手按下按鈕後,對應的led燈將會變亮,同時靜態數碼管上會顯示該名選手的號碼,另外6位選手無論怎麼按按鈕都不會發生改變 只有通過主持人手中的復位按鈕才會使led燈熄滅,並且靜態數碼管上數字消失。include sbit ...

89C51和89S51的區別

89c51和89s51的區別 很多初學51微控制器的會有這樣的問題 at89s51是什麼?書上和網路教程上可都是8051,89c51等!沒聽說過有89s51 這 裡,初學者要澄清微控制器實際使用方面的乙個產品概念,mcs 51微控制器是美國inte公司於1980年推出的產品,典型產品有 8031 內...

AT89C51 UART串列埠通訊

前言 病毒肆虐,學校延期開學了,這幾天在家從網上找了些51微控制器的例子,自己用proteus 了幾個,從比較簡單的流水燈到數碼管掃瞄顯示再到串列埠通訊,期間遇到過不少問題,也從網上搜了很多資料,今天做到串列埠通訊,覺得裡面涉及的中斷內容比較複雜,在此做一些簡單的注釋和理解。include 微控制器...