一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

3步教你如何用51單片機制作秒表

GReq_mcu168 ? 來源:http://blog.csdn.net/wangwangp ? 作者:wangwangpengpeng ? 2020-10-23 13:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

和很多朋友一樣,在學(xué)51單片機的過程中我們肯定會涉及到制作一個秒表,牽涉到把單片機的多個部分組合起來使用,這對于我們初學(xué)者來說可能顯得有些困難,我同大家一樣,百思不得其解,最后頭都弄大了才把這個秒表制作出來,為了給以后的朋友們一些思路,一些參考,所以在這里我把自己制作的整個詳細過程整理出來供大家參考。我調(diào)試出來是沒有問題的,各方面都穩(wěn)定運行,由于我水平有限,中間可能會有不對的地方,歡迎大家指正,我們一起學(xué)習(xí),一起進步!

我將分為三個部分來介紹:1.整體思路,2.硬件電路方面,3.軟件編程方面。

1、整體思路

利用51單片機制作秒表時,我介紹精確到十分位(即0.1s)的制作,并讓其擁有啟動,暫停,復(fù)位三個功能。

用到的單片機部分:定時器部分,獨立按鍵的檢測與應(yīng)用,數(shù)碼管的顯示,并結(jié)合一些簡單的程序即可實現(xiàn)。

用5位數(shù)碼管來進行顯示,分別顯示秒的十分位,秒的個位,秒的十位,分的個位,分的十位。用定時器定時50ms,2個定時器中斷即是0.1s,即秒的十分位,20個定時器中斷即是1s,60個1s即是1分鐘,通過程序?qū)?位數(shù)碼管的值分離出來,并進行顯示。這就是我在數(shù)碼管顯示方面的思路,如果不是太清楚,結(jié)合我下面軟件編程方面的程序來看你可能就會明白,我會在那部分做詳細介紹,看完了可能你就懂了。

利用獨立按鍵設(shè)置啟動/暫停鍵和清零鍵,利用獨立按鍵的檢測,若啟動/暫停按鍵按下,秒表則啟動或者暫停,按下復(fù)位鍵,秒表清零復(fù)位。我在程序后面全都有注釋,不用擔心??赐昴憔蜁靼琢恕?/p>

這是我制作的的流程圖:

“ms100”表示秒的十分位,"s"表示秒的個位,“s1”表示秒的十位,“min”表示分的個位,“min1”表示分的十位。

“cnt”表示秒的計數(shù)位,即多少個一秒,定時滿一秒加1,“minu”表示分的計數(shù)位,即多少個一分鐘,一分鐘加1,

這個流程圖提供了大致思路,要結(jié)合下面的程序部分一起看??赡苡行┖喡埗喽喟?!

看起來是不是好簡單?有木有?請繼續(xù)往下看。

2、硬件電路方面

每個人的硬件可能都不一樣,(哪些控制數(shù)碼管的位選,哪些控制數(shù)碼管的段選,哪些控制獨立按鍵等等),大家在自己制作過程中都要仔細考慮,我在這里就用我自己的硬件進行介紹。

這是我的數(shù)碼管的電路圖:(將J12用杜邦線接到對應(yīng)的P0口,將J16用杜邦線接到對應(yīng)的P1口)

位選端我用P1口控制,段選端我用P0口控制。在圖中我已標明秒的個位s,秒的十位s1,分的個位min,分的十位min1所對應(yīng)的數(shù)碼管。該數(shù)碼管是共陰極。

秒的十分位我用的是另一個共陽數(shù)碼管。我用P3口控制該數(shù)碼管的段選,其圖如下:

而獨立按鍵我用的P2^7控制“啟動/暫停鍵”,P2^6控制復(fù)位鍵:電路圖如下:(將JP5通過杜邦線接到P3口)

硬件電路基本上就是這些,由于分和秒之間要用小數(shù)點分隔開,所以分的個位對應(yīng)的數(shù)碼管的段碼要用帶小數(shù)點的段碼,其余的數(shù)碼管則不用。

硬件方面是為看懂軟件程序做準備,下面我們就開始我們的軟件程序方面吧!

3、軟件程序方面

#include

#defineucharunsignedchar

#defineuintunsignedint

#definePIN0P0//數(shù)碼管段選端

#definePIN1P1//數(shù)碼管位選端

#definePIN3P3//十分位數(shù)碼管的段碼端

sbitstart=P2^7;//啟動/暫停按鈕

sbitreset=P2^6;//復(fù)位按鈕

uintcnt=0;//1s的次數(shù)的計數(shù)值

uintnum=0;//進入中斷次數(shù)的計數(shù)值(一次50ms)

uintnum1=0;//0.1s的次數(shù)的計數(shù)值

ucharcodetable[]={0x3f,0x06,0x5b,

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//不帶小數(shù)點的共陰極數(shù)碼管段碼0-9

ucharcodetable1[]={0xbf,0x86,

0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

//帶小數(shù)點的共陰極數(shù)碼管段碼0-9

charcodetable2[]={0xc0,0xf9,0xa4,

0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//不帶小數(shù)點的共陽極數(shù)碼管段碼0-9

voidDisplay(uintw,uinta,uintb,uintc,uintd);//聲明顯示函數(shù)

voidInitTimer0();//聲明定時器初始化函數(shù)

voidDelayms(uintx);//聲明延時函數(shù)

voidmain()

{

uintms100=0;//秒的十分位

uints,s1,min,min1,minu=0;

//依次是秒的個位,秒的十位,分的個位,分的十位

InitTimer0();//初始化定時器

while(1)//進入死循環(huán)

{

if(start==0)//檢測啟動/暫停鍵是否按下

Delayms(20);//延時消抖

{

if(start==0)//消抖之后再次檢測

{

TR0=!TR0;//定時器的控制位取反

while(!start);//等待按鍵釋放

}

}

if(reset==0)//檢測復(fù)位鍵是否按下

{

Delayms(20);//延時消抖

if(reset==0)//消抖之后再次檢測

{

num=0;

num1=0;//進入中斷次數(shù)值清0

ms100=0;//十分位的計數(shù)值清0

cnt=0;//秒的計數(shù)值清0

minu=0;//分的計數(shù)值清0

while(!reset);//等待按鍵釋放

}

}

if(num1>=2)//檢測是否達到0.1s,(兩個50ms)

{

num1=0;//進入中斷次數(shù)值清零

ms100++;//秒的十分位的計數(shù)值加1

if(ms100>=10)//若秒的十分位計數(shù)值達到10

{

ms100=0;//清零秒的十分位的計數(shù)值

num1=0;//進入中斷次數(shù)值置0

}

}

if(num>=20)//判斷計時時間是否達到1s(20個50ms)

{

num=0;//進入中斷次數(shù)值置0

cnt++;//秒的計數(shù)值加1

if(cnt>=60)//判斷是否達到60s

{

cnt=0;//若達到60s,將秒的計數(shù)值置零

minu++;//分的計數(shù)值加1

if(minu>=60)//判斷是否達到60分鐘,一般秒表是用不到60分的,這是為了程序的嚴謹性

{

TR0=!TR0;//達到60分鐘則關(guān)閉定時器并清零所有的計數(shù)值

num1=0;

num=0;

ms100=0;

cnt=0;

minu=0;

}

}

}

s=cnt%10;//從秒的計數(shù)值里面分離秒的個位

s1=cnt/10;//從秒的計數(shù)值里面分離秒的十位

min=minu%10;//從分的計數(shù)值里面分離分的個位

min1=minu/10;//從分的計數(shù)值里面分離分的十位

Display(ms100,s,s1,min,min1);//顯示這5個數(shù)

}

}

voidInitTimer0()//定時器初始化函數(shù)

{

TMOD=0x01;//選擇定時器0的工作方式1

TH0=(65536-45872)/256;//裝初值(定時50ms),晶振11.0592MHz

TL0=(65536-45872)%256;

EA=1;//打開總中斷

ET0=1;//打開定時器中斷

TR0=0;//先不要啟動定時器

}

voidTIMER0()interrupt1//定時器中斷服務(wù)函數(shù)

{

TH0=(65536-45872)/256;//重裝初值

TL0=(65536-45872)%256;

num++;//讓進入中斷次數(shù)值加1,用于判斷是否達到1s

num1++;//讓進入中斷次數(shù)值加1,用于判斷是否達到0.1s

}

voidDelayms(uintx)//延時xms

{

uinti,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

voidDisplay(uintw,uinta,uintb,uintc,uintd)//定義顯示函數(shù)

{

PIN3=table2[w];//秒的十分位的段選

Delayms(5);

PIN0=table[a];//秒的個位的段選

PIN1=0x7f;//秒的個位的位選

Delayms(5);

PIN0=table[b];//秒的十位的段選

PIN1=0xbf;//秒的十位的位選

Delayms(5);

PIN0=table1[c];//分的個位的段選(帶小數(shù)點)

PIN1=0xdf;//分的個位的位選

Delayms(5);

PIN0=table[d];//分的十位的段選

PIN1=0xef;//分的十位的位選

Delayms(5);

}

由于在打字時可能不小心會弄錯一丁點程序,我都是一個字母一個字母手打的,所以請大家理解思路即可,根據(jù)這個思路自己去寫,這樣得到的知識才是屬于自己的。畢竟 “讀別人的故事,悟自己的人生”。

下面來幾張實物圖給大家看一下我這個秒表的實際效果。

編譯結(jié)果:

燒寫進單片機的效果:(沒有按啟動按鈕之前)

按了啟動按鈕之后,秒表將會自動開始計時,由于無法演示動態(tài)過程,只能在中間按下暫停鍵給大家看看效果:

按下復(fù)位鍵后:

由于我用的是一個比較完整的51開發(fā)板,所以里面有很多部分,大家只需要注意觀察數(shù)碼管部分就好。

下面再來一個完整的圖:

結(jié)束語

至此,利用51單片機制作的秒表就已經(jīng)完成了!若是文章中有什么不懂的地方或者是自己在制作過程中遇到什么問題都可以聯(lián)系我,或者給我留言,我一定竭盡全力幫助大家!我們一起學(xué)習(xí),一起進步!希望大家都能在看完這篇文章后自己動手成功制作出一個秒表,祝愿大家學(xué)好單片機!當然,由于自身水平有限,文章中肯定會存在錯誤或者是考慮不周的的地方,懇請不吝賜教!謝謝大家!

(PS:我寫了一整天了,反復(fù)的看,反復(fù)的改,現(xiàn)在頭昏眼花,但是只要能對大家有所幫助,一切都是值得的。)

作者:wangwangpengpeng

來源:

http://blog.csdn.net/wangwangpengpeng/article/details/76065286

責(zé)任編輯:PSY

原文標題:用51單片機制作一個秒表的詳細過程(教程有程序)

文章出處:【微信公眾號:玩轉(zhuǎn)單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6067

    文章

    44973

    瀏覽量

    650105
  • 51單片機
    +關(guān)注

    關(guān)注

    277

    文章

    5710

    瀏覽量

    127296
  • 秒表
    +關(guān)注

    關(guān)注

    3

    文章

    81

    瀏覽量

    22334

原文標題:用51單片機制作一個秒表的詳細過程(教程有程序)

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AT89C51 單片機中文資料

    電子發(fā)燒友網(wǎng)站提供《AT89C51 單片機中文資料.pdf》資料免費下載
    發(fā)表于 06-24 15:29 ?0次下載

    51單片機pwm和spwm

    51單片機pwm
    發(fā)表于 01-08 15:54 ?3次下載

    51單片機溫度報警器

    電子發(fā)燒友網(wǎng)站提供《51單片機溫度報警器.zip》資料免費下載
    發(fā)表于 12-30 14:16 ?3次下載

    51單片機核心板原理圖

    51單片機核心板原理圖
    發(fā)表于 12-16 11:30 ?4次下載

    求解答!用STC89C51系列數(shù)字秒表

    實驗室學(xué)51單片機,用STC89C51系列,作業(yè)太難了,求佬給源代碼幫助一下謝謝 1.通過定時器,8位數(shù)碼管,8個獨立按鍵完成1000秒以內(nèi)的數(shù)字秒表,最小分辨0.1秒,設(shè)置啟動計秒鍵
    發(fā)表于 12-08 16:48

    51單片機中為什么很少出現(xiàn)printf的身影

    51單片機中為什么很少出現(xiàn) printf 的身影?是用不了嗎? 不是的,51單片機可以用 printf,只是不建議使用。 平時我們在操作系統(tǒng)上寫C語言代碼,使用 printf 可以把數(shù)
    的頭像 發(fā)表于 12-03 10:46 ?1371次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>中為什么很少出現(xiàn)printf的身影

    基于51單片機的手動數(shù)字時鐘

    具體實現(xiàn)功能由51單片機+8位共陰數(shù)碼管+獨立按鍵構(gòu)成。具體功能:(1)利用數(shù)碼管顯示時分秒,顯示格式為“時-分-秒”;(2)利用6個按鍵控制時、分、秒,設(shè)定好后自動開始時鐘顯示;(3)設(shè)置秒復(fù)位
    的頭像 發(fā)表于 10-22 14:12 ?632次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的手動數(shù)字時鐘

    基于51單片機的停車場管理系統(tǒng)

    具體實現(xiàn)功能由51單片機+按鍵模塊+LCD1602顯示+報警模塊+74HC595模塊+LED指示燈等構(gòu)成。具體功能:(1)根據(jù)紅外傳感器原理,用兩個按鍵代替駛?cè)霗z測紅外傳感器和駛出檢測紅外
    的頭像 發(fā)表于 10-22 14:12 ?715次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的停車場管理系統(tǒng)

    基于51單片機的遙控開關(guān)仿真(雙機通信)

    具體實現(xiàn)功能由51單片機+獨立按鍵+繼電器+LED燈等構(gòu)成。實現(xiàn)功能:(1)本仿真設(shè)計的是一款遙控開關(guān),采用51單片機進行遙控器與主機的設(shè)計;(2)遙控器由
    的頭像 發(fā)表于 10-22 14:12 ?822次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的遙控開關(guān)仿真(雙機通信)

    如何實現(xiàn)51單片機與PC機的串行通信

    51單片機與PC機的串行通信是一種常見的通信方式,它允許單片機通過串行接口與PC機進行數(shù)據(jù)交換。這種通信方式在嵌入式系統(tǒng)、工業(yè)控制、物聯(lián)網(wǎng)等領(lǐng)域有著廣泛的應(yīng)用。以下是實現(xiàn)51
    的頭像 發(fā)表于 10-21 11:35 ?2656次閱讀

    單片機的中斷機制

    單片機的中斷機制是一種重要的處理方式,它允許單片機在執(zhí)行主程序的過程中,能夠暫停當前任務(wù),轉(zhuǎn)而處理外部或內(nèi)部緊急事件。這種機制極大地提高了系統(tǒng)的響應(yīng)速度和處理能力,使得
    的頭像 發(fā)表于 10-17 18:03 ?1963次閱讀

    51單片機驅(qū)動

    電子發(fā)燒友網(wǎng)站提供《51單片機驅(qū)動.exe》資料免費下載
    發(fā)表于 09-20 11:46 ?5次下載

    51單片機晶振的問題總結(jié)

    電子發(fā)燒友網(wǎng)站提供《51單片機晶振的問題總結(jié).doc》資料免費下載
    發(fā)表于 09-07 09:32 ?0次下載

    51單片機燒錄軟件怎么用

    準備工作 確保您已經(jīng)安裝了51單片機燒錄軟件,如Keil、IAR等。 準備好51單片機開發(fā)板和燒錄器,如STC-ISP等。 確保您的計算機已經(jīng)安裝了相應(yīng)的驅(qū)動程序。 安裝燒錄軟件 從官
    的頭像 發(fā)表于 08-22 09:26 ?2827次閱讀

    國產(chǎn)單片機(MCU)崛起 —— 51系列

    一、51系列單片機的命名由來51系列單片機的命名由來與它的設(shè)計和開發(fā)歷史相關(guān)。這個系列的單片機主要由Intel的8051微控制器發(fā)展而來,后
    的頭像 發(fā)表于 08-14 08:39 ?7473次閱讀
    國產(chǎn)<b class='flag-5'>單片機</b>(MCU)崛起 —— <b class='flag-5'>51</b>系列