1樓:匿名使用者
keyval equ 30h
keytm equ 31h
keyscan equ 32h
dat equ 33h
scanled equ 37h
s_dat equ 38h
d_dat equ 39h
r_datl equ 3ah
r_dath equ 3bh
calflag equ 3ch
flag bit 00h
org 0000h
ljmp main
org 000bh
ljmp t0isr
org 0030h
main:
mov sp,#5fh
mov tmod,#01h
mov th0,#0d8h
mov tl0,#0f0h
mov keyval,#0
mov p2,#00h
mov scanled,#0
mov 33h,#0h
mov 34h,#0h
mov 35h,#0h
mov 36h,#0h
mov s_dat,#0
mov d_dat,#0
clr flag
setb ea
setb et0
setb tr0
loop:
lcall keysel
mov a,keyval
cjne a,#0ffh,loop1
sjmp loop
loop1:
cjne a,#11,loop2 ;「=」
mov a,33h
mov b,#10
mul ab
add a,34h
mov d_dat,a
lcall dealdat
lcall hb2
mov a,r5
anl a,#0fh
mov 34h,a
mov a,r5
swap a
anl a,#0fh
mov 33h,a
mov a,r4
anl a,#0fh
mov 36h,a
mov a,r4
swap a
anl a,#0fh
mov 35h,a
sjmp loop
loop2:
cjne a,#15,loop3 ;「+」
lcall getdat
sjmp loop
loop3:
cjne a,#14,loop4 ;「-」
mov calflag,#1
lcall getdat
sjmp loop
loop4:
cjne a,#13,loop5 ;「*」
mov calflag,#2
lcall getdat
sjmp loop
loop5:
cjne a,#12,loop6 ;"/"
mov calflag,#3
lcall getdat
sjmp loop
loop6:
cjne a,#10,loop7 ;數字鍵loop7:
jc loop8
ljmp loop
loop8:
mov 33h,34h
mov 34h,keyval
ljmp loop
hb2:
mov r6,r_dath
mov r7,r_datl
clr a ;bcd碼初始化
mov r3,a
mov r4,a
mov r5,a
mov r2,#10h ;轉換雙位元組十六進位制整數hb3:
mov a,r7 ;從高階移出待轉換數的一位到 cy 中rlc a
mov r7,a
mov a,r6
rlc a
mov r6,a
mov a,r5 ;bcd碼帶進位自身相加,相當於乘2addc a,r5
da a ;十進位制調整
mov r5,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r3
addc a,r3
mov r3,a ;雙位元組十六進位制數的萬位數不超過6,不用調整djnz r2,hb3 ;處理完16bitretgetdat:
mov a,33h
mov b,#10
mul ab
add a,34h
mov s_dat,a
mov 33h,#0
mov 34h,#0
mov 35h,#0
mov 36h,#0
retdealdat:
mov a,calflag
jnz deal01
deal00: ;+
mov a,s_dat
add a,d_dat
mov r_datl,a
clr a
addc a,#0
mov r_dath,a
retdeal01: ;=
dec a
jnz deal02
clr c
mov a,s_dat
subb a,d_dat
mov r_datl,a
subb a,#0
mov r_dath,a
retdeal02: ;*
dec a
jnz deal03
mov a,s_dat
mov b,d_dat
mul ab
mov r_datl,a
mov r_dath,b
retdeal03: ;/
mov a,s_dat
mov b,d_dat
div ab
mov r_datl,a
mov r_dath,#0
retkeysel:
mov keyval,#0
mov keyscan,#0efh
lcall getkey
mov a,keytm
jz keys1
mov keyval,a
sjmp keyrtn
keys1:
mov keyscan,#0dfh
lcall getkey
mov a,keytm
jz keys2
clr c
add a,#4
mov keyval,a
sjmp keyrtn
keys2:
mov keyscan,#0bfh
lcall getkey
mov a,keytm
jz keys3
clr c
add a,#8
mov keyval,a
sjmp keyrtn
keys3:
mov keyscan,#7fh
lcall getkey
mov a,keytm
jz keyrtn
clr c
add a,#12
mov keyval,a
keyrtn:
lcall chgkey
retgetkey:
mov keytm,#0
mov a,keyscan
mov p3,a
nopmov a,p3
anl a,#0fh
xrl a,#0fh
jz nokey
mov r2,#10
lcall delay
mov a,p3
anl a,#0fh
xrl a,#0fh
jz nokey
mov a,p3
anl a,#0fh
mov r7,a
sf:mov a,p3
anl a,#0fh
xrl a,#0fh
jnz sf
mov a,r7
cjne a,#0eh,nk1
mov keytm,#1
sjmp nokey
nk1:
cjne a,#0dh,nk2
mov keytm,#2
sjmp nokey
nk2:
cjne a,#0bh,nk3
mov keytm,#3
sjmp nokey
nk3:
cjne a,#07h,nokey
mov keytm,#4
nokey: ret
delay:
mov r3,#50
delay1:
mov r4,#100
djnz r4,$
djnz r3,delay1
djnz r2,delay
rett0isr:
push acc
clr tr0
mov th0,#0d8h
mov tl0,#0f0h
setb tr0
mov dptr,#ledtab
t000: ;數字顯示
mov r0,#dat
mov a,scanled
add a,r0
mov r0,a
mov a,scanled
jnz t001
mov p2,#01h
sjmp t0dis
t001:
dec a
jnz t002
mov p2,#02h
sjmp t0dis
t002:
dec a
jnz t003
mov p2,#04h
sjmp t0dis
t003:
mov p2,#08h
t0dis:
mov a,@r0
movc a,@a+dptr
; cpl a
mov p0,a
inc scanled
mov a,scanled
anl a,#03h
mov scanled,a
pop acc
reti
chgkey:
mov a,keyval
jz kv16
dec a
jnz kv01
mov keyval,#7
retkv01:
dec a
jnz kv02
mov keyval,#4
retkv02:
dec a
jnz kv03
mov keyval,#1
retkv03:
dec a
jnz kv04
mov keyval,#10
retkv04:
dec a
jnz kv05
mov keyval,#8
retkv05:
dec a
jnz kv06
mov keyval,#5
retkv06:
dec a
jnz kv07
mov keyval,#2
retkv07:
dec a
jnz kv08
mov keyval,#0
retkv08:
dec a
jnz kv09
mov keyval,#9
retkv09:
dec a
jnz kv10
mov keyval,#6
retkv10:
dec a
jnz kv11
mov keyval,#3
retkv11:
dec a
jnz kv12
mov keyval,#11 ;=
retkv12:
dec a
jnz kv13
mov keyval,#12 ;/
retkv13:
dec a
jnz kv14
mov keyval,#13 ;*
retkv14:
dec a
jnz kv15
mov keyval,#14 ;-
retkv15:
dec a
jnz kv16
mov keyval,#15 ;+
retkv16:
mov keyval,#0ffh
retledtab:
db 0c0h ;"0" 00h
db 0f9h ;"1" 01h
db 0a4h ;"2" 02h
db 0b0h ;"3" 03h
db 99h ;"4" 04h
db 92h ;"5" 05h
db 82h ;"6" 06h
db 0f8h ;"7" 07h
db 80h ;"8" 08h
db 90h ;"9" 09h
db 88h ;"a" 0ah
db 83h ;"b" 0bh
db 0c6h ;"c" 0ch
db 0a1h ;"d" 0dh
db 86h ;"e" 0eh
db 8eh ;"f" 0fh
db 0ffh ;" " 10hend
at89s51微控制器內部包含哪些主要邏輯功能部件各部分的功
微控制器 microcontrollers 是一種bai積體電路晶片,du是採用zhi超大規模積體電路技術把具有dao資料處理能回 力的 處理器答cpu 隨機儲存器ram 只讀儲存器rom 多種i o口和中斷系統 定時器 計數器等功能 可能還包括顯示驅動電路 脈寬調製電路 模擬多路轉換器 a d轉換...
51微控制器混合程式設計,51微控制器程式設計時彙編和C語言如何結合?
51微控制器程式設計時彙編和c語言如何結合?51系列微控制器混合程式設計時候 c語言定義的變數如何傳遞到組合語言?10 一般建議在組合語言裡定義變數,c語言的變數受很多因素影響,不一定都可以傳遞給彙編。大部分c語言全域性變數可以直接在彙編中使用,區域性變數不是特別熟悉不要亂用,容易受到優化的影響。一...
AT89C51微控制器和8051微控制器引腳是否相同?還有哪些相同點
相同,只不過at上多了一些第二功能 理論上是可以的,它包含了8051了。都是51系列的 我現在還用8031的原理相簿呢 肯定是可以的,沒有問題 at89c51微控制器和8051微控制器一樣嗎 mcs 51微控制器是指bai美國intel公司生產的一系列du微控制器的總稱。zhi這一系列包dao含80...