2021-08-22 13:21:09 索煒達(dá)電子 838
項(xiàng)目編號:E421
文件大小:733K
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述
本文將向你介紹如何利用89c51系列單片機(jī)實(shí)現(xiàn)數(shù)字鬧鐘。包含時(shí)間調(diào)整和鬧鐘設(shè)定(本篇文章面向一點(diǎn)都不懂得小白,很啰嗦,高手略過文字)注意:本文hex文件超過4k,請選擇較大內(nèi)存的單片機(jī)
需求分析
首先我們需要了解需求:做一個(gè)數(shù)字鬧鐘,可以計(jì)時(shí),可以通過按鈕調(diào)時(shí),通過按鈕設(shè)定鬧鈴時(shí)間。我們平時(shí)所見的數(shù)字鐘,總是有一個(gè)‘:’在不停閃動(dòng)表示頻率。同時(shí)時(shí)間以時(shí)、分、秒的形式顯示。所以我們需要驅(qū)動(dòng)八個(gè)數(shù)碼管,用以實(shí)現(xiàn)日、時(shí)、分、秒(當(dāng)然,你也可以選擇月日時(shí)分,只要你明白其中運(yùn)行的原理)。本例將使用閃動(dòng)的‘.’代替‘:’,使用5個(gè)按鈕實(shí)現(xiàn)調(diào)時(shí),設(shè)鐘。
標(biāo)題所需材料
-STC89C52 *1
-7seg mpx8 ca 數(shù)碼管 *1
-10Ω排阻(RX8) *1
-100Ω電阻 *1
-1KΩ電阻*1
-無源蜂鳴器 *1
-晶體管2N4403 *1
-12MHz晶振 *1
-47uF電容 *3
-按鈕 *5
-開關(guān)*1
-導(dǎo)線若干 如果沒有,可以用模擬器實(shí)現(xiàn)
電路原理圖
程序設(shè)計(jì)
這里是關(guān)鍵的一步,關(guān)系到我們的時(shí)鐘能否點(diǎn)亮和正常運(yùn)行。 時(shí)鐘需要計(jì)時(shí),并且經(jīng)過顯示才能被我們看到。我們需要單片機(jī)在后臺計(jì)時(shí),并通過驅(qū)動(dòng)數(shù)碼管顯示時(shí)間。單片機(jī)驅(qū)動(dòng)數(shù)碼管的方式是掃描,我們使用的是7seg-mpx8-ca數(shù)碼管(七段八位數(shù)碼管)
上圖是七段一位數(shù)碼管 只有一個(gè)陰極端口和和七個(gè)陽極端口,想要讓它顯示數(shù)字需要讓a-g的陽極端按照一定規(guī)律接入高電平,陰極需要接地。a-g和dp都是一個(gè)單獨(dú)的LED。
#define FOSC 120000L//晶振頻率
void delay(unsigned int ms)
{
unsigned int t = FOSC/1200;//計(jì)算周期為12
for(;ms != 0;ms--,t = FOSC/1200)
while(t--);
}
但本文采用單片機(jī)內(nèi)置定時(shí)/計(jì)數(shù)器計(jì)算時(shí)間。(因?yàn)闄C(jī)器周期是可調(diào)的,并且機(jī)器在做任何計(jì)算的過程中都會(huì)占用計(jì)算周期,計(jì)算的步驟和方式消耗時(shí)間是不定的,而且會(huì)占用當(dāng)前線程,所以delay有時(shí)是不準(zhǔn)確的,占位置的。)
定時(shí)器的操作比delay要復(fù)雜一些,但優(yōu)勢在于它計(jì)時(shí)較為準(zhǔn)確(時(shí)鐘的必需品),而且計(jì)時(shí)器不會(huì)干擾到我們的主線程(節(jié)約資源)。
上圖為七段八位數(shù)碼管 可以看做八個(gè)一位數(shù)碼管共用七段陽極接口。
你可能會(huì)想這么多管共用七個(gè)端口,它們怎么會(huì)顯示不同的數(shù)字呢? 這就是為什么需要掃描的原因了——當(dāng)我們希望在數(shù)碼管顯示‘12’的時(shí)候,需要在第一個(gè)數(shù)碼管的七段中輸入‘1’,并且設(shè)置第一個(gè)陰極口為低電平,第二個(gè)陰極口為高電平,這樣第一個(gè)數(shù)碼管顯示‘1’第二個(gè)數(shù)碼管黑屏;以極快的速度,再將七段接口輸入‘2’,同時(shí)第二個(gè)數(shù)碼管置低電平,第一個(gè)置高電平,如此循環(huán)。這樣就造成了交替閃爍的‘12’。由于人眼有視覺殘留,所以看到的是靜止的‘12’(掃描周期小于20ms效果更好)。
講完如何驅(qū)動(dòng)數(shù)碼管,現(xiàn)在需要考慮如何讓單片機(jī)在后臺計(jì)時(shí)了。 后臺計(jì)時(shí)的方法有很多種, 有根據(jù)晶振頻率和機(jī)器計(jì)算周期的比計(jì)時(shí)。
目錄│文件列表:
└ C52DigitalClock
│ LICENSE.txt
├ keil
│ │ STARTUP.A51
│ │ timer2.c
│ │ timer2.uvgui.Klaoye
│ │ timer2.uvopt
│ │ timer2.uvproj
│ ├ Listings
│ │ │ STARTUP.lst
│ │ │ timer2.lst
│ │ └ timer2.m51
│ └ Objects
│ │ STARTUP.obj
│ │ timer2
│ │ timer2.build_log.htm
│ │ timer2.hex
│ │ timer2.lnp
│ └ timer2.obj
├ pictures
│ │ 1.PNG
│ │ main.PDF
│ │ main.png
│ │ thread.png
│ └ 捕獲.PNG
└ protues
│ Backup Of main.pdsbak
│ Last Loaded main.pdsbak
│ main.pdsprj
└ main.pdsprj.Klaoye-PC.Klaoye.workspace