1樓:匿名使用者
真巧,我今天很閒
loop: mov r2,#20 置1s計數初值
mov r3,#20 紅燈亮20s
mov second1,#25 東西路口計時顯示初值25s
mov second2,#25 南北路口計時顯示初值25s
lcall display
lcall statel1 呼叫狀態1
wait1:jnb tf0,wait1 查詢50ms到否
clr tf0
mov th0,#3ch 恢復t0定時初值50ms
mov tl0,#0b0h
djnz r2,wait1 判斷1s到否?未到繼續狀態1
mov r2,#20 置50ms計數初值
dec secind1 東西路口顯示時間減1
dec second2 南北路口顯示時間減1
lcall display
djnz r3,wait1 狀態1維持20s
mov r2,#5 置50ms計數初值
mov r3,#3 綠燈閃爍3s
mov r4,#4 閃爍間隔200ms
mov second1,#5 東西路口計時顯示初值5s
mov second2,#5 南北路口計時顯示初值5s
lcall display..
.state1: 狀態1
setb led_g1 綠燈1亮 東西路口路燈亮
clr led_y1 黃燈1滅
clr led_r1 紅燈1滅
clr led_g2 綠燈2滅
clr led_y2 黃燈2滅
setb led_r2 紅燈2滅 南北路口紅燈亮
ret...
display: 數碼管顯示(相當於讀秒)兩個顯示器同時顯示秒
mov a,second1 東西路口計時暫存器
mov b,#10
div ab
mov dbuf+3,a
mov a,b
mov dbuf+2,a
mov second2 南北路口計時暫存器
mov b,#10
diy ab
mov dbuf+1,a
mov a,b
mov dbuf,a
mov r0,#dbuf
mov r1,#temp
mov r7,#4
dp10:mov dpotr,#ledmap 查表,讀出對應顯示碼段
mov a,@r0
movc a,@a+dptr
mov @r1,a
inc r0
inc r1
djnz r7,dp10
mov r0,#temp
mov r1,#4
dp12:mov r7,#8
mov a,@r0
dp13:rlc a
mov p3.0,c 這段是硬體介面,送出顯示的碼段
clr p3.1
setb p3.1
djnz r7,dp13
inc r0
djnz r1,dp12
retlenmap:db 3fh,06h,5bh,4fh,66h,6dh 此段為顯示用的真值表(針對不同硬體不一樣)
db 7dh,07h,7fh,6fh
org 0200h
2樓:匿名使用者
給你一個更加完整的程式
second1 equ 30h ;東西路口計時暫存器
second2 equ 31h ;南北路口計時暫存器
led_g1 bit p2.2 ;東西路口綠燈
led_y1 bit p2.3 ;東西路口黃燈
led_r1 bit p2.4 ;東西路口紅燈
led_g2 bit p2.5 ;南北路口綠燈
led_y2 bit p2.6 ;南北路口黃燈
led_r2 bit p2.7 ;南北路口紅燈
org 0000h
ljmp start
org 0100h
start: mov tmod,#01h ;置t0為工作方式1
mov th0,#3ch ;置t0定時初值50ms
mov tl0,#0b0h
clr tf0
setb tr0 ;啟動t0
clr a
mov p1,a ;關閉不相關的led
loop: mov r2,#20 ;置1s計數初值,50ms*20=1s
mov r3,#20 ;紅燈亮20s
mov second1,#25 ;東西路口計時初值25s
mov second2,#25 ;南北路口計時初值25s
lcall display
lcall state1 ;呼叫狀態1
wait1: jnb tf0,wait1 ;查詢50ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值50ms
mov tl0,#0b0h
djnz r2,wait1 ;判斷1s到否?未到繼續狀態1
mov r2,#20 ;置50ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait1 ;狀態1維持20s
mov r2,#5 ;置50ms計數初值 5*4=20
mov r3,#3 ;綠燈閃3s
mov r4,#4 ;閃爍間隔200ms
mov second1,#5 ;東西路口計時初值5s
mov second2,#5 ;南北路口計時初值5s
lcall display
wait2: lcall state2 ;呼叫狀態2
jnb tf0,wait2 ;查詢50ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值50ms
mov tl0,#0b0h
djnz r4,wait2 ;判斷200ms到否?未到繼續狀態2
cpl led_g1 ;東西綠燈閃
mov r4,#4 ;閃爍間隔200ms
djnz r2,wait2 ;判1s到否?未到繼續狀態2
mov r2,#5 ;置50ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait2 ;狀態2維持3s
mov r2,#20 ;置50ms計數初值
mov r3,#2 ;黃燈閃2s
mov second1,#2 ;東西路口計時初值2s
mov second2,#2 ;南北路口計時顯示2s
lcall display
wait3: lcall state3 ;呼叫狀態3
jnb tf0,wait3 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r2,wait3 ;判斷1s到否?未到繼續狀態3
mov r2,#20 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait3 ;狀態3維持2s
mov r2,#20 ;置50ms計數初值
mov r3,#20 ;紅燈閃20s
mov second1,#25 ;東西路口計時初值25s
mov second2,#25 ;南北路口計時初值25s
lcall display
wait4: lcall state4 ;呼叫狀態4
jnb tf0,wait4 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r2,wait4 ;判斷1s到否?未到繼續狀態4
mov r2,#20 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait4 ;狀態4維持20s
mov r2,#5 ;置50ms計數初值
mov r4,#4 ;紅燈閃20ms
mov r3,#3 ;綠燈閃3s
mov second1,#5 ;東西路口計時初值5s
mov second2,#5 ;南北路口計時初值5s
lcall display
wait5: lcall state5 ;呼叫狀態5
jnb tf0,wait5 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r4,wait5 ;判斷200ms到否?未到繼續狀態5
cpl led_g2 ;南北綠燈閃
mov r4,#4 ;閃爍200ms
djnz r2,wait5 ;判斷1s到否?未到繼續狀態5
mov r2,#5 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait5 ;狀態5維持3s
mov r2,#20 ;置50ms計數初值
mov r3,#2 ;紅燈閃2s
mov second1,#2 ;東西路口計時初值2s
mov second2,#2 ;南北路口計時初值2s
lcall display
wait6: lcall state6 ;呼叫狀態6
jnb tf0,wait6 ;查詢100ms到否
clr tf0
mov th0,#3ch ;恢復t0定時初值100ms
mov tl0,#0b0h
djnz r2,wait6 ;判斷1s到否?未到繼續狀態6
mov r2,#20 ;置100ms計數初值
dec second1 ;東西路口時間減1s
dec second2 ;南北路口時間減1s
lcall display
djnz r3,wait6 ;狀態6維持2s
ljmp loop ;大迴圈
state1: ;狀態1
setb led_g1 ;東西路口綠燈亮
clr led_y1
clr led_r1
clr led_g2
clr led_y2
setb led_r2 ;南北路口紅燈亮
retstate2: ;狀態2
clr led_y1
clr led_r1
clr led_g2
clr led_y2
setb led_r2 ;南北路口紅燈亮
retstate3: ;狀態3
clr led_g1
clr led_r1
clr led_g2
clr led_y2
setb led_r2 ;南北路口紅燈亮
setb led_y1 ;東西路口綠燈亮
retstate4: ;狀態4
clr led_g1
clr led_y1
setb led_r1 ;東西路口紅燈亮
setb led_g2 ;南北路口綠燈亮
clr led_y2
clr led_r2
retstate5: ;狀態5
clr led_g1
clr led_y1
setb led_r1 ;東西路口紅燈亮
clr led_y2
clr led_r2
retstate6: ;狀態6
clr led_g1
clr led_y1
setb led_r1 ;東西路口紅燈亮
clr led_g2
clr led_r2
setb led_y2 ;南北路口紅燈亮
retledmap:
db 3fh,06h,5bh,4fh,66h,6dh ;0,1,2,3,4,5
db 7dh,07h,7fh,6fh,77h,7ch ;6,7,8,9,a,b
db 58h,5eh,7bh,71h,0,40h ;c,d,e,f, ,-end
請高手幫小弟設計簡單的微控制器程式
用一個帶感測器裝置區分白球 低電平 和黑球 高電平 每2秒探測一次,在探測到一次黑球時執行動作。org 0000h ajmp main org 0030h main mov a 01h mov p1.0 a jn p1.0 loop1 lalcal delay1 loop1 ajmp loop2 執...
微控制器專案的開發流程,微控制器應用程式的開發步驟是什麼?
開發流程如下 1 cpu開發。開發微控制器中的cpu匯流排寬度,能夠有效完善微控制器資訊處理功能緩慢的問題,提高資訊處理效率與速度,開發改進 處理器的實際結構,能夠做到同時執行2 3個cpu,從而大大提高微控制器的整體效能。2 程式開發。嵌入式系統的合理應用得到了大力推廣,對程式進行開發時要求能夠自...
微控制器序列不能傳送資料,求指點。程式如下
問題很簡單,也很多!首先你已經開串列埠中斷也就是es 1,需要相應的串列埠中斷服務程式,其次et1不需要51定時器1方式2就是用作串列埠通訊波特率的,最後你定義的unsigned char table 直接這樣傳送你不可以的,如果需要傳送漢字建議直接呼叫stdio標準輸入輸出庫中的printf函式,...