极品馒头泬19p,国产精品亚洲一区二区三区,狠狠色噜噜狠狠狠7777奇米,国产精品视频一区二区三区无码,国产欧美日韩久久久久

【E421】利用89C51系列單片機(jī)實(shí)現(xiàn)數(shù)字鬧鐘

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)

電路原理圖

【E421】利用89C51系列單片機(jī)實(shí)現(xiàn)數(shù)字鬧鐘

程序設(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ù)碼管)

【E421】利用89C51系列單片機(jī)實(shí)現(xiàn)數(shù)字鬧鐘

上圖是七段一位數(shù)碼管 只有一個(gè)陰極端口和和七個(gè)陽極端口,想要讓它顯示數(shù)字需要讓a-g的陽極端按照一定規(guī)律接入高電平,陰極需要接地。a-g和dp都是一個(gè)單獨(dú)的LED。 

【E421】利用89C51系列單片機(jī)實(shí)現(xiàn)數(shù)字鬧鐘

#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

TAG數(shù)字鬧鐘
  • 3 次
  • 1 分