利用数码管显示倒计时控制器设计.docx
《利用数码管显示倒计时控制器设计.docx》由会员分享,可在线阅读,更多相关《利用数码管显示倒计时控制器设计.docx(23页珍藏版)》请在冰点文库上搜索。
利用数码管显示倒计时控制器设计
学号1322010119
天津城建大学
单片机原理及应用A课程
设计说明书
利用数码管显示的倒计时控制器设计
起止日期:
2016年05月30日至2016年6月10日
学生姓名
杨德虎
班级
电气
(1)班
成绩
指导教师(签字)
控制与机械工程学院
2016年6月10日
天津城建大学
课程设计任务书
2015—2016学年第1学期
控制与机械工程学院13电气工程及其自动化专业电气
(1)班班级
课程设计名称:
单片机原理及应用A
设计题目:
利用数码管显示的倒计时控制器设计
完成期限:
自2016年5月30日至2016年6月10日共2周
设计依据、要求及主要内容:
一.课程设计的目的
1.进一步熟悉和掌握单片机的结构及工作原理。
2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3.通过课程设计,掌握以单片机核心的电路设计的基本方法和技术。
4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5.通过完成一个包括电路设计和程序开发的完整过程,了解开发单片机应用系统的全过程,为今后从事相应开发打下基础。
二.课程设计的基本要求
1.认真认识设计的意义,掌握设计工作程序,学会使用工具书和技术参考资料,并培养科学的设计思想和良好的设计作风。
2.提高模型建立和设计能力,学会应用相关设计资料进行设计计算的方法。
3.提高独立分析、解决问题的能力,逐步增强实际应用训练。
4.课程设计的说明书要求简洁、通顺,计算正确,图纸表达内容完整、清楚、规范。
5.课程设计说明书封面格式要求见《天津城建大学课程设计教学工作规范》附表1。
三.课程设计具体要求
a)要求每位同学独立完成设计任务。
b)原理图及PCB设计
1.原理图设计要符合项目的工作原理,连线要正确。
2.图中所使用的元器件要合理选用,电阻、电容等器件的参数要正确标明。
3.原理图要完整,CPU、外围器件、外扩接口、输入/输出装置要一应俱全。
4.设计完成上述原理图对应的PCB图。
c)程序调计
1.根据要求,将总体功能分解成若干个子功能模块,每个功能模块完成一个特定的功能。
2.根据总体要求及分解的功能模块,确定各功能模块之间的关系,设计出完整的程序流程图。
d)程序调试
1.编写相关程序,并进行仿真。
2.将程序下载到单片机,进行运行调试。
e)设计说明书
1.原理图设计说明
简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。
2.程序设计说明
对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。
3.画出工作原理图,程序流程图并给出相应的程序清单。
四.设计任务
STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片,设计利用数码管显示定时倒计时。
一、设计利用PNP驱动LG4042BH(或同型号共阳极)数码管,显示倒计时;二是利用单片机I/O口驱动继电器的控制输出电路设计;三是设计出在到达定时时间给出1s的继电器动作信号(时间因为是四位数码管,可自行设定时间的格式,设定的时间根据自己能力可扩展键盘设定或提前设定好)。
指导教师(签字):
系(教研室)主任(签字):
批准日期:
年月日
摘要
在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
现在尽管单片机的应用已经很普遍了,但仍有许多可以用单片机控制而尚未实现的项目,因此,单片机的应用大有想像和拓展空间。
单片机的应用有利于产品的小型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等。
本篇论文讨论了简单的倒计时控制器的设计与制作 ,本系统采用STC12C5A60S2作为主控芯片,设计一款的倒计时器,该倒计时器能在数码管显示倒计时的时间,时间可由按键进行设定,通过控制按键进行选择59s-0s、开始值由人工输入的特点。
首先检测按键,当相应的按键按下时,定时中断二十次后即一秒后,初值自动减一。
当初值减到零后,计时停止。
关键字:
stc12c5a60s2,数码管倒计时,继电器输出
2.3总体设计流程图3
4.4继电器电路7
第五章仿真电路图与PCB设计8
总结10
参考文献11
附录12
附录一原理图12
附录二源程序12
第一章设计任务和要求
1.1单片机课程设计内容
STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片,设计利用数码管显示定时倒计时。
一、设计利用PNP驱动LG4042BH(或同型号共阳极)数码管,显示倒计时;二是利用单片机I/O口驱动继电器的控制输出电路设计;三是设计出在到达定时时间给出1s的继电器动作信号(时间因为是四位数码管,可自行设定时间的格式,设定的时间根据自己能力可扩展键盘设定或提前设定好)。
1.2单片机课程设计要求
1.能实现倒计时的显示;
2.可扩展用按键设置倒计时时间功能;
3.能实现到达定时时间给出1s的继电器动作信号。
1.3设计总体思路
基于STC12C5A60S2单片机的数码管显示模块显示的倒计时器。
主要是以单片机来控制,用按键来设定倒计时初始时刻的值,按键来进行倒计时初值的选择。
本系统采用STC12C5A60S2作为主控芯片,设计一款的倒计时器,该倒计时器能在数码管显示倒计时的时间,时间可由按键进行设定,4位数码管做显示,通过控制按键进行选择59s-0s、开始值由人工输入。
首先检测按键,当相应的按键按下时,定时中断二十次后即一秒后,初值自动减一。
当初值减到零后,计时停止。
当计时停止后,继电器输出1s。
第二章设计方案
2.1总体设计方案说明
1.程序设计及调试
根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。
2.硬件调试
根据仿真电路图完成电路板连接,并进行软、硬件的调试,只到达到预期目的。
3.后期处理
对设计过程进行总结,完成设计报告。
2.2总体设计框图
图2-2设计框图
2.3总体设计流程图
图2-3流程图
第三章主要器件及简介
3.1主要器件
1.STC12C5A60S2单片机;
2.LG4042BH数码管;
3.键盘
4.继电器
3.2主要器件简介
1.STC12C5A60S2单片机简介
STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。
各管脚功能如图2所示。
1.8位数据总线,16位地址总线的CPU;
2.具有布尔处理能力和位处理能力;
3.采用哈佛结构,程序存储器与数据存储器地址空间各自独立,便于程序设计;
4.相同地址的64KB程序存储器和64KB数据存储器;
5.0-8KB片内程序存储器(8031无,8051有4KB,8052有8KB,89C55有20KB);
6.128字节片内数据存储器(8051有256字节);
7.32根双向并可以按位寻址的I/O线;
8.两个16位定时/计数器(8052有3个);
9.一个全双工的串行I/O接口;
10.多个中断源的中断结构,具有两个中断优先级;
11.片内时钟振荡器。
图3-1STC12C5A60S2引脚图
2.LG4042BH数码管简介
LG4042BH就是一个8段共阳极四位一体式数码管,原理图如下图所示;
3.键盘
S6~S21为16个矩阵键盘,8条线分别与单片机的P1口相连, 其中矩阵键盘的4行分别与单片机的P1.3~P1.0相连,矩阵键盘的4列分别与单片机的P1.7~P1.4相连.原理图如下图所示;
4.继电器
STC12C5A60S2系列单片机继电器模块由一个SN74HC573ADW芯片接了一个ULN2003L芯片,P2.4口为其锁存端口,原理图如下图所示;
第四章系统硬件设计
4.1最小系统
复位时单片机的初始化操作,只要给RST引脚加上两个机器周期以上的高电平信号,就可以使STC12C5A60S2单片机复位。
本次采用的是1M晶振,按钮复位电路。
图4-1最小系统接线图
4.28段四位共阳极数码管
数码管ABCDEFGDP分别与P1.0~P1.7相连,实现段选,数码管的位选口34分别与P3.1与P3.0相连,实现位选。
图4-2数码管接线图
4.3键盘输入电路
本次设计采用矩阵键盘,S6~S21为16个矩阵键盘,8条线分别与单片机的P1口相连, 其中矩阵键盘的4行分别与单片机的P1.3~P1.0相连,矩阵键盘的4列分别与单片机的P1.7~P1.4相连.
图4-3按键输入电路
4.4继电器电路
继电器的作用为在倒数完成后产生相应动作信号,LED在继电器工作时点亮。
继电器与单片机P2.4口相连。
图4-4继电器电路
第五章仿真电路图与PCB设计
用Keil和Protues进行仿真调试,仿真结果完全达到预期目的。
图5-1仿真电路图
根据原理图,用proteus自动生成PCB图,PCB设计如下图所示;
图5-2PCB平面电路图
图5-2PCB3D电路图
总结
通过自己的努力,老师的耐心指导,同学们的帮助,本次单片机课程设计顺利完成,通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。
通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。
在设计过程中,从仿真电路的设计,源程序的书写和修改以及调试中都遇到了不少问题,并且从中学到了不少知识。
课程设计需要很大的耐心,尤其是遇到困难的时候,这也是对我们的考验。
在设计过程中,我们遇到问题不是感到急躁,而是耐心地寻找解决的办法,与老师、同学进行交流讨论,寻求最佳的解决办法。
我在设计过程中还不断提出自己的疑点以及新的想法,联系实际应用,将课本上学习的东西运用到实际中,这些都令我们受益匪浅。
经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性。
参考文献
[1]徐爱钧,徐阳等,单片机原理及应用(第二版),机械工业出版社,2013
[2]郭天祥,新概念51单片机C语言教程,电子工业出版社,2009
[3]张毅刚,彭喜元。
单片机原理与应用[M]。
北京,高等教育出版社2007.10
[4]李广弟,单片机基础[M]。
北京北京航天航空大学出版社2001
附录
附录一原理图
附录二源程序
程序代码:
#include
#defineucharunsignedchar
sbitwe1=P3^0;
sbitwe2=P3^1;
sbitk1=P3^4;
sbitdq=P2^4;
uchartable[]={0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0};
ucharnum;
ucharfg=2;
ucharsg=0;
ucharj=0;
uchargw=9;
ucharsw=9;
voidchushi();
voiddelay();
voiddelay2();
ucharkeydown();
voidmain()
{
chushi();
k1=1;
dq=0;
while
(1)
{
if(fg==2)
{
switch(keydown())
{
case(0):
gw=9;break;
case(4):
gw=8;break;
case(8):
gw=7;break;
case(12):
gw=6;break;
case
(1):
gw=5;break;
case(5):
gw=4;break;
case(9):
gw=3;break;
case(13):
gw=2;break;
case
(2):
gw=1;break;
case(6):
gw=0;break;
case(10):
sw=8;break;
case(14):
sw=7;break;
case(3):
sw=6;break;
case(7):
sw=5;break;
case(11):
sw=4;break;
}
we1=0;
we2=1;
P0=table[gw];
delay();
we1=1;
we2=0;
P0=table[sw];
delay();
if(keydown()==15)
{
delay2();
if(keydown()==15)
{
fg=1;
j=0;
}
}
}
if(fg==1)
{
if(j==20)
{
j=0;
gw++;
}
if(gw==10)
{
gw=0;
sw++;
}
if(sw==10)
{
fg=0;
j=0;
}
we1=0;
we2=1;
P0=table[gw];
delay();
we1=1;
we2=0;
P0=table[sw];
delay();
}
if(fg==0)
{
dq=1;
fg=3;
j=0;
gw=9;
sw=9;
we1=0;
we2=1;
P0=table[gw];
delay();
we1=1;
we2=0;
P0=table[sw];
delay();
}
if(fg==3)
{
if(j==21)
{
dq=0;
}
gw=9;
sw=9;
we1=0;
we2=1;
P0=table[gw];
delay();
we1=1;
we2=0;
P0=table[sw];
delay();
}
}
}
voidtime1()interrupt1
{
j++;
TH0=0x3c;
TL0=0xb0;
}
voidchushi()
{
TMOD=0x01;
TCON=0x10;
IE=0x82;
TH0=0x3c;
TL0=0xb0;
}
ucharkeydown()
{
chara;
P1=0x0f;
if(P1!
=0x0f)
{
delay2();
if(P1!
=0x0f)//测试列
{
P1=0x0f;
switch(P1)
{
case(0X07):
num=0;break;
case(0X0b):
num=1;break;
case(0X0d):
num=2;break;
case(0X0e):
num=3;break;
default:
num=17;
}
P1=0xf0;//测试行
switch(P1)
{
case(0X70):
num=num;break;
case(0Xb0):
num=num+4;break;
case(0Xd0):
num=num+8;break;
case(0Xe0):
num=num+12;break;
default:
num=17;
}
while((a<50)&&(P1!
=0xf0))//检测按键松手检测
{
delay2();
a++;
}
a=0;
}
}
returnnum;
}
voiddelay()//误差0us
{
unsignedchara,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
voiddelay2(void)//误差0us
{
unsignedchara,b;
for(b=4;b>0;b--)
for(a=248;a>0;a--);
}