注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! 打开购物车 查看留言付款方式联系我们
初中电子 单片机教材一 单片机教材二
搜索上次看见的商品或文章:
商品名、介绍 文章名、内容
首页 电子入门 学单片机 免费资源 下载中心 商品列表 象棋在线 在线绘图 加盟五一 加入收藏 设为首页
本站推荐:
★六位数显电子钟加24路输出
文章长度[9288] 加入时间[2006/7/27] 更新时间[2024/3/17 2:29:39] 级别[3] [评论] [收藏]
org 00h
jmp con
ORG 03H
JMP TE0
ORG 0BH
JMP TT0
ORG 13H
JMP TE1
ORG 1BH
JMP TT1
ORG 23H
call out24
con:
MOV TMOD,#00010010B;T0工作在8位自动重装计数器模式
mov th0,#8
setb tr0
setb et0
setb et1
setb ea
mov 3fh,#1;定时总路数,默认为第1路
;mov 92h,#11111111b;大电流输出
;mov 0b2h,#11111111b;大电流输出
mov 39h,#00;工作模式0=走时模式1=校时模式2=定时模式3=误差模式
mov r2,#0;设定默认的闪动模式
mov r1,#15;设定长按键的时间
mov r3,#30;设定不按键的最长时间
mov 5bh,#126;设定响铃的最短时间
mov a,3eh
cjne a,#51,setup
jmp main
setup:;冷启动时才加载默认值
mov 36h,#12;时默认值
mov 37h,#59;分默认值
mov 38h,#40;秒默认值
clr 5ah;设置是否闹时
clr 59h;设置是否整点闹时
setb 58h;设置是否秒点闹时
mov r0,#7fh;定时默认值24:30
dsmr:
mov @r0,#24
inc r0
mov @r0,#30
inc r0
cjne r0,#0ffh,dsmr

mov r0,#7fh
mov @r0,#13
inc r0
mov @r0,#01
inc r0

mov @r0,#13
inc r0
mov @r0,#03
inc r0

main:mov 3eh,#51
call clock
call cup
call hled
call sound

MOV 5CH,#10
nop
nop
nop
nop
nop
djnz 3eh,$
;djnz 5ch,$-8


call disp ;LED数码显示
call key
call run
jmp main


tt0:
push acc
push psw
;inc 60h
;mov a,60h
;cjne a,#6,t0end
;mov 60h,#0

inc r7
cjne r7,#254,t0end
mov r7, #86
setb 55h
jnb 5fh,t0end;是否需要校正
clr 5fh;校正过清除标志
mov a,r7
jb 5eh,jias
subb a,55h
jmp wcend
jias:add a,55h
wcend:mov r7,a
t0end:pop psw
pop acc
reti

clock:
jnb 55h,eeeee;检查中断计数标志
clr 55h
cpl 56h
jnb 56h, eeeee;一次延时
cpl 57h
jnb 57h, eeeee;二次延时
;cpl p3.7
cpl p0.0
cpl p0.1
jnb p0.0, eeeee;三次延时
inc 38h ;时钟程序秒加1

call out24




mov r0,5ah;看现在有没有响铃中
cjne r0,#0,ssound;如果正逢闹铃则秒不响
jnb 58h,ssound;如果禁止秒响则秒不响
mov 5ah,#1;是否秒响

ssound:mov r6,38h;检查60秒就要分加1
cjne r6,#60,eeeee
mov 38h,#0
ck1:inc 37h;分是整数,先校正时间
setb 5fh;每分钟校正一次数据,高电平表示可以校正
mov r6,37h;检查分是否到了60
cjne r6,#60,cend
mov 37h,#0

;mov r0,5ah;看现在有没有响铃中
;cjne r0,#0,ck2;如果正逢闹铃则秒不响

jb 59h,ck2;如果禁止整点响则不响
mov 5ah,#25

ck2:inc 36h
mov r6,36h;检查小时是否到了24
cjne r6,#24,cend
mov 36h,#0
cend:

jb 5ah,eeeee;如果禁止响闹就跳到结尾,后面为比较定时时间

mov r0,#7eh;装入定时初始值,7FH装入的是第一个小时值
dschk:
inc r0;检查定时
mov a,@r0
inc r0
cjne r0,#0feh,dschk0;
jmp eeeee
dschk0:cjne a,36h,dschk;小时是否相等,小时相等就检查分钟
mov a,@r0
cjne a,37h,dschk;分钟也相等的话就装入闹时值,否则检查下一个时间
mov 5ah,#250
eeeee:ret

tt1:reti

te0:reti

te1:reti



cup:
mov 3ah,36h
mov 3bh,37h
mov 3ch,38h
mov a,39h
cjne a,#20,ms1up;是否要显示定时路数和时间

mov 3ah,3fh
mov a,#7dh
add a,3fh
add a,3fh
mov r0,a
mov 3bh,@r0
inc r0
mov 3ch,@r0

mov a,39h
ms1up:cjne a,#30,msup;是否要示误差校正时间
mov 3ch,55h
msup:mov a,3ch
mov b,#10
div ab ;将秒计算后送入显示缓存
mov 30h,b
mov 31h,a
mov a,3bh
mov b,#10
div ab ;将分计算后送入显示缓存
mov 32h,b
mov 33h,a
mov a,3ah
mov b,#10
div ab ;将小时计算后送入显示缓存
mov 34h,b
mov 35h,a
ret

hled:
mov a,39h
cjne a,#10,ms1
jb 56h,ms1
cjne r2,#0,h1
mov 35h,#11
mov 34h,#11
h1:cjne r2,#1,h2
mov 33h,#11
mov 32h,#11
h2:cjne r2,#2,ms1
mov 31h,#11
mov 30h,#11
ms1:cjne a,#20,ms2
jnb 57h,ms2
cjne r2,#0,h21
mov 35h,#11
mov 34h,#11
h21:cjne r2,#1,h22
mov 33h,#11
mov 32h,#11
h22:cjne r2,#2,ms2
mov 31h,#11
mov 30h,#11
ms2:cjne a,#30,hend
jb 5eh,h31
mov 35h,#12
mov 34h,#12
mov 33h,#12
mov 32h,#12
jmp hend
h31: mov 35h,#13
mov 34h,#13
mov 33h,#13
mov 32h,#13
hend:ret




disp:
anl p0,#00000011b
mov p1,#0ffh

cjne r5,#6,ds0;r5等于显示的当前LED,r5的值不能随意改变
mov r5,#0
ds0:inc r5
cjne r5,#1,ds1
setb p0.7
mov a,30h
call ledtab
ds1:cjne r5,#2,ds2
setb p0.6
mov a,31h
jmp ledtab
ds2:cjne r5,#3,ds3
setb p0.5
mov a,32h
jmp ledtab
ds3:cjne r5,#4,ds4
setb p0.4
mov a,33h
jmp ledtab
ds4:cjne r5,#5,ds5
setb p0.3
mov a,34h
jmp ledtab
ds5:cjne r5,#6,edisp
setb p0.2
mov a,35h
jmp ledtab
edisp:
ret
ledtab:
nokey:
;jb p1.7, kk ;检查按键是否按下
;mov 40h,r5 ;按键按下取键值
kk:mov dptr,#table
movc a,@a+dptr
cpl a
mov p1,a
jmp edisp

sound:mov r0,5ah
cjne r0,#0,yyyy
jmp soundend
yyyy:
;clr p1.7
djnz 5bh,soundend
mov 5bh,#126
dec 5ah
soundend:ret




key:
cpl p2.0
jb p2.0,kend



mov 40h,#0
k0:jb p3.2,k1
mov 40h,#6
k1:jb p3.3,k2
mov 40h,#4
k2:jb p3.4,k3
mov 40h,#3

k3:mov r6,40h
cjne r6,#0,kset;不等于0说明有按键按下,分别设定有键无键的最长时间
mov r1,#20;设定长按键时间一般为2-3秒
clr 51h;按键放开中
jmp ksetend
kset:mov r3,#200;设定不按键的最长等待时间,一般为10-30秒
setb 51h;按键中
mov a,39h
add a,r6
mov r4,a;
ksetend:djnz 56h,kend;检查长按键延时用
mov 56h,#25;根据时钟频率来确定延时程度

cjne r6,#0,long1;不等于0说明有按键按下,分别求出有键按和无键按的时间
djnz r3,kend
mov 39h,#0;10秒钟长时间没有键按下时模式回到正常走时
;clr p3.7
jmp kend

long1:djnz r1,kend
mov a,39h
add a,#10
mov 39h,a;有按键长按2秒以上模式加10
mov r2,#0

;setb p3.7
kend:
kendd:
ret


skey:jmp kend


run:jb 51h,gotoend;按键是否放开,不放开不执行按键程序
jmp run000

gotoend:jmp runend

run000:cjne r4,#6,run011;定时闹功能
clr 58h
cpl 5ah
mov 5ah,#0
jb 5ah,run011
mov 5ah,#1
run011:cjne r4,#3,run012;整点闹功能
clr 58h
cpl 59h
mov 5ah,#0
jb 59h,run012
mov 5ah,#1
run012:cjne r4,#4,run0;秒闹功能
cpl 58h
mov 5ah,#0
run0:cjne r4,#16,run1;校时模式
inc r2;调校时分秒三种情况选择
cjne r2,#3,run1
mov r2,#0

run1:cjne r4,#13,run2;校时加数模式

cjne r2,#0,jj1
inc 36h
mov a,36h
cjne a,#24,jj1
mov 36h,#0
call out24
jj1:cjne r2,#1,jj2
inc 37h
mov a,37h
cjne a,#60,jj2
mov 37h,#0

jj2:cjne r2,#2,run2
inc 38h
mov a,38h
cjne a,#60,run2
mov 38h,#0

run2:cjne r4,#14,run3;校时减数模式
cjne r2,#0,jg1
dec 36h
mov a,36h
cjne a,#255,jg1
mov 36h,#23
call out24
jg1:cjne r2,#1,jg2
dec 37h
mov a,37h
cjne a,#255,jg2
mov 37h,#59

jg2:cjne r2,#2,run3
dec 38h
mov a,38h
cjne a,#255,run3
mov 38h,#59


run3:cjne r4,#26,run4;定时模式
inc r2;定时模式的R2表示选择路数、设定小时和分钟的情况
cjne r2,#3,run4
mov r2,#0
run4:cjne r4,#23,run5;定时模式的加模式

dsjia:cjne r2,#0,dsjia1
inc 3fh
mov a,3fh
cjne a,#65,dsjia1;最大的定时路数
mov 3fh,#1
dsjia1:cjne r2,#1,dsjia2
inc 3bh
mov a,3bh
cjne a,#25,dsup11
mov 3bh,#0
dsup11:call dsup
dsjia2:cjne r2,#2,run5
inc 3ch
mov a,3ch
cjne a,#60,dsup22
mov 3ch,#0
dsup22:call dsup

run5:cjne r4,#24,run6;定时模式的减模式

dsjian:cjne r2,#0,dsjian1
dec 3fh
mov a,3fh
cjne a,#0,dsjian1
mov 3fh,#64;最大的定时路数
dsjian1:cjne r2,#1,dsjian2
dec 3bh
mov a,3bh
cjne a,#0ffh,dsup33
mov 3bh,#24

dsup33:call dsup
dsjian2:cjne r2,#2,run6
dec 3ch
mov a,3ch
cjne a,#0ffh,dsup44
mov 3ch,#59
dsup44:call dsup
run6:cjne r4,#36,run7;误差模式
;inc r2;误差模式的调快还是调慢模式
cpl 5eh
;cjne r2,#2,run7
;mov r2,#0
;clr 5eh

run7:cjne r4,#33,run8;误差模式
inc 55h;误差系数的加法
mov a,55h
cjne a,#81,run8
mov 55h,#0

run8:cjne r4,#34,run9;误差模式
dec 55h;误差系数的减法
mov a,55h
cjne a,#255,run9
mov 55h,#80

run9:cjne r4,#46,run10;响铃模式
mov 39h,#0
run10:cjne r4,#43,run11;响铃模式
mov 39h,#0
run11:cjne r4,#44,run12;响铃模式
mov 39h,#0
run12:cjne r4,#56,run13;到正常模式
mov 39h,#0
run13:cjne r4,#53,run14;到正常模式
mov 39h,#0
run14:cjne r4,#54,rund;到正常模式
mov 39h,#0

rund:mov r4,#0
runend:ret

dsup:;保存定时时间
mov a,#7dh
add a,3fh
add a,3fh
mov r0,a
mov @r0,3bh
inc r0
mov @r0,3ch
ret

table:db 00111111b,00000110b,01011011b,01001111b,01100110b,01101101b,01111101b

   db 00000111b,01111111b,01101111b,00000000b,00000000b,01000000b,01001001b;abcdefgh分别对应01234567

out24:
mov 45h,#0
mov 46h,#0
mov 47h,#0
mov a,36h
out0:cjne a,#0,out1
mov 45h,#1b
out1:cjne a,#1,out2
mov 45h,#10b
out2:cjne a,#2,out3
mov 45h,#100b
out3:cjne a,#3,out4
mov 45h,#1000b
out4:cjne a,#4,out5
mov 45h,#10000b
out5:cjne a,#5,out6
mov 45h,#100000b
out6:cjne a,#6,out7
mov 45h,#1000000b
out7:cjne a,#7,out8
mov 45h,#10000000b
out8:cjne a,#8,out9
mov 46h,#1b
out9:cjne a,#9,out10
mov 46h,#10b
out10:cjne a,#10,out11
mov 46h,#100b
out11:cjne a,#11,out12
mov 46h,#1000b
out12:cjne a,#12,out13
mov 46h,#10000b
out13:cjne a,#13,out14
mov 46h,#100000b
out14:cjne a,#14,out15
mov 46h,#1000000b
out15:cjne a,#15,out16
mov 46h,#10000000b
out16:cjne a,#16,out17
mov 47h,#1b
out17:cjne a,#17,out18
mov 47h,#10b
out18:cjne a,#18,out19
mov 47h,#100b
out19:cjne a,#19,out20
mov 47h,#1000b
out20:cjne a,#20,out21
mov 47h,#10000b
out21:cjne a,#21,out22
mov 47h,#100000b
out22:cjne a,#22,out23
mov 47h,#1000000b
out23:cjne a,#23,outend
mov 47h,#10000000b
outend:
mov scon,#00h
clr ti
mov a,45h
mov sbuf,a
jnb ti,$
clr ti
mov a,46h
mov sbuf,a
jnb ti,$
clr ti
mov a,47h
mov sbuf,a
jnb ti,$

ret

end

1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。
2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! 以上可能是本站收集或者转载的文章,本站可能没有文章中的元件或产品,如果您需要类似的商品请 点这里查看商品列表!
本站协议 | 版权信息 |  关于我们 |  本站地图 |  营业执照 |  发票说明 |  付款方式 |  联系方式
深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102
E-mail:51dz$163.com($改为@);Tel:(0755)27947428
工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389