版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 目录一、实验目的2二、实验要求2三、整体设计方案2 1、总框图及流程2 2、主要子程序框图及说明34、 参考程序65、 调试记录及调试结果166、 系统实现功能及操作说明167、 心得体会16八、附录17 参考文献17 接口电路逻辑图17一、实习目的1、 学会掌握keilc51汇编语言程序的设计和调试。2、 学会将所学的单片机原理的有关知识应用于实践,提高单片机应用于技术的实践操作技能,掌握单片机应用系统设计、研制的方法,培养理论联系实际的学习作风,提高动手能力、分析并解决实际问题的能力。3、 使我们进一步了解掌握所学的专业知识,巩固和深化对单片机的结构、指令系统、中断系统、键盘/显示系统、
2、接口技术、系统扩展、定时/控制、程序设计、应用开发、等基本理论知识的理解。4、 通过设计、分析、调试,培养我们工程意识,激发大家对产品开发的兴趣,及培养对科技革新、开发和创新的基本能力。二、实习要求 本课题为数字钟设置,其效果为能正常显示数字时钟,显示时、分、秒,其中时为24小时制,并且通过合理的按键操作能修改时、分、秒的内容来修改时间。还有闹钟功能,可以给它设定一个时间,到这个时间它就能产生报警信号,并可以随时停止警报,如果不进行任何操作则它将响铃一分钟后自动停止响铃。除此之外还能显示日期,日期分为年、月、日,其显示方式为xxxx年xx月xx日,并且通过合理的按键操作可以任意设置日期时间。三
3、、整体设计方案进入闹铃子程序显示闹铃时间进入闹铃设置子程序显示日期子程序显示日期子程序进入设置日期子程序显示时间子程序进入设置时间子程序判断是否进入显示日期判断是否进入设置时间功能 程序初始化,赋初值程序开始调用子程序,让秒增1,并且当时为24溢出时,让存放天的单元增1 等待1s脉冲到来1、总体框图及流程判断是否进入设置日期判断是否进入闹铃时间设置 判断是否闹铃判断是否停止响铃进入停止响铃子程序调用显示时间子程序 2、主要子程序框图及说明 1、秒增1子程序 2、显示时间子程序框图分别已存好时、分、秒的40h,41h,42h将秒的十位存到78h,将秒的个位存到77h将分的十位存到7ah,将分的个
4、位存到7bh将时的十位存到7dh,将秒时的个位存到7eh给79h和7ch单元存放12h,让它显示-将77h7eh单元的内容在数码管上显示一遍 程序说明在秒增1的子程序里已经做好将秒、分、时分别存放在42h,41h,40h单元当中,在这里就是用div指令分离它们的个位和十位,然后分别存放在要显示的单元当中。退出返回程序预先设置40h,41h,42h分别用来存放时、分、秒让42h单元的内容增1,并判断是否为60溢出让41h单元的内容增1,并判断是否为60溢出让40h单元的内容增1,并判断是否为24溢出让67h单元的内容增1退出返回程序程序说明 本程序的作用为设置时间的工作方式 3、设置时间子程序
5、4、显示日期子程序 程序说明本程序为判断是否进入时间设置程序,并且进入相应设置 程序说明 本程序为显示日期的子程序,里面包含了日期的工作方式子程序 5、日期工作方式子程序 程序说明本程序为日期的工作方式程序,它的结果不能直接显示,要通过一个月份的调整子程序调整才将日期显示出来,因为月份有大、小,有些月份为31天,有些月份为30天,有些则为28天。6、月份调整子程序7、设置闹铃时间子程序 8、响铃子程序程序说明本程序要实现的功能为,当响铃信号来临时让警报响起程序说明本程序要实现的功能就是定时,当闹铃时间与当前时间相等时能实现响铃 八、源程序 org 0000h ajmp main main: l
6、call del mov dptr,#0fe03h ;开片选端 mov a,#81h movx dptr,a mov dptr,#0fd03h ;开片选端 mov a,#8bh movx dptr,a mov 45h,#0 ;设置初始值 mov 44h,#0 mov 43h,#23 ;预先设置显示缓冲区 mov 6eh,#2 mov 6dh,#0 mov 6ch,#1 mov 6bh,#0 mov 6ah,#0 mov 69h,#6 mov 68h,#2 mov 67h,#6 mov tmod,#01h ;设置中断方式 mov 20h,#28h ;设置中断次数 clr a mov 40h,a
7、;闹铃缓冲区预先设置 mov 41h,a mov 42h,a setb et0 mov th0,#0b0h ; 置初值 mov tl0,#3ch setb tr0 here: jnb tf0,here ;判断1秒时间是否来到 clr tf0 lcall it0p ;调用时间增1子程序 lcall change1 ;调用是否进入设置时间子程序 lcall change2 ;调用是否进入显示日期子程序 lcall change3 ;调用是否进入设置日期子程序 lcall naolin ;调用设置闹铃时间子程序 lcall warning ;调用是否警报子程序 lcall stop ;调用是否响铃停
8、止 hui: lcall xianshi ;调用显示时间子程序 sjmp here it0p: push psw ;进堆栈 push acc mov th0,#0b0h ;重新赋初值 mov tl0,#3ch djnz 20h,return ;循环次数不为0则返回 mov 20h,#28h ;设置中断次数 mov a,#01h ;准备增1 add a,42h ;让秒单元增1 mov 42h,a ;秒增1 cjne a,#60,return ;秒不超过60则返回 mov 42h,#00h ;把秒单元清零 mov a,#01h ;准备增1 add a,41h ;让分单元增1 mov 41h,a ;
9、 分增1 cjne a,#60,return ;分不超过60则返回 mov 41h,#00h ;分单位清零 mov a,#01h ;换准备增1 add a,40h ;让时单元增1 mov 40h,a ;时增1 cjne a,#24,return ;时不才超过60则返回 mov 40h,#00h ;时清零 mov a,67h ;准备让天单元增1 inc a mov 67h,a ;天增1 ajmp return return:pop acc ;出堆栈 pop psw ret xianshi:mov a,42h ;显示时间子程序 mov b,#10 ;赋值除数10给b div ab mov 77h,
10、b ;将秒的个位存入77h单元 mov 78h,a ;将秒的十位存入78h单元 mov a,41h ;准备分离分单元的个位和十位 mov b,#10 ;赋值除数10 div ab mov 07ah,b ;将分的个位存入7ah单元 mov 07bh,a ;将分的十位存入7bh单元 mov a,40h ;准备分离时单元的个位和十位 mov b,#10 ;赋值除数10 div ab mov 7dh,b ;将时的个位存入7dh单元 mov 7eh,a ;将时的十位存入7eh单元 mov 79h,#12 ;赋值12给剩下的数码管让它显示-mov 7ch,#12lp2:mov r0,#77h ;用数码管显
11、示77h7eh里的数值子程序mov r3,#01hlp3:mov a,r0mov dptr,#tblmovc a,a+dptrmov dptr,#0fe00h movx dptr,a ;送位码mov dptr,#0fe01hmov a,r3movx dptr,a ;送段码inc r0mov a,r3rl amov r3,alcall delayjnb acc.0,lp3 ;控制循环让数码管都显示一遍 retchange1:mov dptr,#0fd02h ;判断是否进入设置时间子程序 movx a,dptrmov dptr,#0fd00h movx dptr,afd1:jnb acc.0,fd
12、0 ;当拨码盘的最低为1时进入设置,否则跳出 mov dptr,#0fd01hmovx a,dptr jnb acc.2,miao ;当按键的第3位按下时进入秒增1子程序 jnb acc.1,fen ;当按键的第2位按下时进入分增1子程序jnb acc.0,shi ;当按键的第1位按下时进入时增1子程序 lcall xianshi ;调用显示时间子程序sjmp change1 ;返回判断是否进入时间设置子程序fd0:retchange2:mov dptr,#0fd02h ;判断是否进入显示日期子程序 movx a,dptrmov dptr,#0fd00hmovx dptr,afd2: jnb
13、acc.1,fd0 ;当拨码盘第2位为1时进入显示日期 lcall riqi ;进入显示日期子程序sjmp change2change3:mov dptr,#0fd02h ;判断是否进入设置日期子程序 movx a,dptr mov dptr,#0fd00hmovx dptr,afd7: jnb acc.2,fd0 ;当拨码盘第3位为1时进入设置日期子程序 mov dptr,#0fd01hmovx a,dptrjnb acc.5,tian ;当按键第6位按下时天数增1jnb acc.4,yue ;当按键第5位按下是月份增1jnb acc.3,nian ;当按键第4位按下时年份增1lcall r
14、iqi ;显示日期sjmp change3miao: lcall delay1 ;进入设置秒增1的子程序 mov a,42h inc amov 42h,a ;秒增1cjne a,#60,fd0 ;判断是否退出clr amov 42h,a ;把分单元清零 retnian: lcall nian1fen: lcall delay1 ;进入设置分增1的子程序 mov a,41h inc a mov 41h,a ;分增1 cjne a,#60,fd0 ;判断是否退出 clr a mov 41h,a ;把分单元清零 retshi: lcall delay1 ;进入设置时增1的子程序 mov a,40hi
15、nc amov 40h,a ;让时单元增1cjne a,#24,fd0 ;判断是否退出clr amov 40h,a ;时单元清零rettian: lcall delay1 ;进入设置天数增1的子程序 mov a,68hcjne a,#3,ed0 ;判断当前月份以便进入不同设置lcall ed1reted0: mov a,67hinc amov 67h,a ;天增1cjne a,#0ah,fd0 ;判断是否退出clr amov 67h,a ;天个位清零mov a,68hinc amov 68h,a ;天十位增1reted1: mov a,67h inc amov 67h,a ;天增1 cjne
16、a,#2,fd10 ;判断是否退出ed2: mov 67h,#1 ;将天的个位置1 mov 68h,#0 ;天的十位清零fd10:retyue: lcall delay1 ;进入设置月份增1的子程序 mov a,6ahcjne a,#1,ed3 ;判断当前月份是否大于10一便进入不同设置lcall ed4 ;进入相应设置reted3: mov a,69h inc amov 69h,a ;月份的个位增1cjne a,#0ah,ed5;比较判断是否月份是否大于10,大于则继续往下执行clr amov 69h,a ;清零月份个位mov a,6ahinc amov 6ah,a ;月份十位增1reted
17、4: mov a,69h inc amov 69h,a ;月份各位增1 cjne a,#3,ed5 ;比较判断是否退出 mov 6ah,#0 ;月份十位清零 mov 69h,#1 ;月份个位置1reted5: retnian1: lcall delay1 ;进入设置年增1的子程序 mov a,6bh inc amov 6bh,a ;年的个位增1cjne a,#0ah,ed5 ;判断是否退出clr a mov 6bh,a ;清零年的个位 mov a,6chinc amov 6ch,a ;年的十位增1cjne a,#0ah,ed5 ;判断是否退出clr amov 6ch,a ;清零年的十位mov
18、a,6dh inc amov 6dh,a ;年的白位增1cjne a,#0ah,ed5 ;判断是否退出clr amov 6dh,a ;清零年的百位mov a,6ehinc amov 6eh,a ;年的千位增1retriqi: mov a,68h ;进入显示日期子程序 cjne a,#3,fd4 ;判断当前天数十位以便进入不同显示lcall fd3 ;进入不同显示fd4: mov a,6ah cjne a,#1,fd5 ;判断当前月份的十位以便进入不同显示mov a,69hcjne a,#3,fd5 ;判断当前月份的个位,以便进入不同显示lcall fd6fd5: mov a,67h cjne
19、a,#0ah,es1 ;判断是否退出 clr a mov 67h,a ;清零天的个位 mov a,68h inc afd3: mov 68h,a ;增1天的十位 cjne a,#3,es1 ;判断是否退出 mov a,67h cjne a,#2,es1 ;判断是否退出 clr a mov 67h,#1 ;把天数的个位置1 mov 68h,#0 ;把天数的十位置0 mov a,69h inc amov 69h,a ;月份增1 cjne a,#0ah,es1 ;判断是否退出 mov 69h,#0 ;清零月份的是个位 mov 68h,#0 ;清零天数的十位 mov 67h,#1 ;置1天数的个位 m
20、ov a,6ah inc a mov 6ah,a ;月份的十位增1fd6: mov 69h,#1 ;月份的个位置1 mov 6ah,#0 ;月份 的十位清零mov 68h,#0 ;天数的十位清零 mov 67h,#1 ;天数的个位置1 mov a,6bh inc a mov 6bh,a ;年份的个位增1cjne a,0ah,es1 ;判断是否退出clr amov 6bh,a ;清零年的 个位mov a,6ch inc amov 6ch,a ;年的十位增1cjne a,#0ah,es1 ;判断是否退出clr amov 6ch,a ;清零年的十位mov a,6dhinc amov 6dh,a ;年
21、的百位增1 cjne a,#0ah,es1 ;判断是否退出clr a mov 6dh,a ;清零年的百位mov a,6ehinc amov 6eh,a ;年的千位增1es1: lcall xiaoyue ;调用月份天数调整子程序 mov 7eh,6eh ;准备显示日期 mov 7dh,6dhmov 7ch,6chmov 7bh,6bhmov 7ah,6ah mov 79h,69hmov 78h,68hmov 77h,67hlcall lp2retxiaoyue:mov a,6ah ;进入月份天数调整子程序 cjne a,#1,cs0 ;判断当前月份的十位以便进入不同调整mov a,69hcjn
22、e a,#1,cs4 ;判断当前月份的个位以便进入不同调整mov a,68hcjne a,#3,cs0 ;判断当前天数的十位以便进入不同调整mov a,67hcjne a,#1,cs0 ;判断当前天数的十位以便进入不同调整 mov 6ah,#1 ;日期调整mov 69h,#2mov 68h,#0mov 67h,#1retcs0: mov a,69h cjne a,#9,cs1 ;判断当前月份的各位以便进入不同调整mov a,68hcjne a,#3,cs1 ;判断当前天数的十位以便进入不同调整mov a,67hcjne a,#1,cs1 ;判断当前天数的个位以便进入不同调整mov 6ah,#1
23、hmov 69h,#0 ;日期调整mov 68h,#0mov 67h,#1retcs1: mov a,69h cjne a,#6,cs2 ;判断当前月份的个位以便进入不同调整mov a,68hcjne a,#3,cs2 ;判断当前天数的十位以便进入不同调整mov a,67hcjne a,#1,cs2 ;判断当前天数的个位以便进入不同调整mov 69h,#7 ;日期调整mov 68h,#0mov 67h,#1retcs2: mov a,69h cjne a,#4,cs3 ;判断当前月份个位以便进入不同调整mov a,68hcjne a,#3,cs3 ;判断当前天数的十位以便进入不同调整mov a
24、,67hcjne a,#1,cs3 ;判断当前天数的个位以便进入不同调整mov 69h,#5 ;日期调整mov 68h,#0mov 67h,#1retcs3: mov a,69h cjne a,#2,cs4 ;判断当前月份的个位以便进入不同调整mov a,68hcjne a,#2,cs4 ;判断当前天数的十位以便进入不同调整mov a,67hcjne a,#9,cs4 ;判断当前天数的个位以便进入不同调整mov 69h,#3 ;日期调整mov 68h,#0mov 67h,#1cs4: retnaolin :mov dptr,#0fd02h ;判断是否进入闹铃时间设置子程序 movx a,dpt
25、rmov dptr,#0fd00h movx dptr,a jnb acc.3,ed7 ;当拨码盘第4位按下时进入闹铃时间设置 mov dptr,#0fd01hmovx a,dptr jnb acc.2,sec ;当按键第3位按下时秒增1 jnb acc.1,min ;当按键第2位按下时分增1jnb acc.0,hour ;当按键第1位按下时时增1 mov a,45h mov b,#10 ;赋值除数10分离闹铃时间的秒 div ab mov 77h,b ;将秒的个位存入77h单元 mov 78h,a ;将秒的十位存入78h单元 mov a,44h mov b,#10 ;赋值除数10分离闹铃时间
26、的分 div ab mov 7ah,b ;将分的个位存入7ah单元 mov 7bh,a ;将分的十位存入7bh单元 mov a,43h mov b,#10 ;赋值除数10分离闹铃时间的时 div abmov 7dh,b ;将时的个位存入7dh单元mov 7eh,a ;将时的十位存入7eh单元mov 7ch,#12 ;熄灭其他数码管mov 79h,#12 lcall lp2 sjmp naolined7:ret sec: lcall delay1 ;进入调整闹铃时间秒增1子程序 mov a,45h cjne a,#59,ed16 mov 45h,#0 sjmp retu13ed16: inc a
27、 mov 45h,aretu13: retmin: lcall delay1 ;进入调整闹铃时间分增1子程序 mov a,44h cjne a,#59,ed6 mov 44h,#0 sjmp retu3ed6: inc a mov 44h,aretu3: rethour: lcall delay1 ;进入调整闹铃时间时增1子程序 mov a,43h cjne a,#23,loop4 mov 43h,#0 sjmp retu4loop4:inc a mov 43h,aretu4:retwarning:mov dptr,#0fd02h ;进入是否闹铃子程序 movx a,dptr mov dptr
28、,#0fd00h movx dptr,a jb acc.5,ed9 mov a,40h cjne a,43h,ed8 ;时相等时继续往下执行 mov a,41h cjne a,44h,ed8 ;分相等是继续往下执行 mov a,42h cjne a,45h,ed8 ;秒相等是继续往下执行 clr p3.2 ;响铃 reted9: setb p3.2 reted8: retstop: mov dptr,#0fd02h ;进入判断是否停止响铃子程序 movx a,dptr mov dptr,#0fd00h movx dptr,a jnb acc.5,ed8 ;拨码盘第6位按下时停止响铃 setb
29、p3.2 retdelay: mov r2,#10 l1: mov r4,#100 l2: djnz r4,l2 djnz r2,l1 retdelay1: mov r1,#10 d1: lcall lp2 mov r2,#1 d2: mov r6,#1 d3: djnz r6,d3 djnz r2,d2 djnz r1,d1 retdel: mov r1,#10ld0: mov r2,#150ld1: mov r6,#200ld2: djnz r6,ld2 djnz r2,ld1 djnz r1,ld0 ret tbl:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0
30、f8h,80h,90h,88hdb 83h,0bfh,0ffh,086h,08eh,08ch,0c1h,0ceh,091h,089h,0c7h,0ffhend五、调试记录及调试结果1、 程序设计时,从时间设置要跳转到日期设置时,由于指令太长,导致指令跳转不到年,后来在秒设置后面添加个lcall长调用指令调用年,才使问题得到了解决。2、 数字时钟的数码管显示只有六位,八位的数码管还有两位是空的,为了让时间显示有更好的效果,让显示空的数码管那个位码送0bfh初值给它,这样它就能显示“”。3、 设置闹铃停止时,由于设置为拨盘码的第2个按键与设置日期显示的拨盘码按键一致,导致闹钟响铃时,拨回拨盘码的按
31、键,响铃无法停止,最后重新设置错开按键才能实现响铃停止。4、 通过调用延时10ms,实现消抖。5、 时间的工作方式不对,秒不能正常的跳转,当秒到9时接下去直接显示16,之后就不能正常的跳转。通过反复调试,在程序中多了一个da指令,去掉后时间的工作方式就正常了,经过测试分跟时的进位也可以正常工作,至此,时间的工作子程序测试成功。6、调试时,时间不能正常显示,在秒位会出现大于60的数,并且分的进位不出现,数码管上显示的几位也不正常,时的十位和分的秒出现乱码不亮,。经过分析发现分不进位的原因是因为秒的显示不正常,它不出现60,所以进位信号不来。经过调试发现在显示数码管的子程序中因为细节的一些问题,比如inc指令的漏用和循环查询的方式不对,以致显示不正常,经过改正,数码管
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年贷款银行服务协议
- 2024年餐厅装修协议
- 2024年股权投资合作协议书模板:投资风险与回报预期5篇
- 2024年特色预包装食品定制合同3篇
- 2024年文化产业贷款保证保险授信合同模板3篇
- 2024年规范化离婚合同样本模板版B版
- 2024指纹锁信息安全防护合同范本3篇
- 2024年高端机床样品交易协议版B版
- 2023-2024学年福建省福州市超德中学高一(下)期中语文试卷
- 2024年度公务员劳动合同范本社保福利全面保障3篇
- 【8地星球期末】安徽省合肥市包河区智育联盟校2023-2024学年八年级上学期期末地理试题(含解析)
- 2024-2025学年冀人版科学四年级上册期末测试卷(含答案)
- 【8物(科)期末】合肥市庐阳区2023-2024学年八年级上学期期末质量检测物理试卷
- 国家安全知识教育
- 2024-2030年中国停车场建设行业发展趋势投资策略研究报告
- 蓝军战略课件
- 物业管理重难点分析及解决措施
- 兰州生物制品研究所笔试
- 【MOOC】信号与系统-北京邮电大学 中国大学慕课MOOC答案
- 叉车维护保养与自行检查规范DB41-T 2486-2023
- 对外汉语教学法智慧树知到期末考试答案章节答案2024年西北师范大学
评论
0/150
提交评论