

免费预览已结束,剩余18页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计报告题目:电子日历和电子表2003级自动化一班指导老师: 完成日期:2006年6月15日一设计题目:电子日历和电子表二设计要求:1利用8031作为主控器组成一个电子日历和电子表;2上电或reset后能自动显示当前时间(时:分),首次上电复位显示为0时0分;以后各次均显示正确的当前时间;3 利用4个led显示管分时显示当前时间和日历;4 利用尽可能少的小键盘(开关)实现1)校正日历和时间,即当前的日历和时间输入计算机2)显示选择:时分显示/日历显示/报警显示3)报警时间的设置5 利用发光二极管作为报警指示,当报警时间到,二极管发光。三系统设计方案(简略):在本次课程设计中经过我们的认真研究我们决定采用8031内部的定时/计数器t0作为时间基准,工作在定时状态时每隔100ms产生一次中断,每10次中断秒计数器加1。由于本实验的cpu晶振频率是6mhz,所以定时器t0的时间常数是3cb0h,即th0=3ch,tl0=boh。以此作为电子日历和电子表的基本计时器。时间常数=65536-6000000*0.1*(1/12)=15536=3cb0h对于共阴极led显示利用8155的动态扫描显示,8031的p0口的输出显示送到8155的地址ad口。8155的pa,pb口输出。pb口为显示管段输出口,通过驱动芯片7407接led的ad.p位。输出相应的段码,pa口为显示管位输出口,它的pa0到pa3通过驱动芯片7406作为相应的位码输出。利用两个开关l分别接8031的p1.0,p1.1对电子钟和电子日历的显示状态进行控制,并且完成相应的调时以及报警定时工作。利用发光二极管接到8031的p3.0口,当报警时间到将p3.0置1完成报警显示四元件清单:8155 一片7407 两片7406 一片 开关 两个 led共阴极数码管 四个 发光二极管 一个 面包板 一个 万用表 一个 仿真头 一个 拔线钳 一把镊子 一把 细导线若干剪刀 一把 五设计原理图:2764803181554位led显示管小键盘5v 六电气结构图:p1.0p1.1p0.0p0.7alewrrdrstpb0ad0.pb7adalewrrdpa0rstpa1pa2pa374072片74065v8个100欧电阻4个led显示管七使用说明书:按键0的功能:1、实现显示模式的转换:不按时是显示时、分(时间)。按下第一次是显示日、月(日历)。按下第二次是显示报警时、分(报警)。按下第三次是显示秒、十分之一秒。按下第四次显示时、分。如此进行按键循环2、在按键1(调整鍵)动作后实现对日历,时间,报警时间的调整。具体操作为当1键显示要调整的位时,0键实现对这一位的累加,即按下一次示数加一。按键1的功能:实现对显示时间(时间、日历、报警时间)要调整的位转换:1、 当前显示时、分时,按键1按下第一次调分位,按下第二次调时位,按下第三次循环到当前显示状态,不能调整。2、 当前显示日、月时,按键1按下第一次调日位,按下第二次调月位,按下第三次循环到当前显示状态,不能调整。3、 当前显示报警时、分时,按键1按下第一次调分位,按下第二次调时位,按下第三次循环到当前显示状态,不能调整。在按键1的基础上通过按键0来实现调整。八软件设计:主程序流程图:开始置8155控制字显示单元置初值、t0初始化时间计数器清零、t0开中断取时、分、日、月、报警时间等变换后送相应的显示单元调用显示子程序调用按键0判断子程序按下?调用15次显示子程序消抖按下?调用按键0处理子程序调用15次显示子程序消抖调用按键1判断子程序按下?按下?是是是否否否否调用按键1处理子程序时间中断子程序流程图:中断入口置t0时间常数,1/10秒计数器加一1/10秒计数器10?1/10秒计数器清零秒计数器加一,十进制调整秒计数器60?秒计数器清零分数器加一,十进制调整分计数器60?分计数器清零时数器加一,十进制调整时计数器24?时计数器清零天数器加一,十进制调整二月?29日?1、3、5、7、8、10、12月?31日?否否否否否否否否32日?日计数器清零,月计数器加一,十进制调整13月?月计数器置1返回主程序否否显示子程序流程图:入口显示缓冲区首地址送r0,取待显示数,解压并存缓冲区时十位缓冲单元地址送r0,送相应扫描模式初值到r2,调整状态初值送r1段码表首地址送dptr,查表取段码,小数点显示模式送r3是小数点显示模式1?是小数点显示模式2?调整状态是1吗?调整状态是3吗?小数点段码(显示小数点)小数点段码否否否否段码送8155b口,位码送8155a口延时修改段码地址位扫描右移,调整状态加1扫描完成?返回主程序否入口p1.0置1,p1.0送c返回主程序1号键判断子程序与0号键子程序雷同,只需将p1.0改成p1.1即可0号键判断子程序:0号键处理子程序流程图:入口键值送a0模式?1模式?2模式?60分?调分模式?日、月显示方式送显示状态缓冲,键值加1报警显示方式送显缓,键值加1小时数加1,十进制调整时、分显示方式送显缓,键值加1缓冲器清零否否否否否调时模式?分加1,十进制调整24小时?时缓冲器清零返回主程序调月模式?调天?调报警时?调报警分?月加1,十进制调整12月?天加1,十进制调整报警时加1,十进制调整报警分加1,十进制调整30号?日缓冲器置1月缓冲器置124小时?报警时清零60分?时?报警分清零返回主程序否否否否否否否否否否1号键处理子程序流程图:入口键值送a时、分显示?调时模式?显日月模式?调分模式?调日模式?调月模式?调时模式送keybuf调分模式送keybuf置小数点2模式调月模式送keybuf置小数点1模式调日模式送keybuf置小数点2模式模式0送keybuf置小数点0模式调报警时送keybuf置小数点显示1keybuf置显示模式2,小数点显示0显示方式2报警?调报警时模式?调报警分送keybuf置小数点显示2显示报警模式送keybuf,置小数点灭,显示模式3调报警分模式?返回主程序否否否否否否否否显示方式3?显示模式送keybuf,置小数点灭,显示模式4否程序清单disbufequ30hbufequ20hsecbufequ21hminbufequ22hhoubufequ23hdaybufequ24hmonbufequ25halarmminequ26halarmhouequ27htemp_buf1equ28htemp_buf2equ29hdisp_statusequ2ahchg_bit equ2bhalarmingequ2chkeybufequ2dhp_conequ7f00hport_aequ7f01hport_bequ7f02hmode1equ0mode2equ1mode3equ2mode4equ3houchgequ4minchgequ5monchgequ6daychgequ7ahouchgequ8aminchgequ9org8000hljmpstartorg8003hljmpint_key0org800bhljmpclockorg8013hljmpint_key1org8030hstart:movsp,#60hmovdptr,#p_conmova,#03h ;8155初始化pa,pb同为输出口 movxdptr,amova,#00hmovr1,#04hmovr0,#disbuflp1:movr0,aincr0djnzr1,lp1anltmod,#0f0h orltmod,#01h movtl0,#0b0h movth0,#3ch ;定时器0置初值movbuf,#00hmovminbuf,#00h movhoubuf,#00h ;时间设初值00时00分movdaybuf,#01h movmonbuf,#01h ;日历设初值01月01日movalarmmin,#30hmovalarmhou,#00h ;报警时间设初值00时30分 movkeybuf,#00hsetbtr0setbet0 ;开中断0setbeasetbex0setbex1setbit0setbit1clrp3.0movdisp_status,#1movchg_bit,#0disp1:mova,disp_statuscjnea,#1,disp2movtemp_buf1,houbufmovtemp_buf2,minbuf ;时间放置暂时显示缓冲单元sjmpdisp5disp2:cjnea,#2,disp3movtemp_buf1,monbufmovtemp_buf2,daybuf ;日历放置暂时显示缓冲单元sjmpdisp5disp3:cjnea,#3,disp4movtemp_buf1,alarmhoumovtemp_buf2,alarmmin ;报警时间放置暂时显示缓冲单元sjmpdisp5disp4:cjnea,#4,disp5movtemp_buf1,secbufmovtemp_buf2,buf ;秒放置暂时显示缓冲单元disp5:lcalldisplay ;调用显示子程序acallis_key0 ;调用判断按键0子程序jcnext_key1 ;无按下转按键1的判断 movr7,#0fhkey0:acalldisplayacallis_key0 ;调用15次显示子程序对按键进行消抖jcnext_key1acallint_key0 ;按键0按下则执行按键0子程序next_key1:acallis_key1 ;调用判断按键1子程序jcdisp1movr7,#0fhkey1:acalldisplayacallis_key1jcnext_key1acallint_key1 ;按键1按下则执行按键1子程序sjmpdisp1is_key0:movp1,#0ffh ;判断按键0子程序movc,p1.0retis_key1:movp1,#0ffh ;判断按键1子程序movc,p1.1retdisplay:movr0,#disbuf ;显示子程序mova,temp_buf1swapaanla,#0fhmovr0,aincr0mova,temp_buf1anla,#0fhmovr0,aincr0mova,temp_buf2swapaanla,#0fhmovr0,aincr0mova,temp_buf2anla,#0fhmovr0,aincr0org_display:mov r0,#disbuf+3movr2,#08hmovr1,#0dis_lp:movdptr,#seg_tabmova,r0movca,a+dptrmovr3,chg_bitcjner3,#1,cc1cjner1,#1,cc1orla,#80hcc1:cjner3,#2,cb1cjner1,#3,cb1orla,#80hcb1:movdptr,#port_bmovxdptr,amovdptr,#port_amova,r2movxdptr,amovr3,#00hdjnzr3,$decr0mova,r2rramovr2,ajnbacc.7,dis_lpretseg_tab:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhclock:movtl0,#0b0h ;时间子程序movth0,#3chpushpswpushaccmova,alarming ;报警时间处理cjnea,#1,next1next1:jcnext2djnzalarming,next2 ;报警时间延时clrp3.0next2:mova,bufadda,#01hmovbuf,acjnea,#0ah,c_alarmmovbuf,#00h mova,secbuf adda,#01h ;1/10秒满10次清零,秒加1daamovsecbuf,acjnea,#60h,c_alarmmovsecbuf,#00hmova,minbufadda,#01h ;满60秒,秒清零,分加1daamovminbuf,acjnea,#60h,c_alarmmovminbuf,#00hmova,houbufadda,#01h ;满60分,分清零,时加1daamovhoubuf,acjnea,#24h,c_alarmmovhoubuf,#00hmova,daybufadda,#01h ;满24小时,时清零,天加1 daamovdaybuf,amova,monbuffeb:cjnea,#02h,no2 ;判断月份,不是2月转no2子程序mova,daybuf cjnea,#29h,c_alarm d1:movdaybuf,#00h mova,monbufadda,#01h ;是2月满28天,日为1月进1daamovmonbuf,ano2:cjnea,#01h,d2 ;不是1月转d2b1:mova,daybufcjnea,#32h,c_alarmajmpd1 ;是1月满31天,日为1月进1d2:cjnea,#03h,d3 ;不是3月转d3ajmpb1 ;是3月满31天,日为1月进1d3:cjnea,#05h,d4 ;不是5月转d4ajmpb1 ;是5月满31天,日为1月进1d4:cjnea,#07h,d5 ;不是7月转d5ajmpb1 ;是7月满31天,日为1月进1d5:cjnea,#08h,d6 ;不是8月转d6ajmpb1 ;是8月满31天,日为1月进1d6:cjnea,#10h,d7 ;不是10月转d7ajmpb1 ;是10月满31天,日为1月进1d7:cjnea,#12h,d8 ;不是12月转d8ajmpb1 ;是12月满31天,日为1月进1d8:mova,daybufcjnea,#31h,c_alarmajmpd1 ;是4,6,9,11月满30天,日为1月进1d9:cjnea,#13h,c_alarm movmonbuf,#01h ;满12月,月为1c_alarm:mova,alarmhou ;报警时间判断cjnea,houbuf,int_donemova,alarmmincjnea,minbuf,int_donesetbp3.0 ;报警时间和当前时间一致就点亮二极管movalarmming,#10 ;二极管点亮一分钟int_done:popaccpoppswreti ;时间中断处理完毕int_key0:mova,keybuf ;按键0功能子程序cjnea,#mode1,n01 movdisp_status,#2 ;按键0按下一次显示日历inckeybufajmpexitn01:cjnea,#mode2,n02movdisp_status,#3 ;按键0再按下一次显示报警时间inckeybufljmpexitn02:cjnea,#mode3,n03movdisp_status,#4 ;按键0再按下一次显示秒钟inckeybufljmpexitn03:cjnea,#mode4,n04movdisp_status,#1 ;按键0按下一次返回显示时间inckeybufljmpexit n04:cjnea,#houchg,n05 mova,houbuf ;调时间的小时状态inca ;按下按键0对小时加1daamovhoubuf,acjnea,#24h,tt1tt1:jcexitmovhoubuf,#0 ;小时满24时清零 sjmpexitn05:cjnea,#minchg,n06mova,minbuf ;调时间的分钟状态 inca ;按下按键0对分钟加1daamovminbuf,acjnea,#60h,tt2tt2:jcexitmovminbuf,#0 ;分钟满60分清零sjmpexitn06:cjnea,#monchg,n07 mova,monbuf ;调日历的月份状态inca ;按下按键0对月份加1daamovmonbuf,acjnea,#13h,tt3tt3:jcexitmovmonbuf,#1 ;月份满12月置1sjmpexitn07:cjnea,#daychg,n08 mova,daybuf ;调日历的天状态inca ;按下按键0对天加1daamovdaybuf,acjnea,#32h,tt4tt4:jcexitmovdaybuf,#1 ;天满31天置1sjmpexitn08:cjnea,#ahouchg,n09 mova,alarmhou ;调报警时间的小时状态 inca ;按下按键0对报警时加1daamovalarmhou,acjnea,#24h,tt5 tt5:jcexitmovalarmhou,#0 ;小时满24时清零 sjmpexitn09:cjnea,#aminchg,exitmova,alarmmin ;调报警时间的分钟状态 inca ;按下按键0对报警分加1daamovalarmmin,acjnea,#60h,tt6tt6:jcexitmovalarmmin,#0 ;分满60分清零 exit:retint_key1:mova,keybuf ;按键1功能子程序cjnea,#mode1,n11movkeybuf,#minchg ;在时间模式时按键1按下一次调分movchg_bit,#1sjmpexit1n11:cjnea,#minchg,n12movkeybuf,#houchg ;按键1再按下一次调时movchg_bit,#2sjmpexit1n12:cjnea,#houchg,n13movkeybuf,#mode1movdisp_status,#1 ;按键1再按下一次显示时间模式movchg_bit,#0sjmpexit1n13:cjnea,#mode2,n14 ;在日历模式时按键1按下一次调日movkeybuf,#daychgmovchg_bit,#1sjmpexit1n14:cjnea,#minchg,n15 ;按键1再按下一次调月movkeybuf,#monchgmovchg_bit,#2sjmpexit1n15:cjnea,#houchg,n16movkeybuf,#mode2movdisp_status,#2 ;按键1再按下一次显示日历模式movchg_bit,#0sjmpexit1n16:cjnea,#mode3,n17 movkeybuf,#aminchg ;按键1按下一次调报警分movchg_bit,#1sjmpexit1n17:cjnea,#aminchg,n18movkeybuf,#ahouchg ;按键1再按下一次调报警时movchg_bit,#2sjmpexit1n18:cjnea,#ahouchg,exit1movkeybuf,#mode3 movdisp_status,#3 ;按键1再按下一次显示报警时间模式movchg_bit,#0sjmpexit1exit1:retend九设计结果: 经过为期两个星期的单片机课程设计,我们所做的电子日历和电子表最终比较完美的实现了设计要求。led管显示很明显,亮度非常高,走时很精确,其中时间和日历还有报警时间的设定以及调整都能很好的实现。在设计的过程中,我们还多加了一个显示功能,即秒和1/10秒的显示,使得时间显示得更加完美。报警时间设定为一分钟,也就是说当报警时间和当前时间一致时,发光二极管可以持续点亮一分钟。但在本次的设计中还存在一些不足之处:我们为了程序设计的进度,忽略了闰年的情况,将二月都定为了28天。并且在时间和日历的调整上每月都可以调到31天。除此之外其他方面都很正常。十心得体会:经过一个多星期的努力,我和邓明的课程设计电子日历和电子表,终于获得圆满的结果,看着电子日历和电子时钟正常的跳动,我的心理有着说不出的高兴,任何事情的成功都来的不容易,我们的课程设计的这个小小成功也经过了困难和艰辛的付出。在这次课程设计中我主要负责的是硬件电路的设计,首先是原理图的设计,之前做过单片机实验,所以我们对8155、74ls06、74ls07、led显示管等并不陌生,认真的研究过本课题的要求后,我们还是有个整体的思路,经过我和同组的邓明的商量后,我们把原理图较快的画了出来,并在老师的检查下拿到了设计所需器材等。接下来就是根据原理图接线了,由于女孩子比较细心,所以我就负责接线,当然同组的同学就负责软件的设计,面包板和以前做数电和模电课程设计不同的是不用焊接,但是这次的面包板是用螺丝固定的,可是有些螺丝掉了,我只好用导线把它们固定起来,这也为后来留下了隐患,设计的原理图和实际的接线是有一定区别的,接线时一定要合理布线,讲求美观,有个全面的考虑,说和写容易,但是当真正动手操作的时候并不是一件简单的事,要把用到的线尽量都用镊子夹成直线,做到地线用黑色,电源线用红色,其他的用黄色,有时候布置一根线都要思考良久,线路接好容易,要在好的基础上整体感觉合理、美观可不容易,但是,我还是尽我最大的努力做到了。下一步的工作是调试,在实验室,我拿着万用表测试一根根的导线以及芯片和数码管,调试过程中发现了两个问题:有个数码管不能正确显示,面包板的一条接触不良,等换了一下数码管和重新接了面包板的一条后,在正确的程序下,我们的结果显示的很好!这次的课程设计使我受益匪浅,不仅对单片机的理论知识有了比较全面的认识,对自己动手能力也有很大的提高,最重要的是,真实接触到自己做出来的电子日历和电子表,使我对自动化专业有了更高的兴趣。郭珍珍通过为期两天的单片机课程设计,我学到了不少课本上学不到的知识与方法,尤其重要的是这次的设计是真正意义上的由我们组独立完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年社区医学社区卫生服务管理考试答案及解析
- 2025年皮肤科疑难疾病鉴别诊断试卷答案及解析
- 2025年妇科妊娠期高血压并发症处理方法判断题答案及解析
- 民族团结材料的课件模板
- 2025年眼科验光验配常见眼镜配制模拟考试卷答案及解析
- 2025年急重症抢救急救技术检测答案及解析
- 2025年康复治疗计划制定考核答案及解析
- 创新驱动:新质生产力的核心引擎
- 发展农业新质生产力的措施
- 2025年肿瘤学肿瘤生物学基础考核答案及解析
- 反三违培训课件
- 数据中心供配电设施建设工程施工方案与技术措施
- 宝安妇幼保健医院医用气体监理工作细则
- 严重创伤急救护理
- 校园设备投放管理制度
- 2026届新高考语文热点复习小说阅读
- 2024年中国大唐集团有限公司招聘考试真题
- JG/T 433-2014建筑幕墙用平推窗滑撑
- 机房日常巡检管理制度
- 家庭养老床位管理制度
- 2025-2030年中国水利工程行业市场发展分析及前景趋势与投融资研究报告
评论
0/150
提交评论