您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 华南理工大学电子与信息学院单片机课程设计报告
单片机课程设计报告题目:电子日历时钟学院:电子与信息学院专业:*级电子信息工程*班组员:*************指导教师:****提交日期:******第一部分:要求和分工一.实验目的:课程标志性内容的设计理解和综合运用,鼓励独立性设计和功能扩展的创新实践。二.功能要求:1.基本性要求通过按键不同完成以下功能:(1)显示北京时间的时、分、秒;(2)能够校准时间;(3)使用汇编语言;2.发挥性要求(1)显示公历日期(2)能够校准日期(3)运动秒表(4)闹钟功能三、组员分工:第二部分:实现的功能一、模式切换二、通过按键修改内容(对应位加或者两位加减)三、附加功能:闹钟功能,运动秒表功能,按键单步调节与连续调****•主体程序编写•子程序功能完善****•模式判断与按键修改•变量大小限定,闰年功能等*****•按键功能实现与修改等•部分子程序编写,代码优化模式0年模式1月、日模式2时、分模式3秒、毫秒模式4闹钟功能模式5运动秒表外部中断0控制节,不同状态的发声,不同模式下加不同点区分四、特色:1.点击一次外部中断1,标志震音响起时按键才可使用,此时程序在外部中断1内死循环2.点击一次外部中断0,,退出外部中断1内部死循环,退出按键检测,再点击一次外部中断0,进行模式切换3.为了在进入外部中断1后能保持显示的功能不影响,还在外部中断1内部加入显示子程序。4.中断的优先级从高到低顺序设为定时器0——外部中断0——定时器1——外部中断16种模式切换分别为:年、月日、时分、秒、闹钟、运动秒表第三部分:汇编语言源程序附录:代码;********************************************************************;万年历;5个模式,实现万年历功能,附加闹钟和运动秒表功能;********************************************************************;寄存器定义RCKBITP0.5SCKBITP0.4DATBITP0.7RSTBITP0.6BUZZERBITP1.3;蜂鸣器HEQU20H;闹钟时MEQU21H;闹钟分MODEEQU23H;模式TDEQU24H;进入和退出修改键值LYEAREQU25H;年低两位HYEAREQU26H;年高俩位MONTHEQU28H;月DAYEQU29H;天HOUREQU2AH;时MINUTEEQU2BH;分SECONDEQU2CH;秒LSECONDEQU2DH;毫秒TEMP1EQU2FH;显示寄存器低位TEMP2EQU30H;显示寄存器高位BYTEEQU31H;发送的字型码字节GEWEIEQU32H;个位数码管对应的字型码SHIWEIEQU33H;十位数码管对应的字型码BAIWEIEQU34H;百位数码管对应的字型码QIANWEIEQU35H;千位数码管对应的字型码M1EQU36H;秒表分S1EQU37H;秒表秒MS1EQU38H;秒表毫秒;------------------------------------------------------------------------------------------------------;程序开头部分ORG0000HAJMPMAINORG0003HLJMPIINT0;外部中断0ORG000BHAJMPEINT0;定时器中断0ORG0013HLJMPIINT1;外部中断1ORG001BHLJMPEINT1;定时器中断1;###################################################;主程序MAIN:MOVLYEAR,#13;初始化年,月,日,时,分,秒,闹钟,秒表MOVHYEAR,#20MOVMONTH,#6MOVDAY,#15MOVHOUR,#5MOVMINUTE,#5MOVSECOND,#0HMOVLSECOND,#0HMOVH,#5MOVM,#2MOVM1,#0MOVS1,#0MOVMS1,#0MOVMODE,#0MOVTD,#0MOVTMOD,#11H;定时器0的模式1MOVTL0,#0B0H;50msMOVTH0,#03CHMOVTL1,#0B0H;50msMOVTH1,#03CHMOVSP,#60HMOVR6,#0;定时器计数用SETBBUZZERSETBTR0;打开定时器0SETBET0;定时器0溢出中断允许位SETBEX0;外部中断0允许SETBIT0;外部中断0触发方式为边沿触发SETBEX1;外部中断1允许SETBIT1;外部中断1触发方式为边沿触发SETBEA;允许全局中断SETBPT0SETBPX0SETBPT1;设置优先级从高到低依次为定时器0,外部中断0,;定时器1、外部中断1CLRRST;HC595的复位端,不能让他复位;------------------------------------------------------------------------------------------------------;主程序的显示死循环START:MOVDPTR,#SEGMENT_TABEL;放入字型码的首地址,;便于后面程序中显示的查表MOVA,HCJNEA,HOUR,DING_EXITDING0:MOVA,MCJNEA,MINUTE,DING_EXITLCALLSOUND1MOVR7,#40LCALLDLYDING_EXIT:MOVA,MODEMODE0:CJNEA,#0,MODE1CLRTR1;换模式时关掉定时器1MOVMS1,#0MOVS1,#0MOVM1,#0MOVR1,#0LCALLSHOW_YEAR;MODE=0显示年AJMPSTARTMODE1:CJNEA,#1,MODE2LCALLSHOW_MONTHDAY;MODE=1显示月日AJMPSTARTMODE2:CJNEA,#2,MODE3LCALLSHOW_HOURMINUTE;MODE=2显示时分AJMPSTARTMODE3:CJNEA,#3,MODE4LCALLSHOW_SECONDL;MODE=3显示秒AJMPSTARTMODE4:CJNEA,#4,MODE5LCALLSHOW_DINGSHIQIAJMPSTARTMODE5:LCALLSHOW_MIAOBIAOAJMPSTART;以上为主程序;###################################################;通过串行输入的方式向74hc595发送一个字节的数据,;并将数据输出到数码管的段码管脚;------------------------------------------------------------------------------------------------------SEND_BYTE:MOVBYTE,AMOVA,#80HMOVR7,#9PANDUAN1:DJNZR7,SEND_LOOP;当R7不为0时,进入循环CLRRCKSETBRCKCLRRCKRETSEND_LOOP:RLAMOVB,AANLA,BYTEJNZSET_DAT;当不为0时,跳去设置dat为1CLRDATMOVA,BSCK_1:CLRSCKSETBSCKCLRSCKAJMPPANDUAN1SET_DAT:SETBDATMOVA,BAJMPSCK_1;以上为字节数据进行输入锁存;------------------------------------------------------------------------------------------------------;以下为将各位对应的数据对应的字段在数码管中显示出来SEG_DISPLAY:ACALLJISUAN_MAZHI;得到QIANWEI,BAIWEI,SHIWEI,GEWEI对应的值DISPLAY1:MOVA,P0ANLA,#0F0HMOVP0,A;把P0的低四位全清0,避免数码管显示的滞后感MOVA,GEWEI;把个位的值放到A寄存器,;以便后面的SEND_BYTE使用ACALLSEND_BYTEORLP0,#08H;把P0口的P0.3口置1,以点亮最右边的数码管MOVR7,#10HLCALLDLY;要让数码管亮一段时间MOVA,MODECJNEA,#4,DIAN41;在模式4点亮点MOVA,#10MOVCA,@A+DPTRACALLSEND_BYTEMOVR7,#10HLCALLDLYDIAN41:MOVA,P0ANLA,#0F0HMOVP0,A;把P0的低四位全清0MOVR7,#03H;R7在DLY程序中用到,R7越大,延时越长LCALLDLY;让数码管暗一段时间,以避免数码管显示的拖滞感MOVA,SHIWEI;上面有暗的部分了,故这里不用再写ACALLSEND_BYTEORLP0,#04H;点亮第三个数码管MOVR7,#10HLCALLDLYMOVA,MODECJNEA,#4,DIAN30;在模式5点亮点AJMPDIAN31DIAN30:CJNEA,#5,DIAN32DIAN31:MOVA,#10MOVCA,@A+DPTRACALLSEND_BYTEMOVR7,#10HLCALLDLYDIAN32:MOVP0,#00HMOVR7,#03HLCALLDLYMOVA,BAIWEIACALLSEND_BYTEORLP0,#02H;点亮第二个数码管MOVR7,#10HLCALLDLYMOVA,MODECJNEA,#2,DIAN21AJMPDIAN23DIAN21:CJNEA,#3,DIAN22AJMPDIAN23DIAN22:CJNEA,#4,DIAN2DIAN23:MOVA,#10MOVCA,@A+DPTRACALLSEND_BYTEMOVR7,#10HLCALLDLYDIAN2:MOVP0,#00HMOVR7,#03HLCALLDLYMOVA,QIANWEI;点亮第一个数码管ACALLSEND_BYTEORLP0,#01HMOVR7,#10HLCALLDLYMOVA,MODECJNEA,#5,DIAN12AJMPDIAN13DIAN12:CJNEA,#4,DIAN1DIAN13:MOVA,#10MOVCA,@A+DPTRACALLSEND_BYTEMOVR7,#10HLCALLDLYDIAN1:RET;以上为数据显示;------------------------------------------------------------------------------------------------------;以下存有不同模式下的显示函数,调用即可显示对应模式下的数SHOW_HOURMINUTE:MOVTEMP2,HOUR;分别把时,分对应的数输入到这两个寄存器中,;以便SEG_DISPLAY程序调用MOVTEMP1,MINUTELCALLSEG_DISPLAY;调用字段显示程序把输入到TEMP2,TEMP1的;数据都显示到数码管中RETSHOW_SECONDL:MOVTEMP2,SECONDMOVTEMP1,LSECONDLCALLSEG_DISPLAYRET;此处显示秒及以下SHOW_YEAR:MOVTEMP2,HYEARMOVTEMP1,LYEARLCALLSEG_DISPLAYRETSHOW_MONTHDAY:MOVTEMP2,MONTHMOVTEMP1,DAYLCALLSEG_DISPLAYRETSHOW_DINGSHIQI:MOVTEMP2,HMOVTEMP1,MLCALLSEG_DISPLAYRETSHOW_MIAOBIAO:MOVA,TDCJNEA,#0,SHOW_MB2CLRTR1SHOW_MB2:MOVA,S1;td为0时,即此时关掉定时器MOVB,#10DIVAB;A的得到s1的十位,B得到s1的个位ADDA,M1;M1一开始就是使用其十位MOVTEMP2,A;把分与秒的十位相加后的结果放进temp2
本文标题:华南理工大学电子与信息学院单片机课程设计报告
链接地址:https://www.777doc.com/doc-6183846 .html