找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 10958|回復(fù): 20
打印 上一主題 下一主題
收起左側(cè)

幫我做一個(gè)秒表的程序!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
1、AT89C51 單片機(jī)
2、獨(dú)立式按鍵 (用到key0和key1 兩個(gè)按鍵)
3、7段六位共陰極數(shù)碼管(7seg-mpx6-cc)

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

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

評(píng)分

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

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:124702 發(fā)表于 2016-6-2 15:57 | 只看該作者
哥們,這個(gè)太簡(jiǎn)單,你自己花點(diǎn)時(shí)間寫(xiě)下啊,不要太懶,學(xué)習(xí)也是種樂(lè)趣,祝你成功
回復(fù)

使用道具 舉報(bào)

板凳
ID:123241 發(fā)表于 2016-6-2 16:49 | 只看該作者
張三豐 發(fā)表于 2016-6-2 15:57
哥們,這個(gè)太簡(jiǎn)單,你自己花點(diǎn)時(shí)間寫(xiě)下啊,不要太懶,學(xué)習(xí)也是種樂(lè)趣,祝你成功

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

使用道具 舉報(bào)

地板
ID:111634 發(fā)表于 2016-6-2 17:32 | 只看該作者
本帖最后由 zl2168 于 2016-6-2 17:37 編輯

實(shí)例93    99.9秒秒表

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


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





回復(fù)

使用道具 舉報(bào)

5#
ID:111634 發(fā)表于 2016-6-2 17:40 | 只看該作者
以上摘自張志良編著《單片機(jī)實(shí)驗(yàn)實(shí)訓(xùn)100例》 ISBN 978-7-5124-1603-1,北航社出版
回復(fù)

使用道具 舉報(bào)

6#
ID:111634 發(fā)表于 2016-6-2 17:46 | 只看該作者
本帖最后由 zl2168 于 2016-6-2 17:48 編輯

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






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

使用道具 舉報(bào)

7#
ID:111634 發(fā)表于 2016-6-2 17:50 | 只看該作者
本帖最后由 zl2168 于 2016-6-2 17:57 編輯

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



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


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


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





99.9秒秒表程序1.jpg (307.81 KB, 下載次數(shù): 113)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

9#
ID:111634 發(fā)表于 2016-6-3 12:42 | 只看該作者
請(qǐng)問(wèn)慌張:“.....................”是什么意思?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

13#
ID:123289 發(fā)表于 2016-6-3 23:42 | 只看該作者
能循環(huán)顯示最近三次的計(jì)時(shí)值
需要有三個(gè)記錄時(shí)間的地方:增開(kāi)6個(gè)單元:
S1、m1(存最近一次的時(shí)間記錄),
S2、m2(存再上一次的時(shí)間記錄),
S3、m3(存再再上一次的時(shí)間記錄)。
每次J=2時(shí)【暫�!繒r(shí):
將S2、m2存入S3、m3;
將S1、m1存入S2、m2;
將S、m存入S1、m1;
回復(fù)

使用道具 舉報(bào)

14#
ID:123289 發(fā)表于 2016-6-3 23:54 | 只看該作者
在復(fù)位狀態(tài)下按下K2:
這里需要增設(shè)一個(gè)一秒計(jì)時(shí)器P,P=0-199。
當(dāng)J=0時(shí)【復(fù)位狀態(tài)】時(shí),每中斷一次(5ms中斷一次),P+1,當(dāng)P+1=200時(shí),即1秒到,清P=0,并做下列事件:
將S1、m1存入S、m;
將S2、m2存入S1、m1;
將S3、m3存入S2、m2;
將S、m存入S3、m3;
因?yàn)橹袛喑绦蛞恢笔窃趻呙栾@示S、m的,所以每秒切換顯示被實(shí)現(xiàn)。
回復(fù)

使用道具 舉報(bào)

15#
ID:123289 發(fā)表于 2016-6-3 23:59 | 只看該作者
如果中斷時(shí)間改為10ms則T可以不要,但LED顯示會(huì)有閃爍感。
經(jīng)驗(yàn):4位LED在掃描時(shí)間小于6ms時(shí),會(huì)有閃爍感,因人而異。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

17#
ID:123289 發(fā)表于 2016-6-4 00:12 | 只看該作者
樓上參考圖:
會(huì)多用4顆驅(qū)動(dòng)IC(每個(gè)LED一個(gè)),不經(jīng)濟(jì),也占線路板面積。
如果各段再增加限流電阻的話,會(huì)再多用3*7個(gè)電阻。

回復(fù)

使用道具 舉報(bào)

18#
ID:160673 發(fā)表于 2017-1-7 22:58 | 只看該作者
zl2168 發(fā)表于 2016-6-2 17:32
實(shí)例93    99.9秒秒表

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

請(qǐng)問(wèn)一下c程序有嗎
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

20#
ID:111634 發(fā)表于 2017-1-8 13:29 | 只看該作者
賢者 發(fā)表于 2017-1-7 22:58
請(qǐng)問(wèn)一下c程序有嗎

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

使用道具 舉報(bào)

21#
ID:782295 發(fā)表于 2020-6-17 22:22 | 只看該作者
哥,我想問(wèn)一下你這本書(shū)的電子版在哪找的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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