1、- -等级;工程学院课 程 设 计课程名称单片机原理及应用 课题名称课间作息时间控制器专 业自动化班 级学 号 2021姓 名指导教师 晓秀 王迎旭2021年 12 月 02 日工程学院课 程 设 计 任 务 书课程名称单片机原理及应用课 题 单片机作息时间控制器专业班级 学生 学 号 指导教师 晓秀 王迎旭审 批 王迎旭 任务书下达日期 2021 年 12 月02 日任务完成日期 2021年 12 月15 日设计容与设计要求设计容:本课题要求以单片机为核心,设计一个具有定时和计数功能的智能化作息时间控制器。该控制器要求有以下功能:1、 按作息时间接通/断开电铃;2、 课间接通/断开播放音乐设
2、备;3、 时钟显示。设计要求:1确定系统设计方案; 2进展系统的硬件设计;3完成必要的参数计算与元器件选择;4完成应用程序设计;*5进展局部单元电路几应用程序的调主 要 设 计 条 件作息时间控制器常用于学校教学楼的时间控制,利用单片机部定时器实现时间基准定时,并配合“启动、“复位等按键的操作完成铃声、音乐的开/停控制,显示的容要求有时、分、秒各两位。说 明 书 格 式封面课程设计任务书目录第1章 概述课题设计的要求、目的及意义第2章 系统总体方案选择与说明系统硬件电路设计框图与工作原理第3章 硬件电路设计各局部电路设计、原理、参数计算、I/O分配等第4章 应用软件设计流程图、算法等*第5章
3、系统仿真调试第6章 硬件调试与结果分析开发板焊接、性能测试、结果、操作说明第7章 完毕语系统设计小结:已完成的工作、效果、特色、缺乏与展望致参考文献 附录A 系统硬件电路原理图附录B 程序清单评分表进 度 安 排设计时间两周第一周:星期一 讲课,布置课题任务, 借阅有关资料;星期二 上午:讲课及课题介绍;下午:分组进展总体方案讨论,初步确定设计方案;星期三 上午:方案论证与检查;下午:分组进展总体设计,硬、软件功能分配;星期四 硬、软件流程设计与计算; 星期五 小系统焊接与调试;第二周:星期一 分单元调试调试;星期二 写说明书初稿;星期三 检查设计情况,修改说明书;星期四 整理资料,准备辩论;
4、星期五 交设计资料,辩论。参 考 文 献参考文献1 王迎旭等.单片机原理及及应用.【M】机械工业.2021年2 周向红.51单片机课程设计.【M】华中科技大学.2021年3 世清.c语言课程设计.【M】大学.2021年4 迎新.单片机微型计算机原理及接口技术.【M】国防工业.2021年 目 录第一章 概述 1.1课题任务简介.1 1.2课题设计的目的及意义.1第二章 课题方案设计.2 2.1课题方案设计.2 2.2 课题方案简要原理.2第三章 硬件设计.3 3.1 单片机芯片选择.4 3.2 电源电路.4 3.3 时钟电路.4 3.4 复位电路.4 3.5 蜂鸣器输出电路.5 3.7 按键输入
5、电路.6 3.8 LED数码驱动电路.6第四章 软件设计.8 4.1 主程序的设计.8 4.2 显示程序的设计.11 4.3 计时程序的设计.11 4.4 辅助子程序的设计.13第五章 系统调试.15 5.1 调试准备.15 5.2 调试结果.15 5.2.1 软件仿真显示.16 5.2.2 硬件显示.16. 5.3 调试故障及分析.18第六章 总结.19参考文献.19附录.20- word.zl- - 第1章 概述 1.1 课题任务简介 以单片机为核心,设计一个具有定时和计数功能的智能化作息时间控制器。该控制要求具有以下功能:1使用4位七段显示器来显示现在的时间,显示格式为“时分,时和分中间
6、的小数点闪动做秒计数。2通过按键能够进展时间校准。3作息时间已达,发出指令控制电铃开、关操作。4上电初始时间13:00.然后通过按键设置当前时间。1.2 课题设计的目的及意义应用STC90C52RC为核心控制器件的作息时间控制器,由键盘、声音输出模块、电源转换模块和存储模块四局部组成。它利用STC90C52RC的定时/计数器来计算时间,并用存储器记录数据,保证了系统的可靠性。单片机是整个设计的核心控制器件,根据从键盘承受的数据控制整个系统的工作流程,整体性好,人性化强,可靠性高。实现了对时间控制的智能化,摆脱了传统由人来控制时间的长短不便,可对一些以24小时为周期的开关量进展自动控制。如上下课
7、打铃及扩音设备的开与关。设有四位数码管可以实时显示时间、系统还设有输入键盘,用以修改实时时钟,表达了系统简单、工作稳定可靠、价廉、控制时间精准及系统体积小等优点。 第2章 课题方案设计 2.1课题方案设计 根据系统的功能要求,拟定系统硬件电路构造由单片机、电源电路、时钟电路、复位电路、按键输入电路、蜂鸣器模拟电路和LED数码管驱动显示电路。其构造框图如图2-1所示。蜂鸣器模拟电路 电源电路 单 片 机 机 按键输入电路 时钟电路 LED数码驱动 显示电路 复位电路 图2-1构造框图2.2 课题方案原理简述 作息时间控制器系统使用4位七段显示器来显示现在的时间,显示格式为“时分,由LED小数点闪
8、动作为秒计数表示。可以使用按键输入电路设定作息时间。能够根据预先设定好的作息时间表自动启停蜂鸣器电路,完成对外部电路的实时控制。 由按键输入控制设置年月日以及当前时间、并可设置闹钟定时、时间到由蜂鸣器发出响声并作出相应动作:二极管闪亮,同时播放音乐。 第3章 硬件设计 在作息时间控制器中,硬件设计主要是完成单片机芯片型号的选择,电源电路、时钟电路和复位电路、蜂鸣器模拟响铃电路、按键输入电路和LED数码驱动显示电路的设计。 3.1 单片机芯片选择 STC90C52RC单片机的芯片,它具有超强的抗干扰和抗静电能力、本钱低、超低功耗、更强的复位效果等优点。芯片引脚和对应的输出功能如图3-1-1和3-
9、1-2所示: 图3-1-1 芯片引脚图引脚名称 功能VCC 提供电源RST 系统复位P0.0-P0.7 显示断码输出P2.0-P2.7 位码输出和键盘输出P3.7 蜂鸣器 图3-1-2 输出功能图3.2 电源电路 电源电路是任何一个电子系统都需要供电电路,即电源,单片机也不例外。单片机的供电电源可以是开关电源、线性电源、常用的电源装换芯片和USB电源等。无论哪一种电源设计都要严格考虑它的各项指标。在这里选择的是可调直流电源适配器,输出电压正负极性可转换,试用围广泛。此单片机中电源电路由开关按钮、整流桥、滤波电路和二次整数及滤波电路组成。3.3 时钟电路 本系统采用的是部时钟方式。 采用12MH
10、Z的晶振机器周期为1us和两个30Pf的电解电容。具体接线图如图3-3所示图3-3 时钟电路3.4 复位电路只需要给RST引脚连续输入2个机器周期以上高电平,就可以完成单片机的初始化操作。在此次课程设计中复位电路采用的是一个规格为1K和一个规格为10K的电阻,再加一个规格为22uF的电解电容,具体电路连线图如图3-4所示。 图3-4 复位电路3.5 蜂鸣器模拟响铃电路 将单片机P37口上接入蜂鸣器期间需要放大电路才可驱动蜂鸣器发出声。放大电路主要利用具有放大特性的电子元器件:晶体三极管,三极管加上工作电压后,输入端的微小电流变化可以引起输出端较大的电流变化,输出端的变化要比输入端的变化很多。电
11、路图如图3-5所示: 图3-5 蜂鸣器模拟电路3.7 按键输入电路按键输入电路主要实现对时间的设定,本系统采用四个独立键盘,k1键是实现设定小时和分钟设定的模式切换,k2键是对小时或者分钟进展加1,k3是对小时或者分钟进展减1,K4是对前三个的设置进展退出。如图3-7所示 图3-7按键输入电路3.8 LED数码驱动显示电路 该设计中采用的是共阳极数码管,数码管由断码和位码组成,由反相器组成驱动电路实现时分的显示功能。a b c d e f g dp 为断码分别接入单片机P0I/O口,位码W1、W2、W3、W4分别经驱动后接入P2.4、P2.5、P2.6 、P2.7。第一个数码管显示小时的十位第
12、二个数码管显示小时的各位,第三个数码管显示分钟的十位,第四个数码管显示分钟的各位。中间小数点闪烁代表秒。电路设计如图3-8所示。 图3-8 LED 数码驱动显示电路 第4章 软件设计 该控制器的软件设计是用keil软件用c编程。利用单片机的定时中断进展计时,通过按键扫描来设置当前时间。主要包含这些程序段,分别是主程序、显示子程序和计时子程序,此外还包初始化子程序、延时子程序、时间显示辅助程序。以及程序中包含的头文件和宏定义构成了整个程序的设计。4.1 主程序的设计 主程序中主要的作用是调用初始化子程序,按键扫描和调用显示子程序。按键扫描局部(1) Key=1表示选中第一个按键,进展小时和分钟的
13、设置,key=1按键的次数进展存入X1,当X1=1进入小时的设置,当X1=2进入分的设置。当X1=3回到初始状态。(2) Key=2表示选中第2个按键,此时在key=1的次数等于1小时加1调整设置,key=1的次数等于2表示进展分钟加1的调整设置。小时的围为023,分钟的围为059。(3) Key=3表示选中第3个按键,此时在key=1的次数等于1小时减1调整设置,key=1的次数等于2表示进展分钟减1的调整设置。(4) Key=4表示选中第一个按键,当执行按键1、2、3的功能时,均可退出到初始状态。 闹铃局部 以下是学校课间作息时间表,依此来对程序设计进展打铃。表4-1 课间时间作息表名称时
14、间段第一节8:008:45第二节8: 55-9:40第三节10:10-10:55第四节11:05-11:50第五节14:00-14:45第六节14:55-15:40第七节16:10-16:55第八节17:05-17:50第九节19:00-19:45第十节19:55-20:40第十一节20:50-21:35 当时间到达设置点时,对闹钟标志位P3.7置0来确定闹铃响,例如,当8点钟的时间到,第一节课准备开场上课,对打铃时间设置30S,当8:45时间到,闹铃响,开场下课,铃声响30S ,完成打铃,依此类推。图4-1是主程序流程图。键值key的初始化以及调用初始化子程序按键扫描判断键值假设key=1那
15、么X1加1,X1=0时常态,X1=1设置时间,X1=2设置分钟,X1=3就返回初始值Key=2时或分加1,Key=3时或分钟减1调用显示子程序置蜂鸣器初始状态be为0状态Be置1,响铃判断是否为响 铃时间铃时间NY 开场图4-1 主程序流程图4.2 显示子程序的设设置P2=0xff,那么选中小时的十位数码管,即W1,然后送断码给P0口,显示相应的数字。其中有一个条件,当设置小时有效,即X1=1和计数大于10时便返回,每一个数码管可以显示0-9十个数字,然后调用延时即可。设置P2=0xbf,那么选中小时的各位数码管,即W2,设置P2=0xdf,那么选中分的十位数码管,即W3,设置P2=0xef,
16、那么选中分的各位数码管,即W4。具体流程图如下。假设为设置状态那么秒数大于0.5S时关闭位选N=2时 t10(秒小于0.5秒) 显示小数点 开 始送位选数码管送位选数码管 显示数值调用延时,不是第四位数码管时N+显示下一位 图4-2 显示程序流程图4.3 计时程序的设计首先运用定时扩展的方法构成最小单位的定时,在定时/计数器T0方式1下定时50ms,计数20次构成1s为单位的数值。当1s计数次数sec=60时条件成立便构成1min,当1min计数次数m=60成立构成了1hour,当1hour计数次数h=24条件成立构成了一天,然后返回。 开场定时器定时0.05S t+Nt=20?是否为1sYt
17、清零,Sec+NSec=60?是否为1mY Sec清0,m+N m=60?是否为1h?Y m清零,h+NH=24?是否为1天?Y h=0,中断返回图4-3 计时程序流程图4.4 辅助子程序此局部包含包含数码管显示辅助子程序、初始化子程序、按键扫描辅助函数和延时子程序。(1) 数码管显示子程序主要是把小时分解到千位和百位,分钟分解到十位和各位。程序见void bianhuan1(void)局部的编写。 对应的端口号、数字、和断码表如表4-4所示表4-4 I/O分配表a ddpcgbfa数字断码P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.000101000028H11101011
18、1EBH00110010232H101000103A2H111000014E1H101001005A4H00100100624H111010107EAH00100000820H 2初始化子程序中主要设置定时计数器T0定时下的工作方式1,即TMOD=0x01,计数初值为65536-50000=15536,化成十六进制为3cb0,所以TH0=0x3c,TL0=0xb0,此外还要启动定时器T0,即TR0=1,T0开中断允许和开总中断,即ET0=1和EA=1。其程序参见附录void init (void)局部的编写。 3按键扫描函数主要完成将P2低四位赋为1,假设有按键按下那么P2口对应的位会为0,也
19、就会出现0x0f&P2=0x07、0x0b、0x0b、0x0d和0x0e四种情况,分别是四个按键按下的状态。其程序见unsigned char scankey(void) 局部的编写。 4延时子程序供其它子程序的调用,延时0.1毫秒。其程序参见void delay(uchar)局部的编写。第五章 系统调试 5.1 调试准备根据硬件的设计,把线路接好,采用RS232标准的DB-9连接器,和串口转USB接口线进展数据的传输,通过STC-ISP-V483软件进展程序的下载,选择MCUType中STC90C52RC芯片,设置端口号5以及波特率,翻开程序进展下载,上电。 5.2 调试结果5.2.1 软件
20、仿真显示 软件仿真整体效果如图5-1所示,初始上电显示时间13:00。小数点闪烁一次代表一秒。 图5-1 软件仿真图 5.2.2 硬件显示 1上电后根据程序的初始设置,显示时间为13:00,中间的小数点闪动一次代表时间进展1秒。如图5-2所示 图5-2 硬件显示图1 2小时的设置。按下第一个键进展小时的设置,再按下第二个键两次时间显示15:00按第一次时蜂鸣器会根据预设时间响铃30S。按下第三个键三次时间显示12:00。按下第一个键三次或者按下第四个键停顿当前操作。如图5-3和5-4所示。 图5-3 硬件显示图2 图5-4 硬件显示图3 3分钟的设置。按下第一个键两次进展分钟的设置,再按下第二
21、个键两次时间显示12:02,按下第三个键三次进入时间显示12:59。按下第一个键三次或者按下第四个键停顿当前操作。如图5-5和5-6所示。 图5-5 硬件显示图4 图5-6 硬件显示图5 5.3 调试故障及分析(1) 上电后,数码管f段不显示。分析:检查程序调试无误后,检查单片机硬件经电表测试,f端没焊接好。(2) 蜂鸣器上电后到设置时间不打铃分析:检查程序调试无误后,检查单片机硬件连接,P3.7口没短接。(3) 按键进展时钟加设置时加到时钟加到16出现紊乱。分析:检查程序是对时钟h进展赋值时把 “=写出“=(4) 局部小数点没有实现秒闪作用。分析:这一局部的设置和小时的各位段断码dp直接设置
22、会有冲突,要错开进展设置,当0.5秒时就是亮一次,再过0.5秒就灭一次,这样闪亮就是1S。 第6章 总结 单片机课程设计分为两周,第一周在教师的指导下我们完成了对我们组课题作息时间控制器的方案确定,设计了原理图,再仿真,焊接。这一过程让我收获颇多,让我明白了就自动化专业而言,我们所学的东西都是一层连一层的,再对原理图的设计时,我们感觉甚至对以前学的简单数模电知识都忘记了,再紧的时间里一边查阅以前所学的课程,像模电、数电、电路、C语言、微机原理、proteus都引用到了本次课程设计。我们组员在这场课程设计中有了明确的分工合作,画原理图硬件设计、程序设计分析调试、对整个单片机的调试与分析。反反复复
23、,有时一个小的错误要检查很久,但我们组员至始至终没有放弃,最终在教师检查与指导我们终于完成了这次单片机课程设计。参考文献1 王迎旭等.单片机原理及及应用.【M】机械工业.2021年2 周向红.51单片机课程设计.【M】华中科技大学.2021年3 世清.c语言课程设计.【M】大学.2021年4 迎新.单片机微型计算机原理及接口技术.【M】国防工业.2021年附录#include#define uint unsigned int#define uchar unsigned charuchar code a10=0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20
24、,0xA0;sbit be=P37;sbit DP=P15;bit flag=0;bit KeyFlag=0;bit SFlag=1;uchar m=00,h=13,sec=00,t=0,qian,bai,shi,ge,X1=0,key,nt;void delay(uchar t); /延时函数void init(void);/初始化函数void display(void); /显示函数 void bianhuan1(uchar h);/时间显示辅助函数unsigned char scankey(void); /按键扫描程序void init(void) TMOD=0x01; /写入工作方式字
25、 TH0=0x3c; /写入计数初值 TL0=0xb0; ET0=1; /开放中断 TR0=1; EA=1; void main(void) init(); while(1) key=scankey(); /按键输入程序if(KeyFlag=1)&(SFlag=0) KeyFlag=0; if(key=1) X1+; if(X1=1)/时间调整 if(key=2) h+;if(h=24) h=0;if(key=3)if(h=0)h=24;h-; if(X1=2) /分钟调整 if(key=2) m+; if(m=60) m=0; if(key=3) if(m=0) m=60; m-; if(X
26、1=3)/停顿操作返回X1=0;if(key=4)X1=0; P2=P2|0x0f;if(P2&0x0f)=0x0f) SFlag=1;display(); /显示打铃函数 be=1; if(h=8) if(m=0|m=45|m=55)if(sec30)be=0;else be=1; if(h=9&m=40)if(sec30)be=0; if(h=10)if(m=10|m=55)&sec30)be=0;else be=1; if(h=11)&(m=5)&(sec30) be=0; if(h=11&m=50&sec30) be=0; if(h=14) if(m=0|m=45|m=55)if(se
27、c30)be=0;else be=1; if(h=15&m=40)if(sec30)be=0; if(h=16) if(m=10|m=55)&sec30)be=0;else be=1; else if(h=17)if(m=5|m=50)&sec30)be=0;else be=1; if(h=19) if(m=0|m=45|m=55)if(sec30)be=0;else be=1; if(h=20)if(m=40|m=50)&sec30)be=0;else be=1; if(h=21)if(m=0|m=40)&sec=10)P2=0xff; P1=aqian; P2=0x7F; delay(10
28、0); P2=0xff; if(X1=1&t=10)P2=0xff; P1=abai; if(flag=1) DP=0; else DP=1; P2=0xbf; delay(100); P2=0xff; if(X1=2&t=10)P2=0xff; P1=ashi; P2=0xdf; delay(100); P2=0xff; if(X1=2&t=10)P2=0xff; P1=age; P2=0xef; delay(100); P2=0xff; void bianhuan1(uchar h) /时间辅助函数 qian=h/10; bai=h%10; shi=m/10; ge=m%10; unsig
29、ned char scankey(void)/按键扫描函数 unsigned char temp=0;P2=P2|0x0f;temp=0x0f&P2;switch(temp)case 0x07: if(KeyFlag=0)&SFlag=1) KeyFlag=1; SFlag=0; return 4; break;case 0x0B:if(KeyFlag=0)&SFlag=1) KeyFlag=1; SFlag=0; return 3; break;case 0x0D:if(KeyFlag=0)&SFlag=1) KeyFlag=1; SFlag=0; return 2; break; case 0x0E:if(KeyFlag=0)&SFlag=1) KeyFlag=1; SFlag=0; return 1; break;return 0; void delay(uchar t ) /延时函数 while(t-); void time0(void)interrupt 1 / 时钟函数 TH0=0x3c;