設計了乙個簡易的頻率計:
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 微控制器...