您的位置:網(wǎng)站首頁 > 電器維修資料網(wǎng) > 正文 >
匯編電子鐘的設(shè)計(jì)編程
來源: 日期:2013-12-12 11:13:49 人氣:標(biāo)簽:
先來個(gè)效果圖:
mini_second equ 30h ;設(shè)置0.05秒、秒、分、時(shí)的地址
second equ 31h
minute equ 32h
clock equ 33h
k1 equ p3.2 ;設(shè)置按鍵地址,為外部中斷口int0和int1
k2 equ p3.3
org 0000h
ljmp start
org 000bh
ljmp t0_x ;使用中斷計(jì)時(shí)
org 0050h
start: mov mini_second,#00h ;清零
mov second,#00h
mov minute,#00h
mov clock,#00h
mov tmod,#01h ;置工作方式1,開定時(shí)器
mov th0,#3ch
mov tl0,#0b0h
setb ea
setb et0
setb tr0
start1: lcall show_led ;主程序跳轉(zhuǎn)程序顯示
lcall key_d ;置數(shù)程序
ljmp start1 ;一直循環(huán)顯示
t0_x:
push acc ;保護(hù)現(xiàn)場(chǎng)
push psw
mov th0,#3ch ;置初值,這個(gè)不是很準(zhǔn)確,
mov tl0,#0b4h ;估計(jì)一分鐘慢個(gè)2~3秒
inc mini_second
mov a,mini_second
cjne a,#20,ret0 ;20次為1秒,沒有20次均跳出中斷重新跳
mov mini_second, #00h
mov a,second
add a,#01h
da a
mov second,a
cjne a,#60h,ret0 ;1秒后出循環(huán),每秒后秒清零,跳到分計(jì)時(shí)加1
mov second,#00h
mov a,minute
add a,#01h ;分同秒
da a
mov minute,a
cjne a,#60h,ret0
mov minute,#00h
mov a,clock
add a,#01h
da a
mov clock,a
cjne a,#24h,ret0
mov clock,#00h
ret0: pop psw ;結(jié)束保護(hù),跳出
pop acc
reti
nop
nop
nop
;======================================顯示子程序
show_led:
mov a,second ;個(gè)位秒顯示
anl a,#0fh
mov 40h,a
clr p1.5 ;片選數(shù)碼管
clr p1.6
setb p1.7
mov a,40h
lcall led_x
lcall delay
mov a,second ;十位秒顯示
anl a,#0f0h
swap a
mov 41h,a
setb p1.5
clr p1.6
setb p1.7
mov a,41h
lcall led_x
lcall delay
mov a,minute ;個(gè)位分顯示
anl a,#0fh
mov 42h,a
setb p1.5
setb p1.6
setb p1.7
mov a,42h
lcall led_x
lcall delay
mov a,minute ;十位分顯示
anl a,#0f0h
swap a
mov 43h,a
clr p1.5
clr p1.6
clr p1.7
mov a,43h
lcall led_x
lcall delay
mov a,clock ;個(gè)位時(shí)顯示
anl a,#0fh
mov 44h,a
clr p1.5
setb p1.6
clr p1.7
mov a,44h
lcall led_x
lcall delay
mov a,clock ;十位時(shí)顯示
anl a,#0f0h
swap a
mov 45h,a
setb p1.5
setb p1.6
clr p1.7
mov a,45h
lcall led_x
lcall delay
ret
led_x: mov dptr,#led_data
movc a,@a+dptr
mov p0,a
ret
;====================================延遲子程序
delay: mov r7,#10
de1: mov r6,#100 ;延時(shí)1ms多一點(diǎn),因?yàn)榫д駷?1.0592mhz
djnz r6,$
djnz r7,de1
ret
;===================================數(shù)碼管的段選碼
led_data: db 0c0h,0f9h,0a4h,0b0h,099h,92h,82h,0f8h,80h,90h
;=====================================置數(shù)子程序
key_d: jnb k1,key1
jnb k2,key2
ret
key1: mov a,minute ;查詢方式 ————> 分位置數(shù)
clr c ;清零進(jìn)位,防止干擾da和cjne指令的操作
inc a ;累加器自加一 ,此為加法置數(shù)
da a ;十進(jìn)制處理
cjne a, #60h, k_01 ;判斷是否為60,為60清零,跳出
mov a,#00h
k_01: mov minute,a
jnb k1,$
ret
key2: mov a,clock ;時(shí)位 置數(shù)同上
clr c
inc a
da a
cjne a, #24h,k_11
mov a,#00h
k_11: mov clock,a
jnb k2,$
ret
本程序如有雷同,純屬不可能 ?
我的不夠成熟或稱之為幼稚的匯編編程,鄭文老師的獨(dú)特學(xué)習(xí)板子(顯示數(shù)碼管是p0口,片選竟然是用p1口3個(gè)i/o口接138,——!這個(gè)獨(dú)特焊接方式讓我程序?qū)懙眠@么長(zhǎng)),鄭子含老師對(duì)我置數(shù)程序的修改,才出來的程序,雖然不是什么成功,至少是一個(gè)開始,我會(huì)繼續(xù)瘋下去的。這個(gè)時(shí)鐘的弊端挺多的,比如置數(shù)的時(shí)候,會(huì)有閃屏現(xiàn)象,程序我會(huì)再改進(jìn)的。 ?
后記:對(duì)于院系電子設(shè)計(jì)競(jìng)賽我的失敗我得向我的組員道歉,雖然我知道那些所謂成功的幾組也比我們好不到哪里去(看過答辯了),但是我會(huì)繼續(xù)我們的課題,加油吧 ?
編譯工具:wave6000 ?
燒制工具:stc-isp(話說國(guó)產(chǎn)的stc公司要統(tǒng)一全球51市場(chǎng),呵呵) 、rs232串口
【看看這篇文章在百度的收錄情況】