版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机实验报告学院系别专业班级XXXX班报告人XX一、实验任务在实验板上编程实现2012年日历和实时时钟:1.时-分-秒(2位-2位-2位)显示。可通过键盘置入时间值(参照电子表设置时间工作模式)。2.可通过按键控制在LED上从右向左滚动显示年_月_日3次,如:2012_01_20空空2012_01_203.实现每日闹铃提醒功能,闹铃时间可用按键设置。闹铃采用提示音表示。4.实现秒表功能。5.实现定时器功能(预置定时时间,按键启动,倒计时,计到0响提示音。6.设计实现音乐提示音。7.设计串行通信程序,使两台实验系统同步显示。二、硬件环境与软件控制原理1、硬件环境本次实验使用的单片机型号为51-MCU,它采用SST89E564RD作为仿真的核心芯片,通过串口与PC机连接。外设包括使用SPI总线驱动的10位ADC、10位DAC,I2C总线驱动的E2PROM、日历时钟芯片,并行总线驱动的8位8段数码管、4*4键盘、外扩32KRAM(62256)、字符型LCD,单总线驱动的数字式温度传感器,基于TDA2822M放大MIC的音频功率放大器,555信号发生和整形电路,蜂鸣器,红外线发射和接收装置等模块。SST89E564RD芯片的主要指标如下:(1)支持KEILC51的开发仿真环境,64K用户可使用仿真程序空间0000H~FFFFH。(2)可仿真89C51、89C52等51内核单片机。(3)仿真频率为0~40MHz晶振可选,系统配置11.0592MHz。(4)程序代码可以重复装载,无需预先擦除用户程序空间。(5)片内64K程序空间可以随时进行在线程序更新。(6)支持汇编语言、C语言以及二者混合调试。(7)支持同时最多10个断点。(8)可单步、断点、全速、可参考变量、RAM变量。并行总线器件:(1)8位8段数码管都挂在总线上,数码管的位选地址为8FFFH,段选地址为9FFFH,段选和位选驱动均为高电平有效。(2)4×4键盘复用了数码管的位选地址(8FFFH),写信号(/WR)控制行,读信号(/RD)控制列。(3)62256是32K的数据存储器,有8条数据线(D0~D7),15条地址线(A0~A14)。通过读、写线(/RD,/WR)及74HC00的组合控制单片机和62256之间的数据传送方向。A15是62256的片选信号,A15为低电平的时候选择62256。62256的地址空间范围是0000H~7FFFH。I2C总线器件:(1)AT24C02是带I2C总线接口的E2PROM存储器,具有掉电记忆功能,并能像普通RAM一样用程序改写,其容量是256B。(2)PCF8563是一款低功耗的CMOS实时时钟/日历芯片,它提供一个可编程时钟输出,频率为:32.768KHz,1024Hz,32Hz,1Hz;一个中断输出(接在INT1/P3.3);掉电检测器;报警和定时器。CPU的引脚分布如图:2、软件控制原理单片微型计算机简称单片机,是典型的嵌入式微控制器(MicrocontrollerUnit)。单片机由运算器,控制器,存储器,输入输出设备构成。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。8051由CPU、内部程序存储器ROM、内部寄存器RAM、可编程I/O端口、定时器/计数器、串行通信接口、中断系统、特殊功能寄存器、内部总线等部分构成。(1)8051单片机中的CPU是8位微处理器,主要由运算器和控制器组成,其中包括振荡电路和时钟电路。它决定了单片机的性能,是单片机的核心部件,主要完成运算和控制功能。(2)程序存储器主要用于存放用户的应用程序,也可以存放一些原始数据和表格。在其片外最大扩展寻址范围为64KB。单片机片内包括ROM或EPROM存储器,而现在的单片机都进行了改进,采用Flash闪存作为程序存储器。(3)8051片内包含128BRAM,用于存放单片机在运行期间需要保存的工作变量、中间结果或最终结果、数据暂存或缓冲、标志位等。单片机片内数据存储器采用高速RAM的形式集成在单片机内部,提高了运行速度,降低了系统功耗。(4)单片机设有四个8位双向并行I/O端口(P0、P1、P2、P3),每个端口都能按位编程设置,独立的用做输入或输出。每个端口功能有所不同,但都包含8个位锁存器、8个驱动器和三态缓冲器。P0口是一个三态双向端口,其字节地址为80H,位地址为80H~87H。P0口可作为地址/数据分时复用总线,也可用做通用I/O口;P1是一个准双向端口,只能用作通用I/O口,具有输入、输出、端口操作三种工作方式,其字节地址为90H,位地址为90H~97H;P2口字节地址为A0H,位地址为A0H~A7H,具有两种功能,一种作为通用I/O口使用,另一种作为扩展系统时的地址总线口输出高8位地址;P3口作为通用I/O口使用、可外接I/O设备,也可作为第二功能输入口,其字节地址为B0H,位地址为B0H~B7H。总之,四个并行口都有写端口操作、读端口操作、读-修改-写端口操作功能。(5)定时器/计数器的核心是两个16位的加法计数器,可设置为计数方式对外部事件进行计数;也可设置为定时方式对标准时钟脉冲进行定时计时。定时器/计数器0由两个8位的特殊功能寄存器TH0、TL0构成,定时器/计数器1由两个8位的特殊功能寄存器TH1、TL1构成。当启动定时器/计数器工作时,计数器从THx、TLx中的初值开始计数。特殊功能寄存器TMOD用于选择定时器/计数器0、1的工作模式和方式,TCON用于控制定时器/计数器0、1的启动和停止,同时还包含了定时器/计数器0、1的状态。定时和计数范围可通过编程进行设定,一旦定时或计数到位就立即向CPU发出中断请求。(6)单片机具有5个中断源,两级中断优先级,它可以接收外部中断请求、定时器/计数器中断请求和串行口中断请求,每一个中断源可以用软件独立地控制为开中或关中断状态。中断响应过程为:置位中断触发器→PC入栈→中断服务程序入口地址入PC→执行中断服务程序→RETI(清零中断触发器,断点入PC)→返回原断点继续执行。和中断系统相关的特殊功能寄存器有中断优先级控制寄存器IP、中断使能控制寄存器IE、定时/计数控制寄存器TCON、串行通信口控制寄存器SCON等。电路图如下所示:三、资源使用情况对于C51系列单片机,其片内有4KB程序存储器(0000~0FFFH),/EA=1,单片机从片内0000H开始执行程序,片内程序执行完后会自动转到片外1000H开始执行。对于片内128B的内部数据寄存器RAM,其编址为00~7FH;特殊功能寄存器(SFR)有128B,其编址为80~FFH。单片机内部RAM块的00~1FH区是工作寄存器区,分四个组,每组包含八个工作寄存器R0~R7,用户可以通过指令改变PSW状态寄存器中RS1、RS0的值来选择要使用的工作寄存器组,多余的寄存器组所对应的地址单元可以作为一般数据缓冲区或堆栈区使用。内部RAM的20H~2FH为位寻址区,这16个单元(128位)的每一位都有一个位地址,这16个单元构成了1位处理机的存储器空间。内部RAM从30H~7FH是数据缓冲区,称为用户RAM区,共80个单元。单片机至少有五个中断向量地址,规定在程序存储器0000~002FH地址之间有五个特殊地址被固定用于五个中断源的中断服务程序入口地址:外部中断0(0003H)、T0(000BH)、外部中断1(0013H)、T1(001BH)、串行口(0023H)。当单片机复位后,程序存储器PC的内容为0000H,引导系统从0000H开始读取指令执行程序。四、程序框图1、时间调整模式开始开始系统初始化是否按下设置键时间调整模式是否退出调整模式是否与闹钟一致启动闹钟显示时间NNNY2、秒表模式开始开始系统初始化是否按功能切换键切换秒表是否按秒表启动键秒表计时是否按秒表暂停键暂停秒表是否秒表清零显示时间NNNNY五、操作说明单片机4*4矩阵键盘赋值如下:0004080C0105090D02060A0E03070B0F单片机开启后,LED显示屏显示时间为“08-00-00”,并开始计时。(2)按下00键,进入时间调整模式,04、08、0C键分别用于调整时、分、秒。调整完毕,再次按下00键,退出时间调整模式,时钟开始计时。(3)按下01键,LED显示屏显示日期为“2013_03_09”,进入日期设定模式,04、08键分别用于调整月、日,由于是2013年日历,故年份始终为2013。另:0D键用于日期滚动显示,日期以格式“XXXX_XX_X空空”开始向左滚动,三遍后自动停止,恢复到滚动前的形式。再次按下01键,退出日期设定模式,返回时钟功能。此过程中,时钟一直在计时。(4)按下02键,设置闹钟时间,04、08、0C键分别用于设置时、分、秒,设置完毕,再按下0E键,使单片机了解到此时已设置了闹钟,再按02键退出设置闹钟功能。在设置闹钟时,时钟一直计时,当时钟时间到达闹钟时间时,闹铃“祝你生日快乐”响起,0F键用于关掉正在响的闹钟。(5)按下03键,进入秒表功能,秒表开始计时,07键用于秒表启动或暂停,0B键用于秒表清零。再次按下03键,退出秒表功能,返回时钟功能。此过程中,时钟一直计时。(6)按下0A键,用于设定定时器,04、08、0C键分别用于设定时、分、秒,设置完毕,按下0E键,定时器开始倒计时,当倒计时结束时,蜂鸣器开启,“祝你生日快乐”的提示音响起。按下0A键,退出定时器功能,返回时钟功能。设置及倒计时过程中,时钟一直计时。六、调试与运作情况操作步骤:打开Keil,选择Project-Newproject,新建工程并保存,在弹出的对话框中,选择单片机型号SST89E564RD,点击确定。点击File-New,新建源程序文件,编辑单片机程序,保存为.asm后缀的文件(汇编语言),另存到工程文件中。选择OptionsforTarget-Target1,修改参数,Debug选项选择硬件仿真,Settings选项中设置合适的端口,点击OK,确定。编译程序,发现错误,改正错误或者改进后,重复以上个步骤。调试成功后,下载程序,点击运行,开始操作单片学习系统,通过按键,设置时间、日期等,验证各项功能是否能实现。程序调试结果如下:运作情况:调试后程序没有错误,可以正常运行,能实现实验任务要求的各项功能(第7项未做)。验收时老师要求改动了两处小问题,一是闹铃响起时时钟仍然要保持计时,二是增加整点报时功能,整点报时是利用和闹钟相似的原理实现的,唯一的问题是一开始不清楚怎样实现几点钟报几下的功能。此外,由于蜂鸣器是固定频率发声的,而音乐的频率范围较宽,所以蜂鸣器输出的音乐和预期有一定的差距。七、心得体会通过本次实验,我初步学会了Keil软件的使用,了解了单片机的构造、基本原理和功能实现,掌握了汇编语言编程在单片机方面的具体应用。给我留下深刻印象的是要合理安排寄存器、分配内存,注意中断的使用以及模块化编程对于复杂程序的重要性。在实验中,发现了自身存在的单片机知识的欠缺以及初次接触汇编语言编程时的种种问题,借助了图书馆以及网络查阅资料,得到了老师的悉心指导和同学的热心帮助,使我获益匪浅。附录(本次实验的程序)ORG0000H JMPMAIN ORG000BH JMPTIM0 ORG001BH JMPTIM1 ;初始程序段,定义,使能中断、装载计数初始值、设定各变量初始值ORG0030H CLKEQU00H;用于标记闹钟状态,0为关,1为开 FLAGEQU01H;FLAG=1时Timer1中断服务子程序跳到秒表中断服务处;FLAG=0时Timer1中断服务子程序跳到音乐中断服务处JSEQU04H;用于定时器计时NEQU22H;Timer0的中断计数器 NNEQU23H;Timer1的中断计数器,用于定时器 SECEQU30HMINEQU31H HOUREQU32H ;秒、分、时的寄存器 DAY EQU33H MONTHEQU34H YEARLEQU35H YEARH EQU36H ;年、月、日的寄存器 ALSECEQU37H ALMINEQU38H ALHOUREQU39H ;闹铃秒、分、时的寄存器 D_SECEQU3AH ;定时器秒、分、时的寄存器 D_MINEQU3BH D_HOUREQU3CH STOP_MSEQU3DH ;秒表 STOP_SEQU3EH STOP_MINEQU3FH LED1EQU50H ;8个数码管LED2EQU51H LED3EQU52H LED4EQU53H LED5EQU54HLED6EQU55HLED7EQU56HLED8EQU57H TEMP1EQU58H TEMP2EQU59HTEMP3EQU5AHTEMP4EQU5BHTEMP5EQU5CHTEMP6EQU5DHTEMP7EQU5EHTEMP8EQU5FHTEMP9EQU60H;用于滚动显示时的寄存器TEMP10EQU61HTEMP11EQU62H TEMP12EQU63H/***************************主程序循环区**********************************/MAIN:MOVIE,#82H MOVTMOD,#01H MOVTH0,#0F1H;模式1,装载计数初始值,约4ms中断一次 MOVTL0,#0A4H MOVN,#00H MOVSP,#70H;重设堆栈指针 CLRCLK MOVN,#00MOVNN,#00CLRFLAG CLRJS MOVSEC,#00 ;时间 MOVMIN,#00 MOVHOUR,#08 MOVALSEC,#30 ;闹钟 MOVALMIN,#00 MOVALHOUR,#08 MOVD_SEC,#00 ;定时器的值 MOVD_MIN,#00 MOVD_HOUR,#00 MOVDAY,#09 ;日期 MOVMONTH,#03 MOVYEARL,#13 MOVYEARH,#20SETBTR0 LOOP: CALLTRANS;将要显示的数字转换成数码管的段码CALLLED_DISP;调用显示子程序CALLALARM_CLK;调用闹钟检测子程序 CALLSW;调用按键检测子程序 CJNEA,#00H,MOD1 CALLSET_TIMEJMPLOOP ;00键用于设定时间 MOD1:CJNEA,#01H,MOD2 CALLSET_DATE;01键用于设定日期JMPLOOPMOD2:;设置闹铃时间 CJNEA,#0DH,MOD3 CALLDATE_DISP;0D键用于日期滚动显示JMPLOOPMOD3:CJNEA,#02H,MOD4CALLSET_CLOCK;02键用于设定闹钟时间JMPLOOPMOD4:CJNEA,#03H,MOD5SETBFLAG CALLSTOPWATCH;03键用于进入秒表功能CLRFLAG JMPLOOPMOD5: CJNEA,#0AH,MOD6 CALLDINGSHI;0A键用于设定定时器 JMPLOOPMOD6:JMPLOOP/*Timer0的中断服务子程序:*/TIM0:PUSHACC INCN;加1MOVA,N CJNEA,#250,RET_1MOVN,#0 INCSEC;秒计数加1 MOVA,SEC CJNEA,#60,RET_1;是否到1min MOVSEC,#00 INCMIN;分计数加1MOVA,MIN CJNEA,#60,RET_1;是否到1h MOVMIN,#00 INCHOUR;时计数加1 MOVA,HOUR CJNEA,#24,RET_1;是否到1天INCDAY;天计数加1 MOVHOUR,#00 MOVDPTR,#MONTHTAB MOVA,MONTH MOVCA,@A+DPTR MOVB,DAY CJNEA,B,RET_1 ;是否到1月 INCMONTH;月计数加1 MOVDAY,#01 MOVA,MONTH CJNEA,#13,RET_1;是否到1年 MOVYEARL,#12 MOVYEARH,#20 MOVSEC,#00 MOVMIN,#00 MOVHOUR,#00 MOVDAY,#01 MOVMONTH,#01RET_1:MOVTL0,#0A4H MOVTH0,#0F1HPOPACC RETI/*将要显示的时间数字转换成数码管段码*/ TRANS: MOVDPTR,#TABLE MOVA,SEC MOVB,#10 DIVAB;ACC中存放秒的高位,B中存放秒的低位 MOVCA,@A+DPTR;读取程序存储器地址中的数据传送给A MOVLED2,A MOVA,B MOVCA,@A+DPTR MOVLED1,A MOVA,MIN MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED5,A MOVA,B MOVCA,@A+DPTR MOVLED4,A MOVA,HOUR MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED8,A MOVA,B MOVCA,@A+DPTR MOVLED7,A MOVLED3,#40H MOVLED6,#40HRET/*数码管显示*/LED_DISP:PUSH00HPUSH02HPUSH03H MOVR0,#LED1 MOVR3,#8 MOVA,#00H MOVR2,#01HLED_LOOP: MOVDPTR,#9000H MOVA,@R0 INCR0 MOVX@DPTR,A;把A的内容传送到16位的地址寄存器中 MOVDPTR,#8000H MOVA,R2 MOVX@DPTR,A RLA;A的各位依次左移一位 MOVR2,A CALLDELAY;延时1ms DJNZR3,LED_LOOPPOP03HPOP02HPOP00H RET/**设定时间**/SET_TIME:CLRTR0ST0: CALLTRANSCALLLED_DISP CALLSW CJNEA,#0CH,ST1 INCSEC;调节秒 MOVA,SEC CJNEA,#60,ST0MOVSEC,#00 JMPST0ST1:CJNEA,#08H,ST2 INCMIN;调节分 MOVA,MIN CJNEA,#60,ST0MOVMIN,#00 JMPST0ST2:CJNEA,#04H,ST3 INCHOUR;调节时 MOVA,HOUR CJNEA,#24,ST0MOVHOUR,#00 JMPST0ST3:CJNEA,#00H,ST0JMPRET_2RET_2:SETBTR0RET/***************************按键检测**********************************/SW: MOVDPTR,#9000H;先使所有数码管熄灭 MOVA,#00H MOVX@DPTR,A CALLKAP JNZKP1 JMPEND_SWKP1: CALLDELAY CALLKAP JNZKP2 ;扫描 JMPEND_SWKP2: MOVR2,#01H;R2代表扫描的行数 MOVR3,#00H MOVA,R2KP4: MOVX@DPTR,A MOVXA,@DPTR JNBACC.0,L1;第0列为0则检查第1列 MOVA,#00H JMPKP5L1: JNBACC.1,L2;第1列为0则检查第2列 MOVA,#04H JMPKP5L2: JNBACC.2,L3;第2列为0则检查第3列 MOVA,#08H JMPKP5L3: JNBACC.3,NEXT MOVA,#0CHKP5: ADDA,R3 PUSHACC;对应的键盘编号为(048C)KP3: CALLDELAY;159D CALLKAP;26AE JNZKP3;37BF POPACC RETNEXT: INCR3;扫描下一行 MOVA,R2 JBACC.3,END_SW;判断扫描是否结束,即当ACC.3=0时,各列均已扫描过 RLA MOVR2,A JMPKP4END_SW: MOVA,#010H;没有按键按下时,ACC的值为10HRETKAP: MOVDPTR,#8000H MOVA,#0FH MOVX@DPTR,A MOVXA,@DPTR ANLA,#0FH RET/***************************设定日期**********************************/SET_DATE:SD0:CALLTRANS1CALLLED_DISP CALLSW CJNEA,#0CH,SD1 INCDAY;调节日 MOVDPTR,#MONTHTABMOVA,MONTH MOVCA,@A+DPTR MOVB,DAY CJNEA,B,SD0MOVDAY,#01 JMPSD0SD1:CJNEA,#08H,SD2 INCMONTH;调节月 MOVA,MONTH CJNEA,#13,SD0MOVMONTH,#01 JMPSD0SD2:CJNEA,#04H,SD3 MOVYEARH,#20;调节年,2013年日历,故年份始终为2013 MOVYEARL,#13 JMPSD0SD3:CJNEA,#01H,SD0JMPRET_3RET_3:RET/***************************将要显示的日期转换成数码管的段码**********************************/TRANS1: MOVDPTR,#TABLE MOVA,DAY MOVB,#10 DIVAB;ACC中存放日的高位,B中存放日的低位 MOVCA,@A+DPTR MOVLED2,A MOVA,B MOVCA,@A+DPTR MOVLED1,A MOVA,MONTH MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED4,A MOVA,B MOVCA,@A+DPTR MOVLED3,A MOVA,YEARL MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED6,A MOVA,B MOVCA,@A+DPTR MOVLED5,A MOVA,YEARH MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED8,A MOVA,B MOVCA,@A+DPTR MOVLED7,ARET/***************************日期滚动显示**********************************/DATE_DISP: MOVDPTR,#TABLE MOVA,YEARH MOVB,#10 DIVAB MOVCA,@A+DPTR MOVTEMP1,A MOVA,B MOVCA,@A+DPTR MOVTEMP2,A MOVA,YEARL MOVB,#10 DIVAB MOVCA,@A+DPTR MOVTEMP3,A MOVA,B MOVCA,@A+DPTR MOVTEMP4,A MOVTEMP5,#40H MOVA,MONTH MOVB,#10 DIVAB MOVCA,@A+DPTR MOVTEMP6,A MOVA,B MOVCA,@A+DPTR MOVTEMP7,A MOVTEMP8,#40H MOVA,DAY MOVB,#10 DIVAB MOVCA,@A+DPTR MOVTEMP9,A MOVA,B MOVCA,@A+DPTR MOVTEMP10,A MOVTEMP11,#00 MOVTEMP12,#00;Temp1~12中依次存放日期(如2013-03-09空空) MOVLED1,#00 MOVLED2,#00MOVLED3,#00 MOVLED4,#00MOVLED5,#00 MOVLED6,#00MOVLED7,#00 MOV64H,#03;循环显示3次DD1: MOVR1,#TEMP1 MOVR4,#12;将12个Temp中的数字显示完DD2:MOVR5,#2FH;R5用来延时MOVLED8,LED7MOVLED7,LED6 MOVLED6,LED5MOVLED5,LED4 MOVLED4,LED3MOVLED3,LED2 MOVLED2,LED1MOVLED1,@R1DD3: CALLLED_DISP CALLSW CJNEA,#0DH,KEEPKEEP:DJNZR5,DD3INCR1 DJNZR4,DD2 DJNZ64H,DD1/***************************将要显示的闹钟设定时间转换成数码管的段码**********************************/TRANS2: MOVDPTR,#TABLE MOVA,ALSEC MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED2,A MOVA,B MOVCA,@A+DPTR MOVLED1,A MOVA,ALMIN MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED5,A MOVA,B MOVCA,@A+DPTR MOVLED4,A MOVA,ALHOUR MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED8,A MOVA,B MOVCA,@A+DPTR MOVLED7,AJBCLK,TR_1MOVLED3,#08H MOVLED6,#08H JMPRET_5TR_1:MOVLED3,#80HMOVLED6,#80H;闹钟开着时,LED3和LED6显示.闹钟取消时,显示_RET_5:RET /***************************设定闹钟时间**********************************/SET_CLOCK:SC0: CALLTRANS2CALLLED_DISP CALLSW CJNEA,#0CH,SC1 INCALSEC;调节秒 MOVA,ALSEC CJNEA,#60,SC0MOVALSEC,#00 JMPSC0SC1:CJNEA,#08H,SC2 INCALMIN;调节分 MOVA,ALMIN CJNEA,#60,SC0MOVALMIN,#00 JMPSC0SC2:CJNEA,#04H,SC3 INCALHOUR;调节时 MOVA,ALHOUR CJNEA,#24,SC0MOVALHOUR,#00 JMPSC0SC3:CJNEA,#02H,SC4JMPRET_6SC4:CJNEA,#0EH,SC0CPLCLK JMPSC0 RET_6:RET/***************************检查闹钟是否到点**********************************/ALARM_CLK: JNBCLK,RET_7 MOVA,SEC;检查秒 CJNEA,ALSEC,RET_7 MOVA,MIN;检查分 CJNEA,ALMIN,RET_7 MOVA,HOUR;检查时 CJNEA,ALHOUR,RET_7 CALLMUSICRET_7:RET/**************************检查是否整点******************************/ZHENGDIAN:JNBCLK,RET_16MOVA,SECCJNEA,#00H,RET_16MOVA,MINCJNEA.#00H,RET_16MOVA,HOURCJNEA,#0AH,RET_17CALLMUSICRET_16: RET/***************************音乐**********************************/MUSIC: MOVTMOD,#11H;Timer1,Timer0工作在模式1 MOVIE,#8AH;使能Timer0和Timer1 MOV65H,#00H;递增的指针寄存器 MOVDPTR,#MUSICTABLOOP1: MOVDPTR,#MUSICTABMOVA,65H MOVCA,@A+DPTR MOVR4,A;R4中存放音调的高八位 INC65H MOVA,65H MOVCA,@A+DPTR MOVR5,A;R5中存放音调的低八位 JZRET_8;全0为乐曲结束符MUSIC1:MOVTH1,R4 MOVTL1,R5SETBTR1 INC65H MOVA,65H MOVCA,@A+DPTR MOVR1,A;R1中存放节拍信息MUSIC2: CALLDLY5ms CALLTRANS CALLLED_DISP CALLSW CJNEA,#0FH,MUSIC3;0F键用于关掉正在响的闹钟JMPRET_8MUSIC3: DJNZR1,MUSIC2INC65HJMPLOOP1RET_8: CLRTR1 SETBP1.6 RET/***************************音乐**********************************/MUSIC5: MOVTMOD,#11H;Timer1,Timer0工作在模式1 MOVIE,#8AH;使能Timer0和Timer1 MOV65H,#00H;递增的指针寄存器 MOVDPTR,#MUSICTABLOOP2: MOVDPTR,#MUSICTABMOVA,65H MOVCA,@A+DPTR MOVR4,A;R4中存放音调的高八位 INC65H MOVA,65H MOVCA,@A+DPTR MOVR5,A;R5中存放音调的低八位 JZRET_8;全0为乐曲结束符MUSIC6:MOVTH1,R4 MOVTL1,R5SETBTR1 INC65H MOVA,65H MOVCA,@A+DPTR MOVR1,A;R1中存放节拍信息MUSIC7: CALLDLY5ms; CALLTRANS; CALLLED_DISP CALLSW CJNEA,#0FH,MUSIC8;0F键用于关掉正在响的闹钟JMPRET_31MUSIC8: DJNZR1,MUSIC7INC65HJMPLOOP1RET_31: CLRTR1 SETBP1.6 RET/***************************Timer1中断服务子程序**********************************/TIM1:;JBFLAG2,DSQ;DSQ用于定时器JBFLAG,STOPMOVTH1,R4;用于音乐 MOVTL1,R5 CPLP1.6JMPRET_11STOP:PUSHACC;STOP用于秒表 INCSTOP_MS MOVA,STOP_MS CJNEA,#100,RET_9;是否到1S MOVSTOP_MS,#00 INCSTOP_SMOVA,STOP_S CJNEA,#60,RET_9;是否到1MIN MOVSTOP_S,#00 INCSTOP_MIN MOVA,STOP_MIN CJNEA,#60,RET_9MOVSTOP_MIN,#00RET_9:MOVTL1,#0FFH MOVTH1,#0DBHPOPACCJMPRET_11RET_11:RETI/***************************秒表程序**********************************/STOPWATCH: MOVTMOD,#11H;Timer1,Timer0工作在模式1 MOVIE,#8AH;使能Timer0和Timer1 MOVTH1,#0DBH MOVTL1,#0FFH;10ms中断一次MOVSTOP_MS,#00 MOVSTOP_S,#00 MOVSTOP_MIN,#00W0:CALLTRANS3 CALLLED_DISP CALLSW CJNEA,#07H,W1;07键用于秒表启动/暂停W0_2:SETBTR1W0_1:CALLTRANS3 CALLLED_DISP CALLSW CJNEA,#07H,W0_1JMPPAUSEW1:CJNEA,#0BH,W2;0B键用于秒表清零MOVSTOP_MS,#00 MOVSTOP_S,#00 MOVSTOP_MIN,#00JMPW0W2:CJNEA,#03H,W0JMPRET_10PAUSE:CLRTR1CALLTRANS3 CALLLED_DISPCALLSW CJNEA,#07H,W1 JMPW0_2RET_10:CLRTR1RET/***************************将要显示的秒表数字转换成数码管段码**********************************/ TRANS3: MOVDPTR,#TABLE MOVA,STOP_MS MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED2,A MOVA,B MOVCA,@A+DPTR MOVLED1,A MOVA,STOP_S MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED5,A MOVA,B MOVCA,@A+DPTR MOVLED4,A MOVA,STOP_MIN MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED8,A MOVA,B MOVCA,@A+DPTR MOVLED7,A MOVLED3,#40H MOVLED6,#40HRET/***************************将要显示的定时器设定时间转换成数码管的段码**********************************/TRANS4: MOVDPTR,#TABLE MOVA,D_SEC MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED2,A MOVA,B MOVCA,@A+DPTR MOVLED1,A MOVA,D_MIN MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED5,A MOVA,B MOVCA,@A+DPTR MOVLED4,A MOVA,D_HOUR MOVB,#10 DIVAB MOVCA,@A+DPTR MOVLED8,A MOVA,B MOVCA,@A+DPTR MOVLED7,ATK_1:MOVLED3,#40HMOVLED6,#40H;定时器开着时,LED3和LED6显示_RET_13:RET/***************************设定定时器时间**********************************/SET_DING:SI0: CALLTRANS4CALLLED_DISP CALLSW CJNEA,#0CH,SI1 INCD_SEC;调节秒 MOVA,D_SEC CJNEA,#60,SI0MOVD_SEC,#00 JMPSI0SI1:CJNEA,#08H,SI2 INCD_MIN;调节分 MOVA,D_MIN CJNEA,#60,SI0MOVD_MIN,#00 JMPSI0SI2:CJNEA,#04H,SI3 INCD_HOUR;调节时 MOVA,D_HOUR CJNEA,#24,SI0MOVD_HOUR,#00 JMPSI0SI3:CJNEA,#0EH,SI4SETBJSJMPRRETSI4:CJNEA,#06H,SI0RRET:RET/***************************定时器程序**********************************/DINGSHI:CALLSET_DINGDG: JNBJS,RET_12CALLDLYCALLJISHI CALLTRANS4 CALLLED_DISPCALLSWCJNEA,#06H,DGJMPRET_12RET_12:MOVD_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版无人驾驶技术研发公司股权转让及合作生产合同3篇
- 二零二五年网络安全违约责任承担详细合同解析3篇
- 二零二五年钢板桩租赁与施工方案优化合同3篇
- 二零二五版水电安装工程节能改造与施工合同2篇
- 二零二五版房产代持权违约责任合同范本3篇
- 二零二五年窗帘艺术中心窗帘定制合同3篇
- 二零二五年度高品质地暖系统安装与维护服务合同书2篇
- 二零二五版海洋工程建设项目担保合同3篇
- 二零二五年度酒店窗帘改造升级合同2篇
- 二零二五版服务器租赁与云存储解决方案合同3篇
- 2024年全国统一高考数学试卷(新高考Ⅱ)含答案
- 【中小企业融资难问题探究的国内外综述5800字】
- DL∕T 2138-2020 电力专利价值评估规范
- 深圳市购物中心租金调查
- 我国无菌包装行业消费量已超千亿包-下游需求仍存扩容潜力
- 大数据管理与考核制度大全
- 大学面试后感谢信
- 2022届上海高考语文调研试测卷详解(有《畏斋记》“《江表传》曰…”译文)
- SBT11229-2021互联网旧货交易平台建设和管理规范
- 如何打造顶尖理财顾问团队
- 土壤农化分析课件
评论
0/150
提交评论