找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10934|回復(fù): 20
收起左側(cè)

幫我做一個秒表的程序!

[復(fù)制鏈接]
ID:123241 發(fā)表于 2016-6-2 12:38 | 顯示全部樓層 |閱讀模式
1、AT89C51 單片機
2、獨立式按鍵 (用到key0和key1 兩個按鍵)
3、7段六位共陰極數(shù)碼管(7seg-mpx6-cc)

秒表程序要求(C語言)
1、顯示時間為 00.00~99.99s,每0.01s自動加1.
2、上電時 顯示 00.00。
3、設(shè)置功能鍵 K1,當(dāng)按下該功能鍵,依次實現(xiàn)秒表的 啟動→暫停→復(fù)位→啟動→·······
4、設(shè)置功能鍵 K2,在復(fù)位狀態(tài)下按下該鍵,能循環(huán)顯示最近三次的計時值。(比如 K1暫停的值是00.20,按下K2則顯示00.20,延時1s后,顯示00.19,再延時1s后,顯示00.18)

要一個C語言程序(最好有解釋)和一個protues仿真圖,原理圖。

評分

參與人數(shù) 1黑幣 +4 收起 理由
1274257385 + 4 贊一個!

查看全部評分

相關(guān)帖子

回復(fù)

使用道具 舉報

ID:124702 發(fā)表于 2016-6-2 15:57 | 顯示全部樓層
哥們,這個太簡單,你自己花點時間寫下啊,不要太懶,學(xué)習(xí)也是種樂趣,祝你成功
回復(fù)

使用道具 舉報

ID:123241 發(fā)表于 2016-6-2 16:49 | 顯示全部樓層
張三豐 發(fā)表于 2016-6-2 15:57
哥們,這個太簡單,你自己花點時間寫下啊,不要太懶,學(xué)習(xí)也是種樂趣,祝你成功

我寫了,但是k2功能實現(xiàn)不了,不知道怎么弄。還有仿真圖不會,沒學(xué)過
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2016-6-2 17:32 | 顯示全部樓層
本帖最后由 zl2168 于 2016-6-2 17:37 編輯

實例93    99.9秒秒表

Proteus仿真一下,盼挑刺、盼質(zhì)疑、盼比較。


實例95 99.9秒秒表.rar (38.86 KB, 下載次數(shù): 91)




99.9秒秒表.jpg
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2016-6-2 17:40 | 顯示全部樓層
以上摘自張志良編著《單片機實驗實訓(xùn)100例》 ISBN 978-7-5124-1603-1,北航社出版
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2016-6-2 17:46 | 顯示全部樓層
本帖最后由 zl2168 于 2016-6-2 17:48 編輯

⒈ 99.9秒秒表電路設(shè)計

99.9秒秒表電路.jpg




設(shè)計99.9秒秒表電路如8-15所示,該電路與上例相似,刪除3位顯示、2個校正按鍵和4個秒閃爍發(fā)光二極管,就組成了99.9秒秒表電路。
80C51 RXD與控制秒十位輸出顯示的74HC595 DS端連接,595串行輸出端QS與下一595串行輸入端DS端連接,595并行輸出端Q0Q7與數(shù)碼管筆段ag、Dp端連接,依次輸出3秒數(shù)據(jù);小數(shù)點固定在第2位,通過電阻接地;TXD3595 CLK端連接,串行輸出時鐘脈沖,控制595串行移位;P1.73595 RCK端連接,控制輸出觸發(fā)595片內(nèi)緩沖寄存器中數(shù)據(jù)進入輸出寄存器的正脈沖;K0連接,按下K0,觸發(fā)中斷,控制秒表快速響應(yīng),立即計時。
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2016-6-2 17:50 | 顯示全部樓層
本帖最后由 zl2168 于 2016-6-2 17:57 編輯

99.9秒秒表程序設(shè)計



設(shè)fosc=6MHz,按8-15電路,要求一鍵三用:按第一次,秒表運行計時,最大計時99.9s,超過復(fù)0按第二次,秒表停運行,但保持最后顯示秒數(shù)。按第三次,秒表清0。


T0定時器方式2定時500ms,計數(shù)200,即為0.1s,作為秒表最小計時單位。


T0初值=28 -500ms/2ms=256–250=6。因此,TH0 =TL0 = 06H。

99.9秒秒表程序1.jpg

99.9秒秒表程序2.jpg



99.9秒秒表程序1.jpg
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2016-6-2 18:07 | 顯示全部樓層
若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s(10ms)計數(shù)器,并修改相應(yīng)計數(shù)顯示程序。
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2016-6-3 12:42 | 顯示全部樓層
請問慌張:“.....................”是什么意思?
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-3 22:37 | 顯示全部樓層
1,數(shù)碼管 一個段的電流在3-20mA,通常取10mA,8個段全亮?xí)r,共同極上有80mA.
2,AT89C51的引腳的IO低電平時可以吸收24mA,而高電平卻不能提供超過4mA的電流(更精確請查手冊)
3,所以建議:采用共陽的LED,這個可以直接驅(qū)動!用P1.0-P1.7接LED的A,B,C,D,E,F,G,H(第1、3、4的H【小數(shù)點】段不用,第2個用)的8個段,并串接8個電阻(每腳一個)。
4,多個LED可以用掃描顯示的方式進行顯示,即每個時刻只顯示一個LED,其它的LED不顯示,快速的切換各個LED(通過對陽極的供電與否),由于人眼有視覺殘留,所以看不出來是逐個顯示的。所以將每個LED的A與A,B與B……G與G并在一齊。第二個LED的H單獨占用一個IO口。
5、共陽極必須分別驅(qū)動,又因為最大驅(qū)動電流是80mA,所以需要加三極管放大電流,這里可以用NPN的三極管:如5551,9013等等。采用射極跟隨器的接法:三極管的B接IO口,如P3.x(P3.0-P3.3共4個);E接LED的陽極,C可以直接接電源5V.
4個LED用4個端口,4個三極管。
注意:P0口是OC輸出,無驅(qū)動能力,不能直接用。如果必須用P0口,需要加上拉電阻。
6、電阻的計算:設(shè)LED的紅色,其管壓降為1.4V(綠色為1.7V,建議查手冊),IO口低電平電壓取0.3V,小計壓損為1.4+0.3=1.7V。共陽的擴流三極管基極壓降0.7V,IO輸出高電平取4.5V。這樣加在電阻上的電壓為:
4.5-0.7-1.7=2.1V。所以R=2.1V/10mA=210歐(串在P1口上的8個電阻)。如果LED的段的合成的(多個串)請自行修正。
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-3 22:45 | 顯示全部樓層
顯示軟件部分:
1、取4個RAM單元(編號X0至X3)對應(yīng)存放4個LED的顯示內(nèi)容(這里是0亮1滅,共陽LED)。
2、取一個單元做計數(shù)器K,從0至3循環(huán)計數(shù),分別對應(yīng)顯示4個LED。
3、做一個時間中斷(如5ms中斷一次),每次將K+1,同時做如下動作:(注:當(dāng)K=4時清K=0。)
4、當(dāng)K=0時讓第1個LED的陽極為1;其余LED的陽極為0,并將X0中的數(shù)據(jù)送入P1口,即顯示第0個LED。以此類推:當(dāng)K=3時讓第4個LED的陽極為1;其余LED的陽極為0,并將X3中的數(shù)據(jù)送入P1口,即顯示第4個LED。注意:一定要先關(guān)所有的陽極,再開某一個陽極,否則會有切換閃動。
如此每次中斷間隔5ms會切換一個LED顯示,人眼是看不出來的。
5、再取2個RAM單元(編號S、m)對應(yīng)存秒、毫秒時間,再做一個10毫秒標(biāo)記T(=0或1),每次中斷將T求反(0與1互變),當(dāng)T=1時,將m+1,m=100時:將m清0,S+1,當(dāng)S=100時將S清0。當(dāng)T=0時,不做時間處理(S,m不變)。由于是5ms中斷一個,所以每次T=1時是0.01秒。如果中斷改為10ms則可以不要T,但顯示會有閃爍感!經(jīng)驗:4位LED掃描,小于6ms就有閃爍感。
S,m最好用十進制,即每次ADD A,#1;時再做DAA調(diào)整,然后再將A送入S或m,當(dāng)時間有變動時,需將S高四位,低四位,m的高四位,低四位進行LED譯碼,分別送入X0-X3。
6、譯碼方法:做一個表(從某個單元起放10個LED的顯示碼,分別顯示:0,1,2......9的LED段碼),例如:取S高四位,=幾,就取表中的第幾個數(shù)送入X0。
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-3 23:22 | 顯示全部樓層
啟動→暫!鷱(fù)位→啟動→·······
有三個狀態(tài)循環(huán),所以要增加的個計數(shù)器J,J=0,1,2。
起始J=0。【完成上電時 顯示 00.00】
每按一次K1,J+1。(這時有防彈動問題,由于0.01秒的計時【4位LED】,編程有技巧,這里不述。)
當(dāng)J=3時清J=0。
當(dāng)J=2時禁止對S、m計時;【完成暫!
當(dāng)J=1時允許對S、m計時;【完成啟動】
當(dāng)J=0時禁止對S、m計時并清S=0、m=0!就瓿蓮(fù)位】
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-3 23:42 | 顯示全部樓層
能循環(huán)顯示最近三次的計時值
需要有三個記錄時間的地方:增開6個單元:
S1、m1(存最近一次的時間記錄),
S2、m2(存再上一次的時間記錄),
S3、m3(存再再上一次的時間記錄)。
每次J=2時【暫!繒r:
將S2、m2存入S3、m3;
將S1、m1存入S2、m2;
將S、m存入S1、m1;
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-3 23:54 | 顯示全部樓層
在復(fù)位狀態(tài)下按下K2:
這里需要增設(shè)一個一秒計時器P,P=0-199。
當(dāng)J=0時【復(fù)位狀態(tài)】時,每中斷一次(5ms中斷一次),P+1,當(dāng)P+1=200時,即1秒到,清P=0,并做下列事件:
將S1、m1存入S、m;
將S2、m2存入S1、m1;
將S3、m3存入S2、m2;
將S、m存入S3、m3;
因為中斷程序一直是在掃描顯示S、m的,所以每秒切換顯示被實現(xiàn)。
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-3 23:59 | 顯示全部樓層
如果中斷時間改為10ms則T可以不要,但LED顯示會有閃爍感。
經(jīng)驗:4位LED在掃描時間小于6ms時,會有閃爍感,因人而異。
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-4 00:04 | 顯示全部樓層
硬件上:LED數(shù)碼管不加電阻直接驅(qū)動,是不安全的,LED是非線性二極管特性,會產(chǎn)生大電流。
輕則發(fā)熱,重則由于電流增大,影響系統(tǒng)或燒壞IC或LED。
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2016-6-4 00:12 | 顯示全部樓層
樓上參考圖:
會多用4顆驅(qū)動IC(每個LED一個),不經(jīng)濟,也占線路板面積。
如果各段再增加限流電阻的話,會再多用3*7個電阻。

回復(fù)

使用道具 舉報

ID:160673 發(fā)表于 2017-1-7 22:58 | 顯示全部樓層
zl2168 發(fā)表于 2016-6-2 17:32
實例93    99.9秒秒表

先Proteus仿真一下,盼挑刺、盼質(zhì)疑、盼比較。

請問一下c程序有嗎
回復(fù)

使用道具 舉報

ID:85726 發(fā)表于 2017-1-8 10:39 | 顯示全部樓層
大神們的資料夠多的了!至于K2循環(huán)顯示最近三次的計時值這一塊,程序里可以這樣編寫:K1實現(xiàn)三個功能,也就是要設(shè)定一個變量,比如keynum,啟動=1,暫停=2.復(fù)位=3,那么keynum=2可以每次暫停的時候把計時值賦給一個數(shù)組!等到你K2按下時再調(diào)用數(shù)組的值即可。▊人理解)
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2017-1-8 13:29 | 顯示全部樓層
賢者 發(fā)表于 2017-1-7 22:58
請問一下c程序有嗎

仿真電路和Hex文件能在清華出版社網(wǎng)站免費下載,程序源代碼只能到書上看了。
回復(fù)

使用道具 舉報

ID:782295 發(fā)表于 2020-6-17 22:22 | 顯示全部樓層
哥,我想問一下你這本書的電子版在哪找的
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表