资源描述
- -
等级;
工程学院
课 程 设 计
课程名称单片机原理及应用
课题名称课间作息时间控制器
专 业自动化
班 级
学 号 2021
姓 名
指导教师 晓秀 王迎旭
2021年 12 月 02 日
工程学院
课 程 设 计 任 务 书
课程名称单片机原理及应用
课 题 单片机作息时间控制器
专业班级
学生
学 号
指导教师 晓秀 王迎旭
审 批 王迎旭
任务书下达日期 2021 年 12 月02 日
任务完成日期 2021年 12 月15 日
设计容与设计要求
设计容:
本课题要求以单片机为核心,设计一个具有定时和计数功能的智能化作息时间控制器。该控制器要求有以下功能:
1、 按作息时间接通/断开电铃;
2、 课间接通/断开播放音乐设备;
3、 时钟显示。
设计要求:
1〕确定系统设计方案;
2〕进展系统的硬件设计;
3〕完成必要的参数计算与元器件选择;
4〕完成应用程序设计;
*5〕进展局部单元电路几应用程序的调
主 要 设 计 条 件
作息时间控制器常用于学校教学楼的时间控制,利用单片机部定时器实现时间基准定时,并配合“启动〞、“复位〞等按键的操作完成铃声、音乐的开/停控制,显示的容要求有时、分、秒各两位。
说 明 书 格 式
封面
课程设计任务书
目录
第1章 概述〔课题设计的要求、目的及意义〕
第2章 系统总体方案选择与说明〔系统硬件电路设计框图与工作原理〕
第3章 硬件电路设计〔各局部电路设计、原理、参数计算、I/O分配等〕
第4章 应用软件设计〔流程图、算法等〕
*第5章 系统仿真调试
第6章 硬件调试与结果分析〔开发板焊接、性能测试、结果、操作说明〕
第7章 完毕语〔系统设计小结:已完成的工作、效果、特色、缺乏与展望〕
致
参考文献
附录A 系统硬件电路原理图
附录B 程序清单
评分表
进 度 安 排
设计时间两周
第一周:
星期一 讲课,布置课题任务, 借阅有关资料;
星期二 上午:讲课及课题介绍;
下午:分组进展总体方案讨论,初步确定设计方案;
星期三 上午:方案论证与检查;
下午:分组进展总体设计,硬、软件功能分配;
星期四 硬、软件流程设计与计算;
星期五 小系统焊接与调试;
第二周:
星期一 分单元调试调试;
星期二 写说明书初稿;
星期三 检查设计情况,修改说明书;
星期四 整理资料,准备辩论;
星期五 交设计资料,辩论。
参 考 文 献
参考文献
[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 按键输入电路..................................................................................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位七段显示器来显示现在的时间,显示格式为“时分〞,时和分中间的小数点闪动做秒计数。
〔2〕通过按键能够进展时间校准。
〔3〕作息时间已达,发出指令控制电铃开、关操作。
〔4〕上电初始时间13:00.然后通过按键设置当前时间。
1.2 课题设计的目的及意义
应用STC90C52RC为核心控制器件的作息时间控制器,由键盘、声音输出模块、电源转换模块和存储模块四局部组成。它利用STC90C52RC的定时/计数器来计算时间,并用存储器记录数据,保证了系统的可靠性。单片机是整个设计的核心控制器件,根据从键盘承受的数据控制整个系统的工作流程,整体性好,人性化强,可靠性高。
实现了对时间控制的智能化,摆脱了传统由人来控制时间的长短不便,可对一些以24小时为周期的开关量进展自动控制。如上下课打铃及扩音设备的开与关。设有四位数码管可以实时显示时间、系统还设有输入键盘,用以修改实时时钟,表达了系统简单、工作稳定可靠、价廉、控制时间精准及系统体积小等优点。
第2章 课题方案设计
2.1课题方案设计
根据系统的功能要求,拟定系统硬件电路构造由单片机、电源电路、时钟电路、复位电路、按键输入电路、蜂鸣器模拟电路和LED数码管驱动显示电路。其构造框图如图2-1所示。
蜂鸣器模拟电路
电源电路
单
片
机
机
按键输入电路
时钟电路
LED数码驱动 显示电路
复位电路
图2-1构造框图
2.2 课题方案原理简述
作息时间控制器系统使用4位七段显示器来显示现在的时间,显示格式为“时分〞,由LED小数点闪动作为秒计数表示。可以使用按键输入电路设定作息时间。能够根据预先设定好的作息时间表自动启停蜂鸣器电路,完成对外部电路的实时控制。
由按键输入控制设置年月日以及当前时间、并可设置闹钟定时、时间到由蜂鸣器发出响声并作出相应动作:二极管闪亮,同时播放音乐。
第3章 硬件设计
在作息时间控制器中,硬件设计主要是完成单片机芯片型号的选择,电源电路、时钟电路和复位电路、蜂鸣器模拟响铃电路、按键输入电路和LED数码驱动显示电路的设计。
3.1 单片机芯片选择
STC90C52RC单片机的芯片,它具有超强的抗干扰和抗静电能力、本钱低、超低功耗、更强的复位效果等优点。
芯片引脚和对应的输出功能如图3-1-1和3-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 时钟电路
本系统采用的是部时钟方式。 采用12MHZ的晶振〔机器周期为1us〕和两个30Pf的电解电容。具体接线图如图3-3所示
图3-3 时钟电路
3.4 复位电路
只需要给RST引脚连续输入2个机器周期以上高电平,就可以完成单片机的初始化操作。在此次课程设计中复位电路采用的是一个规格为1K和一个规格为10K的电阻,再加一个规格为22uF的电解电容,具体电路连线图如图3-4所示。
图3-4 复位电路
3.5 蜂鸣器模拟响铃电路
将单片机P3^7口上接入蜂鸣器期间需要放大电路才可驱动蜂鸣器发出声。放大电路主要利用具有放大特性的电子元器件:晶体三极管,三极管加上工作电压后,输入端的微小电流变化可以引起输出端较大的电流变化,输出端的变化要比输入端的变化很多。电路图如图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。第一个数码管显示小时的十位第二个数码管显示小时的各位,第三个数码管显示分钟的十位,第四个数码管显示分钟的各位。中间小数点闪烁代表秒。电路设计如图3-8所示。
图3-8 LED 数码驱动显示电路
第4章 软件设计
该控制器的软件设计是用keil软件用c编程。利用单片机的定时中断进展计时,通过按键扫描来设置当前时间。主要包含这些程序段,分别是主程序、显示子程序和计时子程序,此外还包初始化子程序、延时子程序、时间显示辅助程序。以及程序中包含的头文件和宏定义构成了整个程序的设计。
4.1 主程序的设计
主程序中主要的作用是调用初始化子程序,按键扫描和调用显示子程序。
按键扫描局部
(1) Key=1表示选中第一个按键,进展小时和分钟的设置,key=1按键的次数进展存入X1,当X1=1进入小时的设置,当X1=2进入分的设置。当X1=3回到初始状态。
(2) Key=2表示选中第2个按键,此时在key=1的次数等于1小时加1调整设置,key=1的次数等于2表示进展分钟加1的调整设置。小时的围为0—23,分钟的围为0—59。
(3) Key=3表示选中第3个按键,此时在key=1的次数等于1小时减1调整设置,key=1的次数等于2表示进展分钟减1的调整设置。
(4) Key=4表示选中第一个按键,当执行按键1、2、3的功能时,均可退出到初始状态。
闹铃局部
以下是学校课间作息时间表,依此来对程序设计进展打铃。
表4-1 课间时间作息表
名称
时间段
第一节
8:00—8: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那么X1加1,X1=0时常态,X1==1设置时间,X1==2设置分钟,X1==3就返回初始值
Key==2时或分加1,Key==3时或分钟减1
调用显示子程序
置蜂鸣器初始状态be为0状态
Be置1,响铃
判断是否为响
铃时间
铃时间
N
Y
开场
图4-1 主程序流程图
4.2 显示子程序的设
设置P2=0xff,那么选中小时的十位数码管,即W1,然后送断码给P0口,显示相应的数字。其中有一个条件,当设置小时有效,即X1==1和计数大于10时便返回,每一个数码管可以显示0-9十个数字,然后调用延时即可。设置P2=0xbf,那么选中小时的各位数码管,即W2,设置P2=0xdf,那么选中分的十位数码管,即W3,设置P2=0xef,那么选中分的各位数码管,即W4。具体流程图如下。
假设为设置状态那么秒数大于0.5S时关闭位选
N=2时 t<10(秒小于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++
N
t==20?是否为1s
Y
t清零,Sec++
N
Sec==60?是否为1m
Y
Sec清0,m++
N
m==60?是否为1h?
Y
m清零,h++
N
H=24?是否为1天?
Y
h==0,中断返回
图4-3 计时程序流程图
4.4 辅助子程序
此局部包含包含数码管显示辅助子程序、初始化子程序、按键扫描辅助函数和延时子程序。
(1) 数码管显示子程序主要是把小时分解到千位和百位,分钟分解到十位和各位。程序见void bianhuan1(void)局部的编写。
对应的端口号、数字、和断码表如表4-4所示
表4-4 I/O分配表
a
d
dp
c
g
b
f
a
数字
断码
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
0
0
1
0
1
0
0
0
0
28H
1
1
1
0
1
0
1
1
1
EBH
0
0
1
1
0
0
1
0
2
32H
1
0
1
0
0
0
1
0
3
A2H
1
1
1
0
0
0
0
1
4
E1H
1
0
1
0
0
1
0
0
5
A4H
0
0
1
0
0
1
0
0
6
24H
1
1
1
0
1
0
1
0
7
EAH
0
0
1
0
0
0
0
0
8
20H
〔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,也就会出现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 软件仿真显示
软件仿真整体效果如图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〕分钟的设置。按下第一个键两次进展分钟的设置,再按下第二个键两次时间显示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直接设置会有冲突,要错开进展设置,当0.5秒时就是亮一次,再过0.5秒就灭一次,这样闪亮就是1S。
第6章 总结
单片机课程设计分为两周,第一周在教师的指导下我们完成了对我们组课题作息时间控制器的方案确定,设计了原理图,再仿真,焊接。这一过程让我收获颇多,让我明白了就自动化专业而言,我们所学的东西都是一层连一层的,再对原理图的设计时,我们感觉甚至对以前学的简单数模电知识都忘记了,再紧的时间里一边查阅以前所学的课程,像模电、数电、电路、C语言、微机原理、proteus都引用到了本次课程设计。
我们组员在这场课程设计中有了明确的分工合作,画原理图硬件设计、程序设计分析调试、对整个单片机的调试与分析。反反复复,有时一个小的错误要检查很久,但我们组员至始至终没有放弃,最终在教师检查与指导我们终于完成了这次单片机课程设计。
参考文献
[1] 王迎旭等.单片机原理及及应用.【M】机械工业.2021年
[2] 周向红.51单片机课程设计.【M】华中科技大学.2021年
[3] 世清.c语言课程设计.【M】大学.2021年
[4] 迎新.单片机微型计算机原理及接口技术.【M】国防工业.2021年
附录
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code a[10]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0};
sbit be=P3^7;
sbit DP=P1^5;
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; //写入工作方式字
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(X1==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(sec<30)be=0;else be=1;}}
if(h==9&&m==40){if(sec<30)be=0;}
if(h==10){if((m==10||m==55)&&sec<30)be=0;else be=1;}
if((h==11)&&(m==5)&&(sec<30))
be=0;
if(h==11&&m==50&&sec<30)
be=0;
if(h==14)
{if(m==0||m==45||m==55){if(sec<30)be=0;else be=1;}}
if(h==15&&m==40){if(sec<30)be=0;}
if(h==16)
{if((m==10||m==55)&&sec<30)be=0;else be=1;}
else if(h==17){if((m==5||m==50)&&sec<30)be=0;else be=1;}
if(h==19)
{if(m==0||m==45||m==55){if(sec<30)be=0;else be=1;}}
if(h==20){if((m==40||m==50)&&sec<30)be=0;else be=1;}
if(h==21){if((m==0||m==40)&&sec<30)be=0;
else be=1;}
}
//}
}
void display() //显示函数
{
if(X1==1&&t>=10)P2=0xff;
P1=a[qian];
P2=0x7F;
delay(100);
P2=0xff;
if(X1==1&&t>=10)P2=0xff;
P1=a[bai];
if(flag==1)
DP=0;
else
DP=1;
P2=0xbf;
delay(100);
P2=0xff;
if(X1==2&&t>=10)P2=0xff;
P1=a[shi];
P2=0xdf;
delay(100);
P2=0xff;
if(X1==2&&t>=10)P2=0xff;
P1=a[ge];
P2=0xef;
delay(100);
P2=0xff;
}
void bianhuan1(uchar h) //时间辅助函数
{
qian=h/10;
bai=h%10;
shi=m/10;
ge=m%10;
}
unsigned 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;
展开阅读全文