標(biāo)題: 自學(xué)了好長(zhǎng)時(shí)間C51單片機(jī)還是懵懵懂懂,求指導(dǎo)下程序 硬件已經(jīng)完成了 [打印本頁(yè)]

作者: mcuhui    時(shí)間: 2022-10-18 19:45
標(biāo)題: 自學(xué)了好長(zhǎng)時(shí)間C51單片機(jī)還是懵懵懂懂,求指導(dǎo)下程序 硬件已經(jīng)完成了
能力有限,自學(xué)了好長(zhǎng)時(shí)間C51單片機(jī)還是懵懵懂懂,現(xiàn)在手頭上有個(gè)DIY需要用到51程序。對(duì)于我來(lái)說(shuō)難度很大但是對(duì)于高手來(lái)說(shuō)是非常簡(jiǎn)單的。求助有沒(méi)有大師能不能帶著輔導(dǎo)寫(xiě)一下。硬件已經(jīng)完成了。下面是程序需求。
MCU芯片型號(hào):STC8G1K17-38I
封裝:TSSOP-20
系統(tǒng)供電:+5V
燒錄方式:串口ISP下載
系統(tǒng)程序要求:
開(kāi)機(jī)自檢:
1. 溫度是否在60℃以下,如果溫度在范圍內(nèi);MCU正常開(kāi)機(jī)且4顆LED跑馬燈式依次全亮10秒后熄滅。如果溫度超過(guò)設(shè)計(jì)60℃范圍,MCU不能正常開(kāi)機(jī)(兩個(gè)按鍵狀態(tài)鎖定)且4顆LED連續(xù)閃爍30S后熄滅。
2. 檢查BV電壓:上電后BV電壓<2.8V或大于4.6V系統(tǒng)不能正常工作(兩個(gè)按鍵狀態(tài)鎖定);且LED1燈快閃10次熄滅;BV電壓自檢正常4顆LED跑馬燈依次點(diǎn)亮10秒后對(duì)應(yīng)BV值顯示出該值下的電量顯示,詳見(jiàn)電量指示LED對(duì)應(yīng)表。
系統(tǒng)工作:
短按SW2,系統(tǒng)能依照電量指示LED對(duì)應(yīng)表輸出LED1-LED4的點(diǎn)燈狀態(tài),控制端口為P3.3-P3.5;低電平有效;點(diǎn)亮LED時(shí)間為5S。
1. 短按SW1;P1.1端口能輸出高電平;再次短按P1.1能輸出低電平。
2. 長(zhǎng)按SW1時(shí)長(zhǎng)3S以上;P1.1輸出高電平。長(zhǎng)按SW1時(shí)長(zhǎng)3S以上,P1.0端口輸出低電平;
3. 系統(tǒng)工作后持續(xù)檢測(cè)TEMP值,對(duì)應(yīng)溫度值達(dá)到60℃時(shí),P3.7端口持續(xù)輸出高電平打開(kāi)FAN;直到系統(tǒng)檢測(cè)TEMP值小于60℃時(shí),P3.7端口持續(xù)輸出低電平關(guān)斷FAN。
4. 系統(tǒng)工作后持續(xù)檢測(cè)BV值;當(dāng)檢測(cè)到BV值<3.0V時(shí),LED1-LED2連續(xù)閃爍5秒后熄滅。
作者: qingshuiyu    時(shí)間: 2022-10-19 02:56
第1個(gè)表述有點(diǎn)問(wèn)題,不是MCU不能正常開(kāi)機(jī)而是面板不允許操作且輸出故障提示。
作者: zgrfox110    時(shí)間: 2022-10-19 07:14
qingshuiyu 發(fā)表于 2022-10-19 02:56
第1個(gè)表述有點(diǎn)問(wèn)題,不是MCU不能正常開(kāi)機(jī)而是面板不允許操作且輸出故障提示。

編程就是數(shù)據(jù)的傳送、搬運(yùn)!首先你要知道如何搬運(yùn),其次是如何搬運(yùn),為什么搬運(yùn)?就像做菜,案板就那一個(gè),切菜也是拿來(lái)一樣,切完了,拿走,再拿來(lái)一樣菜!
作者: runmuel    時(shí)間: 2022-10-19 08:26
硬件完成?靠這個(gè)文字描述是不行的,沒(méi)電路圖也沒(méi)有程序別人幫不了你的
作者: mcuhui    時(shí)間: 2022-10-19 08:48
圖片為原理圖請(qǐng)各位大師幫忙看看,謝謝!

圖片2.png (465.17 KB, 下載次數(shù): 61)

圖片2.png

作者: xia20    時(shí)間: 2022-10-19 09:24
你程序起碼也得有個(gè)框架出來(lái)別人才好幫你修正啊
作者: yzwzfyz    時(shí)間: 2022-10-19 09:51
你會(huì)畫(huà)邏輯流程嗎?試著先畫(huà)出來(lái)。不著急寫(xiě)程序,先跑通流程圖。
我在編程時(shí),程序很復(fù)雜:如漢顯、數(shù)顯、溫濕度、無(wú)線通訊、有線通訊、USB、數(shù)控、紅外遙控、時(shí)間鐘、FALSH……
都是列出所有的邏輯關(guān)系,表格。再畫(huà)出程序流程圖。
最后按流程圖寫(xiě)程序,出問(wèn)題時(shí),按流程圖審核,哪里錯(cuò)了,改進(jìn)。
作者: runmuel    時(shí)間: 2022-10-19 10:28
建議將ADC檢測(cè)配置做出來(lái),主程序掃描按鍵和讀取溫度和電壓的檢測(cè)時(shí)間(比如定時(shí)每秒檢測(cè)一次溫度和BV電壓值并處理),LED顯示和ADC定時(shí)檢測(cè)使用定時(shí)器做。電路有問(wèn)題,輸入電壓低時(shí)MCU檢測(cè)電壓值就不準(zhǔn)了,輸入電壓過(guò)低LED顯示也成問(wèn)題,建議MCU增加一個(gè)備用電池,117供電和備用電池都使用二極管隔離
作者: mcuhui    時(shí)間: 2022-10-19 11:01
qingshuiyu 發(fā)表于 2022-10-19 02:56
第1個(gè)表述有點(diǎn)問(wèn)題,不是MCU不能正常開(kāi)機(jī)而是面板不允許操作且輸出故障提示。

其實(shí)表達(dá)的就是鎖死按鍵,括號(hào)里面有備注?赡苊枋霾粶(zhǔn)確。
作者: mcuhui    時(shí)間: 2022-10-19 11:02
zgrfox110 發(fā)表于 2022-10-19 07:14
編程就是數(shù)據(jù)的傳送、搬運(yùn)!首先你要知道如何搬運(yùn),其次是如何搬運(yùn),為什么搬運(yùn)?就像做菜,案板就那一個(gè) ...

感謝回復(fù),那我學(xué)著慢慢搬運(yùn)
作者: mcuhui    時(shí)間: 2022-10-19 11:02
runmuel 發(fā)表于 2022-10-19 08:26
硬件完成?靠這個(gè)文字描述是不行的,沒(méi)電路圖也沒(méi)有程序別人幫不了你的

謝謝回復(fù),原理圖已貼
作者: mcuhui    時(shí)間: 2022-10-19 11:03
xia20 發(fā)表于 2022-10-19 09:24
你程序起碼也得有個(gè)框架出來(lái)別人才好幫你修正啊

謝謝回復(fù),就是框架不會(huì)搭建
作者: mcuhui    時(shí)間: 2022-10-19 11:04
yzwzfyz 發(fā)表于 2022-10-19 09:51
你會(huì)畫(huà)邏輯流程嗎?試著先畫(huà)出來(lái)。不著急寫(xiě)程序,先跑通流程圖。
我在編程時(shí),程序很復(fù)雜:如漢顯、數(shù)顯、 ...

謝謝回復(fù),感謝建議。那我來(lái)試著把程序流程圖做出來(lái)然后在試試慢慢寫(xiě)程序。有問(wèn)題在向您討教。
作者: mcuhui    時(shí)間: 2022-10-19 11:07
runmuel 發(fā)表于 2022-10-19 10:28
建議將ADC檢測(cè)配置做出來(lái),主程序掃描按鍵和讀取溫度和電壓的檢測(cè)時(shí)間(比如定時(shí)每秒檢測(cè)一次溫度和BV電壓 ...

謝謝回復(fù)及建議;這個(gè)用搭配電池包用的,如果電池電壓過(guò)低電池包保護(hù)板就過(guò)放保護(hù)了。所以我理解只要B+電壓在范圍內(nèi)就不會(huì)導(dǎo)致您說(shuō)的這個(gè)問(wèn)題。
作者: Y_G_G    時(shí)間: 2022-10-19 13:48
對(duì)誰(shuí)都一樣,不是高手不高手的
一步一步來(lái),一個(gè)功能一個(gè)功能的去實(shí)現(xiàn)
比如,你先寫(xiě)LED指示燈的函數(shù):"MCU正常開(kāi)機(jī)且4顆LED跑馬燈式依次全亮10秒后熄滅"
那就單單的寫(xiě)這個(gè)功能,其它都什么都不要,只寫(xiě)這個(gè)函數(shù)
單單這個(gè)功能應(yīng)該能寫(xiě)吧,寫(xiě)完之后,放在程序中,燒錄驗(yàn)證.別仿真,仿真那玩意沒(méi)有用
然后就是其它功能,再一個(gè)一個(gè)的寫(xiě),誰(shuí)都是這個(gè)過(guò)程
你至少有個(gè)自己大的框架
作者: mcuhui    時(shí)間: 2022-10-19 15:20
Y_G_G 發(fā)表于 2022-10-19 13:48
對(duì)誰(shuí)都一樣,不是高手不高手的
一步一步來(lái),一個(gè)功能一個(gè)功能的去實(shí)現(xiàn)
比如,你先寫(xiě)LED指示燈的函數(shù):"MCU正 ...

謝謝回復(fù);我覺(jué)得這個(gè)太難了。尤其是要去實(shí)現(xiàn)這些功能。不過(guò)我會(huì)根據(jù)你的建議一個(gè)模塊一個(gè)模塊去寫(xiě)去試。
作者: Y_G_G    時(shí)間: 2022-10-19 17:58
mcuhui 發(fā)表于 2022-10-19 15:20
謝謝回復(fù);我覺(jué)得這個(gè)太難了。尤其是要去實(shí)現(xiàn)這些功能。不過(guò)我會(huì)根據(jù)你的建議一個(gè)模塊一個(gè)模塊去寫(xiě)去試。

這種功能本身就是沒(méi)有什么很高深的難度,就是功能多而已
函數(shù)就像模塊一樣,一個(gè)一個(gè)的去寫(xiě),一個(gè)一個(gè)的驗(yàn)證
大體功能就是那么幾個(gè):
端口初始化
指示燈
按鍵讀取和處理
ADC,電壓檢測(cè),溫度檢測(cè),都是ADC完成的,像你這個(gè)功能對(duì)效率要求不高的,推薦ADC用中斷來(lái)進(jìn)行
每個(gè)功能要燒錄進(jìn)行驗(yàn)證,不要仿真,仿真不出來(lái)的

作者: mcuhui    時(shí)間: 2022-10-20 14:39
Y_G_G 發(fā)表于 2022-10-19 17:58
這種功能本身就是沒(méi)有什么很高深的難度,就是功能多而已
函數(shù)就像模塊一樣,一個(gè)一個(gè)的去寫(xiě),一個(gè)一個(gè)的驗(yàn) ...

好的,謝謝指導(dǎo)。我比較菜我來(lái)試試看。我不仿真也用不來(lái)那玩意
作者: mcuhui    時(shí)間: 2022-10-20 14:40
這是我畫(huà)的程序流程圖,各位大師幫忙看看思路對(duì)不對(duì)?
作者: mcuhui    時(shí)間: 2022-10-20 15:11
流程圖

作者: yzwzfyz    時(shí)間: 2022-10-20 16:29
樓主的圖,當(dāng)是功能模塊圖。
程序的流程:一定是一個(gè)封閉的環(huán)路。因?yàn)槟愕某绦蚴且恢边\(yùn)行的,它沒(méi)有停止點(diǎn)。
也即任何一個(gè)方塊都必須【有進(jìn)有出】無(wú)輸入只有一個(gè):開(kāi)機(jī)。
作者: Y_G_G    時(shí)間: 2022-10-20 18:47
你的代碼肯定會(huì)有一個(gè)while(1),那就是一個(gè)閉環(huán)的死循環(huán)
那么,你對(duì)應(yīng)的流程圖也得有一個(gè)跑回去的流程才對(duì)呀
大概是:
A,開(kāi)機(jī)
B,相關(guān)初始化
C,按鍵檢測(cè)
D,電壓檢測(cè)
E,溫度檢測(cè)
F,相關(guān)指示,數(shù)碼管或者LED燈之類(lèi)的
G,回到C
如果有中斷,中斷就是在這個(gè)循環(huán)之外執(zhí)行的
作者: mcuhui    時(shí)間: 2022-10-20 19:24
yzwzfyz 發(fā)表于 2022-10-20 16:29
樓主的圖,當(dāng)是功能模塊圖。
程序的流程:一定是一個(gè)封閉的環(huán)路。因?yàn)槟愕某绦蚴且恢边\(yùn)行的,它沒(méi)有停止點(diǎn) ...

謝謝指導(dǎo),也就是相當(dāng)于要執(zhí)行主程序循環(huán)這個(gè)意思是吧?
作者: mcuhui    時(shí)間: 2022-10-20 19:24
Y_G_G 發(fā)表于 2022-10-20 18:47
你的代碼肯定會(huì)有一個(gè)while(1),那就是一個(gè)閉環(huán)的死循環(huán)
那么,你對(duì)應(yīng)的流程圖也得有一個(gè)跑回去的流程才對(duì)呀 ...

明白了,就是主程序循環(huán)執(zhí)行吧?謝謝指導(dǎo)
作者: ay247    時(shí)間: 2022-10-21 10:18
電路圖還是要自己認(rèn)真去做,去完成的,沒(méi)有人能幫助你,加油,小伙子
作者: ay247    時(shí)間: 2022-10-21 10:18
盡量一個(gè)功能一個(gè)功能認(rèn)真的去實(shí)現(xiàn)
作者: mcuhui    時(shí)間: 2022-10-22 08:15
ay247 發(fā)表于 2022-10-21 10:18
電路圖還是要自己認(rèn)真去做,去完成的,沒(méi)有人能幫助你,加油,小伙子

謝謝回復(fù),電路圖已經(jīng)畫(huà)好了。其實(shí)大家都幫助了很多。謝謝鼓勵(lì)!
作者: mcuhui    時(shí)間: 2022-10-22 08:16
ay247 發(fā)表于 2022-10-21 10:18
盡量一個(gè)功能一個(gè)功能認(rèn)真的去實(shí)現(xiàn)

謝謝回復(fù),目前正在一步一步去驗(yàn)證
作者: suncat0504    時(shí)間: 2022-10-22 09:18
涉及定時(shí)的,用得到定時(shí)器中斷處理。主程序中設(shè)置啟動(dòng)標(biāo)志,定時(shí)中斷中根據(jù)標(biāo)志控制輸出、計(jì)算時(shí)間,時(shí)間到,清除標(biāo)志和改變控制輸出。中斷處理本身也需要一個(gè)流程。剛?cè)胄,?jiǎn)單看下程序結(jié)構(gòu)設(shè)計(jì)、流程圖設(shè)計(jì)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1