数字时钟设计(含完整程序)

上传人:岁月****20 文档编号:55444599 上传时间:2022-02-18 格式:DOCX 页数:12 大小:302.74KB
收藏 版权申诉 举报 下载
数字时钟设计(含完整程序)_第1页
第1页 / 共12页
数字时钟设计(含完整程序)_第2页
第2页 / 共12页
数字时钟设计(含完整程序)_第3页
第3页 / 共12页
资源描述:

《数字时钟设计(含完整程序)》由会员分享,可在线阅读,更多相关《数字时钟设计(含完整程序)(12页珍藏版)》请在装配图网上搜索。

1、电子时钟设计一、实验目的学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。二、设计任务及要求利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟,要求:1 .在4位数码管上显示当前时间,显示格式为时时分分”;2 .由LED闪动做秒显示;3 .利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。三、工作原理及设计思路利用单片机定时器完成计时功能,定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。为了将

2、时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。闹铃声由交流蜂鸣器产生,电路如右图,当P1.7输出不同频率的方波,蜂鸣器便会发出不同的尸日。BuzzerPL.7Q10K四、硬件电路设计及描述由于扩展了外部存储器,P0口只能作地址/数据总线,P2口只能作地址总线高8位,P3.7、P3.6作为外部数据存储器读写信号。P3.0、P3.1作为串行输入、输出接口,在仿真模式下完成与PC机的通信,故也不可用。实验仪上单片机可用作I/O的口仅有:P1.0-P1.7,8位;P3.2、P3.3、P3.4、P3.5,4位。其中:P1.

3、0用作数据线SDA,P1.1用作时钟信号CLK所以P1.0和P1.1应该接对应跳线的A位,即跳线的中间和下面相连。P1.3、P1.4、P1.5和P1.6是四个数码管的位扫描线,其中P1.6对应数码管W1,显示小时高位;P1.5对应数码管W2,显示小时低位;P1.4对应数码管W3,显示分钟高位;P1.3对应数码管W4,显示分钟低位。P1.7连接蜂鸣器电路,输出不同频率的方波,使其发出不同的声音。P1.2用来控制秒的闪烁显示。故,P1.2也应该接对应跳线的A位。其显示电路如下图:串CLKP10F11P12P13P14PL5F16PITW1 W2 3 W4P3.2、P3.3、P3.4、P3.5分别连

4、接单刀双掷开关S1、S2、S3、S4,从而输入高低电平。将S2S1定义为功能模式选择开关;S3定义为分钟数调整开关;S4定义为小时数调整开关。当S2S1=00时,显示当前时间,不进行任何操作。当S2S1=01时,显示当前时间,同时可进行时钟调整,若S3=1,分钟数持续加1,若S4=1,小时数持续加1。当S2S1=10时,显示闹钟时间,同时可进行闹钟调整,若S3=1,分钟数持续加1,若S4=1,小时数持续加1。当S2S1=11时,显示当前时间,同时关闭闹钟。音节由不同频率的方波产生,音节与频率的关系如表1所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时

5、间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选才I器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。只要设定延时时间,就可求得节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍,每个音节相应的定时器初值X可按下法计算:(1/2)*(1/f)=(12/fose)*(216-x)即x=216-(fose/

6、24f)其中f:音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H其它的可同样求得。在单片机上控制一个音符唱多长可采用循环延时的方法来实现。首先,我们确定一个基本时长的延时程序,比如说以十六分音符的时长为基本延时时间,那么,对于一个音符,如果它为十六分音符,则只需调用一次延时程序,如果它为八分音符,则只需调用二次延时程序,如果它为四分音符,则只需调用四次延时程序,依次类推。通过上面关于一个音符音调和节拍的确定方法,我们就可以在单片机上实现演奏音乐了。具体的实现方法为:将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,

7、将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数;如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。五、软件设计流程及描述六、源程序代码及注释注:首先将单片机用到的主要寄存器做下说明(如下);P1.2作秒的闪烁控制位;P1.7作响铃控制电平;P3.2、P3.3作模式选择键S2、S1;P3.4作分调整键$3(分钟数+1);P3.5作时调整键S4(小日数+1);R0为计数

8、5ms的次数;R1为秒数;R2为分钟数;R3为时钟数;R4在显示程序中作为向LED传递数据时的左移次数标志位;R4在音乐闹铃程序中读取TABLE中的数据;R5作为节拍长度;40H作显示的分;41H作显示的时;42H作闹钟的分;43H作闹钟的时;63H、64H存放延日程序DELAY的延时数;60H、61H作定日器T1的初值。;*主程序*S1BITP3.2;定义模式选择键S2、S1S2BITP3.3S3BITP3.4;定义时调整键S4分调整键S3S4BITP3.5SDABITP1.0CLKBITP1.1ORG0000HAJMPMAINORG000BH;T0的中断服务程序的入口地址AJMPTIMER

9、;跳转到时钟走时中断服务程序ORG001BH;T1的中断服务程序的入口地址AJMPALARM_OPEN;跳转到闹钟响铃中断服务程序ORG0030HMAIN:MOV40H,#00;显示的分MOV41H,#00;显示的时MOV42H,#58;闹钟的分MOV43H,#23;闹钟的时MOVR0,#00H;寄存器清零(RO为计数5ms的次数,R1为秒数,MOVR1,#00H;R2为分钟数,R3为时钟数)MOVR2,#00HMOVR3,#00HMOVTMOD,#11H;设直T0,T1处于工作方式1MOVTH0,#0EEH;设置定时器的初值MOVTL0,#00HSETBEA;允许总中断SEIHEI0;允许T

10、0,T1中断SETBET1SETBTR0;启动T0LOOP:LCALLDISPLAY1;调用显示程序LCALLALARM;调用闹铃程序LCALLMODE;调用模式判断程序AJMPLOOP*时钟显示部分*DISPLAY1:MOVDPTR,#TAB1MOVA,41HMOVB,#10DIV AB LCALLDISP1CLR P1.6LCALLDELAYSETBP1.6JBP1.2,TDAJMPTD1TD:MOVA,BAJMPTD2TD1:MOV A,BADDA,#10TD2:LCALL DISP1CLR P1.5 LCALLDELAYSETBP1.5MOVA,40HMOVDIV ABB,#10LCA

11、LLDISP1CLR P1.4LCALLDELAYSETBP1.4MOVA,BLCALLDISP1CLR P1.3 LCALLDELAYSETBP1.3RETDISP1:MOVCA,A+DPTR一个8位数码管显示字形数据MOVR4,#08HDUP1:RLC AMOVSDA,CCLR CLKSETBCLKDJNZR4,DUP1RET* ;DISPLAY2:MOV DPTR,#TAB1MOVA,43HMOV B,#10DIV ABLCALL DISP2CLR P1.6;LED1数码管显示数码,即小时的高位;控制LED2数码管的小数点dp闪烁;LED2数码管显示数码,即小时的低位;LED3数码管显示

12、数码,即分钟的高位;LED4数码管显示数码,即分钟的低位;LED串并转换口从P1.0接收;R4记作左循环的次数;A带进位左循环移位;上升沿触发数据接收闹钟显示部分*;LED1数码管显示数码,即小时的高位LCALLDELAYSETBP1.6MOVA,BLCALLDISP2CLR P1.5LCALLDELAYSETBP1.5MOVA,42HMOVB,#10DIV AB LCALLDISP2CLR P1.4LCALLDELAYSETBP1.4MOVA,BLCALLDISP2CLR P1.3 LCALLDELAYSETBP1.3RETDISP2: MOVC A,A+DPTR一个8位数码管显示字形数据M

13、OVR4,#08 HDUP2:RLC AMOVSDA,CCLR CLKSETBCLKDJNZR4,DUP2RET.*;ALARM:MOVA,40HCJNEA,#00H,MUSICLJMPB2MUSIC:MOVA,43HCJNEA,41H,B1MOVA,42HCJNEA,40H,B1SETB1.7MOV70H,#00HNEXT:MOVA,70HMOVDPTR,#TABLEMOVCA,A+DPTRMOVR4,AJZEND0ANLA,#0FHMOVR5,AMOVA,R4SWAPA;LED2数码管显示数码,即小时的低位;LED3数码管显示数码,即分钟的高位;LED4数码管显示数码,即分钟的低位;LED

14、串并转换口从P1.0接收;R4记作左循环的次数;A带进位左循环移位;上升沿触发数据接收判断闹钟时间是否到来*;整点闹铃;音乐闹铃;从TABLE中读取数据一一声响时间;将TABLE中读取的数据存放在R4;R5作为节拍长度ANLA,#0FHJNZSINGCLRTR1JMPD1SING:DECAMOV62H,ARLAMOVDPTR,#TABLE1;从TABLE1中读取数据声调MOVCA,A+DPTRMOVTH1,A;设定TH1值MOV61H,AMOVA,62HRLAINCAMOVCA,A+DPTRMOVTL1,A;设定TL1值MOV60H,AMOVTH1,61HMOVTL1,60HSETBTR1D1

15、:ACALLDELAY0;声音延时INC70HJMPNEXTEND0:CLRTR1JMPMUSICDELAY0:MOVR7,#2;R5的值就是声响持续时间D2:MOVR6,#214D3:MOVR4,#245DJNZR4,$DJNZR6,D3DJNZR7,D2DJNZR5,DELAY0RETB1:CLRTR1RETB2:MOV61H,#0FEHMOV60H,#033HMOVTH1,61HMOVTL1,60H方波频率设为1KHzSETBTR1;*闹钟响铃中断服务程序*ALARM_OPEN:PUSHACCPUSHPSWMOVTH1,61HMOVTL1,60HCPLP1.7POPPSWPOPACCRE

16、TI.*;时钟走时中断服务程序*TIMER:MOVTH0,#0ECH;重新对T0赋值,设置中断时间为5msMOVTL0,#78HMOV40H,R2MOV41H,R3INCR0;计数5ms的次数加1CJNER0,#200,BACK;不够200次,跳转到BACKCPLP1.2;够200次,P1.2翻转控制LED闪动一下MOVR0,#00H;计数5ms的次数清0,秒数加1INCR1CJNER1,#60,BACK;不够60秒,跳转到BACKMOVR1,#00H;够60秒,秒数清0,分钟加1INCR2CJNER2,#60,BACK;够60分钟,跳转到BACKMOVR2,#00H;够60分钟,分钟数清0,

17、小时数加1INCR3CJNER3,#24,BACK;够24小时,跳转到BACKMOVR3,#00H;够24小时,小时数清0BACK:RETI.*按键判断部分*MODE:MOVA,P3;软件消抖后再判断LCALLDELAYCJNEA,P3,MODEANLA,#0CH;对S2、S1的值判断CJNEA,#00H,LOP1AJMPT_BACK;模式为00,开T1中断LOP1:CJNEA,#04H,LOP2AJMPT_CHANGE;模式为01,进行时间调整LOP2:CJNEA,#08H,LOP3AJMPA_CHANGE;模式为10,进行闹铃调整LOP3:AJMPA_CLOSE;模式为11,关闭闹钟;时钟

18、调整.T_CHANGE:LCALLDISPLAY1LCALLDELAY1JNBS3,T_HOUR;S3为0,判断S4T_MIN:MOVR5,40HINCR5;S3为1,分钟数加1CJNER5,#60,LOP4MOVR5,#00HLOP4:MOV40H,R5MOVR2,40HAJMPMODET_HOURJNBS4,MODE;S4为0,跳转至ijMODEMOVR5,41HINCR5;S4为,小时数加1CJNER5,#24,LOP5LOP5:MOVMOVMOVAJMPR5,#00H41H,R5R3,41HMODE;闹铃调整A_CHANGE:LCALLDISPLAY2LCALLDELAY2JNBS3,

19、A_HOUR;S3为0,判断S4A_MIN:MOVR5,42HINCR5;S3为1,分钟数加1CJNER5,#60,LOP6MOVR5,#00HLOP6:MOV42H,R5AJMPMODEA_HOUR:JNBS4,MODE;S4为0,跳转至UMODEMOVR5,43HINCR5;S4为1,小时数加1CJNER5,#24,LOP7MOVR5,#00HLOP7:MOV43H,R5AJMPMODE;返回T_BACK:SETBET1;开T1中断RETA_CLOSE:CLRET1;关T1中断RET;*延时程序*DELAY:MOV63H,#5H;约2.78msD5:MOV64H,#0FFHDJNZ64H,

20、$DJNZ63H,D5RET;*延时程序1*DELAY1:MOVR7,#50HD6:LCALLDISPLAY1DJNZR7,D6RET;*延时程序2*DELAY2:MOVR7,#50HD7:LCALLDISPLAY2DJNZR7,D7RET;*数码管显示白字形表*TAB1:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;数字09,不带小数点dpDB40H,79H,24H,30H,19H,12H,02H,78H,00H,10H;数字09,带小数点dp;*音乐的节拍表*TABLE:DB82H,01H,81H,94H,84H,0B4H,0A4H,04HD

21、B82H,01H,81H,94H,84H,0C4H,0B4H,04HDB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94HDB0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB82H,01H,81H,94H,84H,0B4H,0A4H,94HDB0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94HDB0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB00H;*由音乐音符设置的T1计数值*TABLE1:DW64260,6444

22、0,64524,64580,64684,64777,64820,64898;音符计数值DW64968,65030,65058,65110,65157,65178,65217END七、实验过程将P1.0、P1.1、P1.3、P1.4、P1.5、P1.6、P3.0、P3.1的跳线接相应的A位,P1.7的跳线接相应的C位,拔掉其它不用的跳线。插好电源,插好通信线,打开实验仪电源开关,在实验上将工作模式开关SX拨到“LOAD”一档,按下复位开头RESET然后启动DPFlash,单击“编程”,在弹出的窗口中选中“编程MON51,再按“确定”,就将程序下载到单片机的Flash中。关闭DPFlash,启动K

23、eil,新建一个工程,然后选择芯片(PhilipsP80/P87C52X2)。编写汇编语言程序,保存并添加至工程中,然后进行编译。将实验台上的工作模式开关SX拨到“MON”位置,按下RESE虑位开关,设置S0、S1、S3和S4的状态,再运行程序,拨动SRS1、S3和S4对应的开头,检查电子时钟功能是否完整。多次调试、修改程序,直至能正常实现设计的功能为止。八、实验总结这次做的单片机实验,有不少需要注意的问题,还遇到了很多问题,在解决问题的过程中也学到了很多东西。首先是跳线的问题。在仿真模式下,跳线选择器JP2中的P3.0、P3.1必须置A位。其次是软件设置的问题。刚开始没注意,一直出问题。设置

24、工程的工作环境,要按书上所讲解的进行一步一步设置。而若是进行调试的话应将“编程MON51”下载到单片机的Flash中,而若要全速运行的话应将汇编程序生产的hex文件载入,并在编程窗口中选编程文件区将hex文件载入在单片机中。另外还有一点值得注意的是,在进行调试时,编程的起始地址为4000H,对应中断的入口地址为400BH和401BH。若是全速运行的情况下,编程的起始地址为0000H,对应中断的入口地址为000BH和001BH。这是因为单片机的实际中断入口地址分别为0003H、000BH、0013H、001BH;而使用调试时,片内的0000H-3FFFH被编程MON51程序所占用,因此编写的程序

25、块起始地址规定从4000H开始。再次,就是程序的问题了。程序中有中英文字符混用的问题,还有标号书写错误和寄存器冲突等问题。一开始走时程序里我用到了寄存器,后来音乐程序里又用到了相同的寄存器。最后,编程的开始我设计的整点闹铃,声音都不能发出清脆的声音,一开始以为是机子的问题,将产生1KHz的方波的程序单独编写,却能发出清楚的蜂鸣声。因此确定是程序的问题,在对程序仔细检查下仍然没有发现错误。之后我继续编写音乐闹铃的程序,在理解电子琴的程序的编程原理及程序后,将其引用并做适当修改,结果能奏出很好的音乐声。将整点闹铃程序与音乐闹铃程序进行对比,发现是因为在T1初值的设定,只是在外部设置了,而并没有在中断程序中在赋初值。在用单步调试的方法检查,也确实是这个问题。修改过来后问题也得到了解决。总之,这次的课设收获很多。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!