基于单片机的多功能数字钟的设计学士学位论文(编辑修改稿)内容摘要:

二极管接通时则表示当前正在执行的是考试时间表。 有了红绿两发光二极管表示,就可以明显看出当前执行的是何种时间表,不会混淆。 电路图如下页所示: 淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 10 图 5 发光二极管显示电路 数码管显示电路 数码管显示器成本低,配置灵活,与单片机接口简单,在单片机应用系统中广泛应用。 A112DP3g5e1b7f10A29A46d2a11c4A38DIG1 DIG2 DIG3 DIG4DP2DP3DS1HDSPB04GA1A2A3A4AABBCCDDEEFFGGHHA112DP3g5e1b7f10A29A46d2a11c4A38DIG1 DIG2 DIG3 DIG4DP2DP3DS2HDSPB04GA5A6A7A8AABBCCDDEEFFGGHH图 6 数码管显示电路 数码管是由 8 个发光二极管构成的显示器件。 在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码管。 本文用到的 6 个数码管均是共阴极的。 当发光二极管导通时,它就会发光。 每个二极管就是一个笔划,若干 个二极管发光时,就构成了一个显示字符。 将单片机的 I/O 口控制相应的芯片与数码管的 ag 相连,高电平的位对应的发光二极管亮,这样,由 I/O 口输出不同的代码,就可以控制数码管显示不同的字符。 本文的 6 个数码管均采用动态显示方式,显示当前的时间。 整个显示电路应用了 2个 573 芯片这六位数据经过 573 芯片以后是片选信号,即控制动态显示的是哪一位数码管。 在片选信号和段选信号的控制下如下图所示,数码管就正确的动态显淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 11 示当前的时间。 OE1D02D13D24D35D46D57D68D79GND10LE11Q712Q613Q514Q415Q316Q217Q118Q019VDD20U6MC74HC573NP26P00P01P02P03P04P05P06P07GNDGNDAABBCCDDEEFFGGHHVCCOE1D02D13D24D35D46D57D68D79GND10LE11Q712Q613Q514Q415Q316Q217Q118Q019VDD20U6MC74HC573NP26P00P01P02P03P04P05P06P07GNDGNDAABBCCDDEEFFGGHHVCC 图 7 驱动电路 电源电路设计 电源电路包括变压器、桥式整流器、电容和稳压器。 通过变压器变压,使得220V 电压变为 5 V,在通过桥式整流,电容的滤波作用,稳压器的稳压作用,可输出 5V 的稳定电压。 本章小结 本章介绍的是本设计的硬件结构,单片机的相关 I/O 口输入输出就可以实现相应的控制功能。 还介绍了单片机的复位电路和时钟电路。 淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 12 4 电路的软件设计 软件程序内容 本设计的软件程序包括主程序、中断子程序、闹铃程序、时钟显示子程序、查询时间表切换程序和延时子程序等等。 另外由于电路中有四个按键,还另外设计了防抖动程序来防止干扰。 软件流程图 软件程序整个流程图 如下: 开始 初始化 是否按时间表切换键 切换时间表 查询功能移位键 调整时间 是否与时间表时间匹配 调用闹铃子程序 是 否 是 否 淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 13 定时程序设计 单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过 1 个机器周期的时间,计数器加 1。 如果 MCS51 采用的 12MHz 晶体,则计数频率为 1MHz,即每过 1us 的时间计数器加 1。 这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。 MCS51 单片机的定时器 /计数器具有 4 种工作方式,其控制字均在相应的 特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器 /计数器两种工作模式和 4 种工作方式。 定时器 /计数器工作在方式 0 时,为 13 位的计数器,由 TLX(X=0、 1)的低 5位和 THX 的高 8 位所构成。 TLX 低 5 位溢出则向 THX 进位, THX 计数溢出则置位 TCON 中的溢出标志位 TFX. 当定时器 /计数器工作于方式 1,为 16 位的计数器。 本设计师单片机多功能定时器,所以 MCS51 内部的定时器 /计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增 1。 实时时钟 实现的基本方法 时钟的最小计时单位是秒,但使用定时器的方式 1,最大的定时时间也只能达到 131ms。 我们可把定时器的定时时间定为 50ms。 这样,计数溢出 20次即可得到时钟的最小计时单位:秒。 而计数 20 次可以用软件实现。 秒计时是采用中断方式进行溢出次数的累积,计满 20 次,即得到秒计时。 从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。 要求每满 1秒,则“秒”单元中的内容加 1;“秒”单元满 60,则“分”单元中的内容加 1;“分”单元满 60,则“时”单元中的内容加 1;“时”单元满 24,则将时、分、秒的内容全部 清零。 实时时钟程序设计步骤 ( 1)选择工作方式,计算初值; ( 2)采用中断方式进行溢出次数累计; ( 3)从秒 —— 分 —— 时的计时是通过累加和数值比较实现的; 淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 14 ( 4)时钟显示缓冲区:时钟时间在方位数码管上进行显示,为此在内部 RAM 中要设置显示缓冲区,共 6 个地址单元。 显示缓冲区从左到右依次存放时、分、秒数值; ( 5)主程序:主要进行定时器 /计数器的初始化编程,然后反复调用显示 子程序的方法等待中断的到来。 ( 6)中断服务程序:进行计时操作 ( 7)加 1 子程序:用于完成对时、分、秒的加操作,中断服务程序在秒、 分、时加 1 时共有三种条调用加 1 子程序,包括三项内容:合字、加 1 并进行十进制调整、分字。 程序说明 在整个系统中,在单片机的 30H、 31H 和 32H 中存储当前时间的小时、分钟和秒。 由于要用数码管显示当前的时间,必须用到分字和合字,因此在 33H、 34H、35H、 36H、 37H 和 38H 中存储当前时间的时十位、时个位、分十位、分个位、秒十位和秒个位,方便显示。 本设计有由四个轻触按键组成的小键盘,这些按键可以任意改变当前的状态。 按功能移位键一次 ,表示当前要校对小时的十位;按第二次,表示当前校对的是小时的个位;按第三次,则表示校对的是分钟的十位;第四次,表示的校对的是分钟的个位。 按下数字“ +” 键和数字“ ”键可在当前校对的数字上相应加上 1 或者减去 1。 本设计采用查表方式,在程序里预先存储两个表格,即日常作息时间表和考试时间表,可以通过手动按键来选择所要执行的时间表。 并且用红、绿发光二极管来区别当前所执行的时间表。 系统开机后,按功能移位键就可以调整当前的时间,整个系统操作简单,功能明确。 显示数据时,先把要显示的数据送到数据缓冲区 SBUF 中,再从 SBUF 中显示。 串行口缓冲寄存器 SBUF 器是可直接寻址的专用寄存器。 在物理上,它对应着两个寄存器,一个发送寄存器,一个接收寄存器。 CPU 写 SBUF,就是修改发送寄存器;读 SBUF,就是读接收寄存器。 接收器是双缓冲的,以避免在接收下一帧数据之前, CPU 未能及时响应接收器的中断,没有把上一帧数据读走,而产生两帧数据重叠的问题。 对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时 CPU 是主动的,不会产生写重叠的问题。 淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 15 单片机数字钟主要程序 本次数字钟是基于 C语言的六位数码管显示 (时 分秒 ),(月日 星期 ),闹钟定时时间的设计。 按键 1 依次选择调整时间 显示月日星期 调整月日星期 显示闹钟定时时间 调整闹钟定时按键 S2 依次选中时分秒 (月日星期 )数码管 ,S3 按键依次加 1,S4 按键依次减 1 具有整点报时 ,闹钟定时显示功能。 走时中断函数 timer0()实现走时中断。 定时器方式控制寄存器 TMOD 工作方式选择 1。 void timer0() interrupt 1 //50ms 中断函数 { TMOD=0x01。 TH0=0x4c。 //50ms 初值 晶振 TL0=0x00。 count++。 if(count==20) { count=0。 sec++。 jishi()。 //调计时函数 }} 计时函数 Jishi()实现的系统的时间计时功能。 当 sec=60, minu 加 1,当 minu=60, hour加 1,同理加到 day, week。 void jishi() //计时函数 {if(sec==60) {sec=0。 minu++。 淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 16 if(minu==60) {minu=0。 hour++。 if(hour==24) { hour=0。 day++。 week++。 if(week==8) {week=0。 } if(year%4==0amp。 amp。 year%100!=0||year%400==0) //闰年 { if(day==table1[mon]+1) {day=0。 mon++。 if(mon==13) {mon=0。 year++。 } }} 显示函数 函数 disp()实现系统日期或时间的显示功能。 void disp(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6) //显示函数 {dula=1。 //选定段选 P0=table[a1]。 //段码送 P0 口 dula=0。 //关段选 P0=0xff。 wela=1。 //选定位选 P0=0xfe。 //位选 (第 1 个数码管 )送 P0 wela=0。 //关位选 delay(3)。 //延时一小会 } 淮北煤炭师范 学院 20xx 届学士学位论文 基于单片机的多功能数字钟的设计 17 闹钟函数 函数 nz_clock 用于启动系统报警,通过控制 PNP 三极管导通实现。 Fm=0 启动闹铃, fm=1 闹铃结束。 void nz_clock() //闹钟函数 { if((hour==n_hour)amp。 amp。 (minu==n_minu)) {fm=0。 delay(50)。 fm=1。 delay(50)。 } } 整点报时函数 zd_clock()实现整点报时, fm=0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。