单片机课程设计-电子时钟 (2).doc_第1页
单片机课程设计-电子时钟 (2).doc_第2页
单片机课程设计-电子时钟 (2).doc_第3页
单片机课程设计-电子时钟 (2).doc_第4页
单片机课程设计-电子时钟 (2).doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机实训单片机课程设计 -定时闹铃 系别: 电子通信工程系 专业: 应用电子技术 班级: 嵌入式091班 姓名:黄 学号: 2009080202338 实训地点: 实训时间:2011年1月10日至1月14日1.概述1.1 系统的作用本系统是利用stc89c52单片机结合6个七段显示器以24时制“时时分分秒秒”格式显示时间的电子定时闹铃,系统可以设置2组定时闹铃;当定时闹铃时,该电子时钟通过蜂鸣器发出嘀嘀嘀嘀响声;本系统还具有整点报时功能,当现在时间为整点报时。还有秒表功能,由于该电子定时闹铃有强大功能可以在多种场合下使用,利用七段显示器发光也可以在夜晚和黑暗场合下使用。1.2 系统的功能要求(1)使用6位七段显示器显示24时制时间。(2)时间显示格式为“时时分分秒秒”。(3)定时闹铃功能。(4)整点报时功能:当现在时间为整点时响铃。(5)定时闹铃和现在时间模式可以互相切换而不影响各自功能。(6)具有4个按键来进行功能设置,可以设置当前时间、闹铃的时间设置和秒表开关设置。(7)具有秒表计时功能(8)调时区域闪烁(9)通过复位按键可以重启系统。2.系统的硬件设计2.1系统的电路原理(1)系统以stc89c52单片机为本电路的核心元件,通过单片机的p0.0p0.7引脚和a102j排阻加上拉电压来驱动七段显示器段显示数字。(2)通过单片机的p2.2p2.7引脚连接a103j排阻拉升电压信号,控制共阴极七段显示器连通接地来循环点亮6位七段显示器。(3)在七段显示器供电的同时由p0脚驱动显示不同数字。根据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定的数字。(4)系统使用了yxdz蜂鸣器,通过单片机p3.0引脚连接8550pnp三极管推动发声。(5)电路通过4个按键连接单片机p1.0p1.3引脚低电平控制系统功能设置。(6)单片机的复位电路,采用传统上电复位,通过reset按键控制。(7)系统通过一个发光二极管指示电路供电是或正常。2.2 电原理图图1 控制电路2.3 各控制按钮控制功能说明系统接通电源后指示灯led亮,程序执行后工作,蜂鸣器发出两声响声,七段显示器显示“00 00 00”,表示程序开始执行,然后显示现在时间,按下操作键k1k4动作如下:(1)按操作键k1,进入“设置现在时间”模式后,操作键功能如下: 操作键k1:当前区域加1。 操作键k2:当前区域减1。 操作键k3:分、时区域切换。 操作键k4:设置完成,退出。(2)按操作键k2,进入“显示、设置闹铃时间”模式后,操作键功能如下: 操作键k1:当前闹铃区域加1。 操作键k2:当前闹铃区域减1。 操作键k3:分、时区域切换 操作键k4:第一次进入第二组,第二次为退出。(3)按操作键k3:进入“秒表”模式后,操作键功能如下: 操作键k1:启动秒表。 操作键k2:停止秒表。 操作键k3:清零。 操作键k4:退出。(4)按操作键k4:在响铃时关闭闹钟自动退出,不是响铃则进入“设置闹铃的开关”模式后,操作键功能如下: 操作键k1:启动当前闹铃。 操作键k2:停止当前闹铃。 操作键k3:切换闹铃组。 操作键k4:设置完成,退出。(5)按操作键reset:复位键,系统重启。3.软件设计3.1 资源分配表和程序流程图表一 程序内存资源分配表内存地址变量名称作用说明20h存放50毫秒计时21h存放0.5秒计时22hsecon存放1秒计时23hmin存放1分计时24hhour存放1小时计时25h用于中断1(#6h)26h用于显示中的闪烁27h.0闹钟标志位27h.1允许响铃27h.2用于标志分、秒(1为秒),闹钟功能时也一样27h.3闹钟总开关(1为开)27h.4用于闪烁标志27h.5用于闪烁27h.6秒表标志27h.7两组闹钟的标志位,默认值为028h-29h用于保存闪烁时的调时区地址30h-35h存放调时区地址36hdisp用于存放要显示的首字(例如秒)37h-39h第一组闹钟的时分40hsp栈底50h-52h 秒表53h-55h第二组闹钟的时分56h存放闹钟调分地址57h存放闹钟调时地址2ah.0闹钟组的切换标志(默认值为0)2ah.1切换(默认值为0)2ah.2闹钟第二组开关(默认值为0)表二 芯片端口资源分配表芯片端口变量名称作用说明p1.0k1操作键k1p1.1k2操作键k2p1.2k3操作键k3p1.3k4操作键k4p1.7spk压电喇叭控制信号p0七段显示器数数字形状控制p2.2控制时间小时的十位七段显示器亮灭p2.3控制时间小时的个位七段显示器亮灭p2.4控制时间分钟的十位七段显示器亮灭p2.5控制时间分钟的个位七段显示器亮灭p2.6控制时间秒钟的十位七段显示器亮灭p2.7控制时间秒钟的个位七段显示器亮灭p3.0bell蜂鸣器p3.1led半秒闪烁p3.2led显示第一组闹钟是否开启p3.3led显示第二组闹钟是否开启表三 寄存器资源分配表组寄存器作用说明第0组r0存放秒显示地址r1显示首址r2#06hr3#0fehr4#3hr6、r7延时初始值第1组r0用于keyb、cr5用于中断图2主程序控制流程图初始化定时器nyy进入“设置闹铃的开关”模式进入“秒表”模式y进入“显示、设置闹铃时间”模式进入“设置现在时间”模式nn是否按k4键?是否按k3键?是否按k2键?ny是否按k1键?扫描显示器更新时间,启动定时器t0初始化变量开始nnnyyyy退出调时区切换当前区减1当前区加1key3key2key4key1更新时间显示设置现在时间n切换二组闹铃第一次更新显示nnyyyy退出时分切换当前区减1当前区加1key3key2key4key1转换闹铃模式显示设置闹铃时间 nnnyyyy退出清零关闭启动key3key2key4key1秒表显示秒表显示key1nnyyyy退出闹铃组切换关当前闹铃开当前闹铃key3key2key4闹钟正在响关闭响铃秒表n中断程序t0置标志位n检测闹铃时变量变0yy整点报时时变量=24分=0时加1分变量=60秒=0分加1nyyy清标志位21h=2 次数到检查闹铃开、关响铃nnyyyy1yn0n秒变量加1秒变量=60标志位21h加1半秒指示灯闪累加器入栈重新载入计数初值、定时器计数10次计时中断程序开始计时中断程序结束将累加器出栈中断程序t1111000分=60秒=60中断返回分变量=0秒变量=0分变量加1毫秒变量=0秒变量加110毫秒单元加1毫秒=1000重装初始值中断返回106次取反闪烁标志01重装初始值中断程序1开始用以闪烁、秒表标志位3.2 源程序清单本系统程序清单如下:;-;8052 clock with segx6 clock + 2alarm + timer + sw;时钟+2闹钟+响铃+秒表;89c52 asm use:keil;-程序功能说明-;-k1:设置现在时间; -k1:当前单元加1; -k2:当前单元减1; -k3:切换单元区; -k4:ok;-k2:显示和设置闹铃时间,2个闹铃; -k1:当前单元加1; -k2:当前单元减1; -k3:切换单元区; -k4:切换闹铃组,第二次为ok;-k3:设置秒表 ; -k1:秒表启动; -k2:秒表暂停; -k2:秒表清零; -k4:ok;-k4:设置闹铃开关(当真正闹铃时停掉闹钟并退出); -k1:当前闹铃组开; -k2:当前闹铃组关; -k3:切换闹组; -k4:ok;-key1 equ p1.0;调时间调分再调时key2 equ p1.1key3 equ p1.2key4 equ p1.3secon equ 22h;时钟的秒min equ 23hhour equ 24hdisp equ 36h;显示的首地址存放bell bit p3.0org 0000h ljmp start org 000bh ljmp t0_intorg 001bhljmp t1_int org 0100hstart: mov 20h,#00hmov 21h,#00h ;0.5秒计时 mov 22h,#00h ;1秒计时 mov 23h,#00h ;1分计时 mov 24h,#00h ;1h计时mov 38h,#01h ;闹钟分mov 39h,#00h ;闹钟时mov 37h,#101 ;第一组闹钟的首字节显示-1mov 53h,#102 ;第二组闹铃的首字节显示”-2“mov 25h,#6h ;中断1,50ms*6=0.3s闪烁一次 mov tmod,#11hmov tl1,#0b0hmov th1,#3ch mov tl0,#0b0h mov th0,#3ch setb et0setb et1 setb ea setb tr0mov sp,#40h;*主程序*main:mov disp,#seconlcall displaylcall keyalcall keyblcall keyclcall keydsjmp main/*数码管显示*/display:push pswmov psw,#08h;用第二组寄存器mov r0,dispmov r1,#30hmov r4,#03h;秒分时loop0:mov a,r0mov b,#10div abmov r1,binc r1mov r1,ainc r0inc r1djnz r4,loop0diskey:mov r1,#30h ;显示缓冲区首址 mov r2,#06h mov r3,#0fehclr 27h.5mov 29h,28hplay: mov a,r1 mov dptr,#table movc a,a+dptr;*闪烁用jnb 27h.4,wen;在调时时用作熄灭,1为开mov 26h,amov a,r1cjne a,29h,wen1jb 27h.5,lppc1inc 29hsetb 27h.5lppc1:clr asjmp wenwen1: mov a,26h;*wen: mov p0,amov p2,r3 inc r1 lcall delay mov a,r3 rl amov r3,adjnz r2,playpop pswretdelay: mov r6,#4d1: mov r7,#250d0: djnz r7,d0 djnz r6,d1 rettable: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h/*中断t0处理*/t0_int: mov tl0,#0b0h mov th0,#3chpush acc inc 20h mov a,20h cjne a,#10,exitjnb 27h.3,lqq1sjmp lqq2lqq1:jnb 2ah.2,lp0lqq2:jnb 27h.1,lp0;闹铃检查1响cpl belldjnz r5,lp0;响铃次数setb bellclr 27h.1lp0: mov 20h,#00h cpl p3.1;半秒led闪烁 inc 21hmov a,21hcjne a,#2,exitsetb bell;关闭整点报时 mov 21h,#00hinc secon mov a,seconcjne a,#60,exitsetb 27h.0;闹钟检查标志mov secon,#00h inc min mov a,mincjne a,#60,exitcpl bell;整点报时启动 mov min,#00h inc hour mov a,hourcjne a,#24,exit mov hour,#00hexit: jnb 27h.3,exitq;闹铃1组开关1为开 jnb 27h.0,exitq;闹钟检查mov a,mincjne a,38h,exitqmov a,hourcjne a,39h,exitqsetb 27h.1mov r5,#120exitq:jnb 2ah.2,exit1jnb 27h.0,exit1clr 27h.0mov a,mincjne a,54h,exit1mov a,hourcjne a,55h,exit1setb 27h.1mov r5,#120exit1:pop accreti;*;*key1*keya:jb key1,loop1lcall displaylcall displayjb key1,loop1jnb key1,$clr tr0mov 28h,#32h;从分闪烁setb tr1mov secon,#0hsetb 27h.2mov r0,#min;*lcp0:lcall displayjb key3,lcp1lcall displaylcall displayjnb key3,$cpl 27h.2jb 27h.2,lp1mov r0,#hourmov 28h,#34hsjmp lcp1lp1:mov r0,#minmov 28h,#32hlcp1:jb key1,lcp2lcall displaylcall displayjb key1,lcp2jnb key1,$lcall add1lcp2:jb key2,lcp5lcall displaylcall displayjb key2,lcp5jnb key2,$lcall dec1lcp5:jb key4,lcp0lcall displayjb key4,lcp0jnb key4,$lcall displayjnb key4,$setb tr0clr tr1;退出闪烁clr 27h.4;闪烁的标志还原loop1:ret;*key2*keyb:jb key2,loop1lcall displaylcall displayjb key2,loop1jnb key2,$lcall displayjnb key2,$setb tr1clr 2ah.0;闹钟组的切换mov 28h,#32h;闪烁单元默认为份clr 27h.7;闹钟组0为1组mov disp,#37h ;默认显示第一组闹铃时间setb 27h.2;为1时调分mov 56h,#38hmov 57h,#39hmov r0,#38h;*qq1:lcall display;闹钟的主要显示jb key3,qq2lcall displaylcall displayjnb key3,$cpl 27h.2jb 27h.2,lq1mov r0,57hmov 28h,#34hsjmp qq2lq1:mov r0,56hmov 28h,#32h;*加1qq2:jb key1,qq3lcall displaylcall displayjb key1,qq3jnb key1,$lcall add1;*减1qq3:jb key2,qq4lcall displaylcall displayjb key2,qq4jnb key2,$lcall dec1qq4:jb key4,qq1lcall displayjb key4,qq1jnb key4,$lcall displayjnb key4,$mov disp,#53hmov 56h,#54hmov 57h,#55hmov r0,56hcpl 2ah.0jb 2ah.0,qq1mov disp,#seconclr 27h.4;退出闪烁clr tr1lpp1:ret;*key3*秒表keyc:jb key3,qinlcall displaylcall displayjb key3,qinmov disp,#50hsetb 27h.6qin4:lcall displayjb key1,qin1lcall displayjb key1,qin1jnb key1,$setb tr1qin1:jb key2,qin2lcall displayjb key2,qin2jnb key2,$clr tr1qin2:jb key3,qin3lcall displayjb key3,qin3jnb key3,$mov 50h,#00hmov 51h,#00hmov 52h,#00hqin3:jb key4,qin4lcall displayjb key4,qin4jnb key4,$clr 27h.6qin:ret;*key4*keyd:jb key4,ww1lcall displaylcall displayjb key4,ww1jnb key4,$jnb 27h.3,ww6clr 27h.3setb p3.2sjmp ww1ww6:jnb 2ah.2,ww7clr 2ah.2setb p3.3sjmp ww1ww7:clr 2ah.1mov disp,#37h;默认显示第一组闹铃时间ww2:lcall displayjb key1,ww3jnb key1,$jb 2ah.1,wqq1setb 27h.3clr p3.2sjmp ww3wqq1:setb 2ah.2clr p3.3ww3:jb key2,ww4jnb key2,$jb 2ah.1,wqq2clr 27

温馨提示

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

评论

0/150

提交评论