![]() |
發(fā)布時間: 2020-12-6 23:49
正文摘要:我的流水方式不能隨著開關(guān)的變化而變化,剛剛學(xué)。以下是我寫的代碼:怎么修改我的代碼讓它能隨開關(guān)的變化而變化。 ORG 0000HLJMP MAIN ... |
你的程序邏輯,有風格,哈哈哈。一把的邏輯,不是在主程序里建立循環(huán),在循環(huán)里,根據(jù)開關(guān)的狀態(tài)值,來決定調(diào)用哪個顯示處理嗎?假設(shè)P1采樣開關(guān)值,P2口顯示流水燈, "0"亮, “1”滅 MAIN: MOV A, P1 JNZ MODE1 ;開關(guān)狀態(tài)是0嗎? LCALL DISP_MODE0 ;是0, 按照方式0顯示 LJMP MAIN MODE1: XRL A, #1 ;開關(guān)狀態(tài)是1嗎? JNZ MODE2 LCALL DISP_MODE1 ;是1, 按照方式1顯示 LJMP MAIN MODE2: MOV A, P1 XRL A, #2 ;開關(guān)狀態(tài)是2嗎? JNZ MODE3 LCALL DISP_MODE3 ;是2, 按照方式2顯示 LJMP MAIN MODE3: MOV A, P1 XRL A, #3 ;開關(guān)狀態(tài)是3嗎? JNZ MAIN LCALL DISP_MODE3 ;是3, 按照方式3顯示 LJMP MAIN DIMSP_MODE0: 按照方式0顯示流水燈,每次只亮一個,從Bit0->Bit7 MOV A, #0FEH MOV P2, A ;點亮P20對應(yīng)的燈 LCALL DELAY500MS MOV R7, 7 MODE0_LOOP: SETB C RLC A ;帶進位1做循環(huán),使0依次從Bit0->Bit7 MOV P2, A ;輸出到P2口,點亮“0”對應(yīng)的Bit口位 LCALL DELAY500MS ;延遲顯示一段時間 DJNZ R7, MODE0_LOOP ;是否已經(jīng)完成所有循環(huán) RET DIMSP_MODE1: 按照方式1顯示流水燈,逐個點亮所有LED ;0FFH + 進位標志C=0, RLC A,保證P2從0FEH,0FCH,0F8H, ... 到00H ;一次是P2的Bit0到Bit7全部輸出0,從而逐個點亮所有LED ... RET DIMSP_MODE2: 按照方式2顯示流水燈 ... RET DIMSP_MODE3: 按照方式3顯示流水燈 ... RET DELAY500MS: ;循環(huán)R6,R5,R4等,保證實現(xiàn)接近500ms ... RET 具體顯示,我只寫了處理邏輯,具體代碼,需要你自己發(fā)揮了。 還有一個比較簡單的處理方式,你預(yù)先把要顯示的模式中,對應(yīng)P2的變化值,寫到一個數(shù)組中,然后在 顯示處理中,循環(huán)取得這些值并輸出到P2口。 ;利用MOVC A,@A+DPTR指令,從預(yù)設(shè)的顯示數(shù)據(jù)區(qū)取得輸出數(shù)據(jù) ;方式0顯示流水燈,每次只亮一個,從Bit0->Bit7 TAB_MODE0: DB 11111110B, 11111101B, 11111011B, 11110111B, 11101111B, 11011111B, 10111111B, 01111111B ;依次全部點亮 TAB_MODE1: DB 11111110B, 11111100B, 11111000B, 11110000B, 11100000B, 11000000B, 10000000B,00000000B ;先全亮,從外向中間轉(zhuǎn)移滅燈 TAB_MODE2: DB 00000000B, 10000001B , 11000011B, 11100111B, 11111111B 為了更直觀,數(shù)據(jù)區(qū)的定義,我都是用2進制表示的數(shù)據(jù)。0對應(yīng)亮,1對應(yīng)滅 自定義顯示流水燈,你可以在內(nèi)存開辟一段區(qū)域,運行時動態(tài)指定這些區(qū)域的數(shù)據(jù),然后利用循環(huán),把這數(shù)據(jù)依次輸出到P2口,就完成了自定義顯示模式。 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
Y_G_G 發(fā)表于 2020-12-8 08:23 學(xué)校里的實驗,開發(fā)板,可以仿真,也可以去實驗室下到硬件里驗證。好,謝謝 |
第一:電路呢? 第二:單片機型號呢? 第三:這是仿真還是開發(fā)板的結(jié)果? 建議:在KEIL環(huán)境下,不用區(qū)分"JMP"和"AJMP",全部用JMP,CALL就可以了,編譯器會自動識別的 每個子程序之間用;==============================隔開,這樣就更能清楚的顯示你的程序走向,不然別人看不明白的,匯編用的人少 |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
Powered by 單片機教程網(wǎng)