3、实训进度安排
(1)第一天上午:布置任务、分组、确定题目。
(2)第一天下午和晚上:查找资料确定方案,画出系统组成框图、硬件电路图、软件流程图。
(3)第二天上午:同步进行元件购买和软件设计
(4)第二天下午和晚上:同步进行软件设计与电路焊接
(5)第三天上午:同步进行软件设计与电路焊接
(6)第三天下午和晚上:同步进行软件仿真调试和电路调试
(7)第四天上午:软硬件联调
(8)第四天下午和晚上:软硬件联调,撰写实训报告(每组一份)
(9)第五天上午和下午:产品测试与答辩
通过本次课程设计的实践,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。也进一步掌握简单单片机应用系统的设计、制作、调试的方法。同时还提高自身的动手实践能力和科学的思维能力。
同时值得一提的是,在此设计过程中,就对时分之间的点闪烁体现是用查表输出形式实现的,由于本系统设计是采用74LS164驱动数码管,只有一个数据信号输入口,所以不能对数码管进行“位”控,只能对数码管的整体显示进行控制。所以每秒内至少需两次数据输出并显示,第一次输出显示的数的小数点都不亮,第二次输出显示的数(数的值不变)中第三个数码管的数的小数点亮,两者交替输出显示,即可实现点时分之间的点闪烁。在具体实现过程中是用查表方式实现,即在第二次输出显示时,把R3的值加10,既R3查表所得的值是TAB表格中第二排数值(参看程序清单),而第二排数值所对应显示的数都是小数点亮的,在此次输出显示完成后,再把R3减10,返回原来的值并继续进行计时。另外在设计按钮时,一开始遇到的难题是:按一下按钮,时或分所加的数值并不为1,加的数为不确定值,最后经过研究,使设计程序在查询P1.2,P1.3端口时,若检测到高电平时需延迟20ms左右后,再进行二次检测,以消除按钮的抖动干扰,使之按一下能正确调节时分进行加1调整(参看程序清单)。最后值得总结的是,在程序设计过程中还存在很多细节上的问题,如因为没有对进位标志位CY清零,在其他程序都正确的情况下却始终调不出正确满意的结果,最后费了很多时间精力去查找寻错,才得以解决,这使我认识到在程序设计过程中,平时必须加强对一些细小环节的重视,这样才能在真正程序设计时能做到正确快速的调试成功。总的说来,这次课程设计收益匪浅,通过认真思考、查找资料,以及和同学、老师的探讨,解决了很多问题,同时也增长了很多在课堂上学不到的知识。
;中断向量程序段
org 0000h
ajmp start
org 000bh ;定时器T0中断向量地址
ajmp dingshi
org 001bh ;定时器T0中断向量地址
ajmp ds
;*********************************************
;初始化程序段
org 0030h
start: mov sp,#30h
mov tmod,#11h ;定时器设置
mov th0,#3ch ;定时1秒
mov tl0,#0b0h
mov iE,#8ah ;打开定时中断
mov p1,#00h
setb tr0
;*********************************************
;主程序段
main: mov p1,#00h
mov a,p1
jb acc.3,proc3 ;查询P1.3端口电压
jb acc.2,proc2 ;查询P1.2端口电压
ajmp main
;*********************************************
;二次检测P1.3,P1.2端口电平
proc3: acall delay0 ;延时20ms
mov p1,#00h
mov a,p1
jb acc.3,jiafen
ret
proc2: acall delay0 ;延时20ms
mov p1,#00h
mov a,p1
jb acc.2,jiashi
ret
;*********************************************
;调节分子程序
jiafen: clr p1.3
mov ie,#00h
clr tr0
inc r1
cjne r1,#0ah,xianshi0 ;十进位
mov r1,#00h
inc r2
cjne r2,#06h,xianshi0 ;六进位
mov r2,#00h
xianshi0:acall show
mov ie,#8ah ;打开TO,T1中断
setb tr0 ;使T0开始计时
ret
;*********************************************
; 调节时子程序
jiashi: clr p1.2
mov ie,#00h
clr tr0
cjne r4,#02h,sjw ;判断R4是否为2
;*******
;二十四清零
inc r3
cjne r3,#04h,xianshi1 ;四进位
mov r3,#00h
inc r4
cjne r4,#03h,xianshi1 ;三进位
mov r4,#00h
ajmp xianshi1
;********
sjw: inc r3
cjne r3,#0ah,xianshi1 ; 十进位
mov r3,#00h
inc r4
cjne r4,#03h,xianshi1 ;三进位
mov r4,#00h
xianshi1:acall show
mov ie,#8ah ;打开TO,T1中断
setb tr0 ;使T0开始计时
ret
;*********************************************
;TO产生中断计时子程序
dingshi:mov th1,#0ffh ;T1赋初值(可任意值)
mov tl1,#0feh
mov th0,#3ch ;T0赋初值(定时0.1s)
mov tl0,#0b0h
inc r6
cjne r6,#0ah,dings0 ; 十进位
mov r6,#00h
setb et1
setb tr1
inc r5
cjne r5,#3ch,dings4 ; 60进位
mov r5,#00h
inc r1
cjne r1,#0ah,dings4 ; 十进位
mov r1,#00h
inc r2
cjne r2,#06h,dings4 ; 六进位
mov r2,#00h
cjne r4,#02h,sjw ;判断R4是否为2
;*******
;二十四清零
inc r3
cjne r3,#04h,dings4 ; 四进位
mov r3,#00h
inc r4
cjne r4,#03h,dings4 ; 三进位
mov r4,#00h
ajmp dings4
;*******
sjw: inc r3
cjne r3,#0ah,dings4 ; 十进位
mov r3,#00h
inc r4
cjne r4,#03h,dings4 ; 三进位
mov r4,#00h
dings4: acall show
dings0: reti
;*********************************************
;T1中断子程序
ds: clr tr1
acall delay ;延时约0.5s
;*******
;R3加10
mov a,#0ah
add a,r3
mov r3,a
acall show
;*******
; R3减10
mov a,r3
clr c ;特别注意在减法操作时应清除CY标志位
subb a,#0ah
clr c
mov r3,a
reti
;*********************************************
;显示子程序
show: mov dptr,#Tab
mov 70h,#04h ; 显示的位数
mov r0,#01h ;先输出R0值
led: mov 71h,#08h
mov a,@r0
movc a,@a+dptr
setb p1.1 ;P1.1 时钟信号
tart: rlc a
nop
mov p1.0,c ;P1.0 数据信号
nop
clr p1.1
nop
setb p1.1
djnz 71h,tart
inc r0 ;进行加1,分别输出R2,R3,R4的值
djnz 70h,led
ret
;*********************************************
;延时约20ms子程序
delay0: mov 75h,#4eh
loop01: mov 76h,#0ffh
loop02: nop
djnz 76h,loop02
djnz 75h,loop01
ret
;*********************************************
;延时约0.5S子程序
delay: mov 74h,#03h
loop0: mov 73h,#0ffh
loop1: mov 72h,#0ffh
loop2: nop
djnz 72h,loop2
djnz 73h,loop1
djna 74h,loop0
ret
;*********************************************
; 本表为显示数据表
Tab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
;“0,1,2,3,4,5,6,7,8,9”
db 0bfh,86h,0dbh,0cfh,0e6h,0edh,0fdh,87h,0ffh,0efh
;带有小数点显示的“0,1,2,3,4,5,6,7,8,9”
;*********************************************
end
