河北工程大学课程设计厨房提醒器.docx
《河北工程大学课程设计厨房提醒器.docx》由会员分享,可在线阅读,更多相关《河北工程大学课程设计厨房提醒器.docx(23页珍藏版)》请在冰豆网上搜索。
河北工程大学课程设计厨房提醒器
河北工程大学课程设计厨房提醒器
信息与电气工程学院
课程设计说明书
(2010/2011学年第二学期)
课程名称:
单片机应用
题目:
数字钟设计
专业班级:
电气08级3班
学生姓名:
李海忠
学号:
080060303
指导教师:
岑毅南等
设计周数:
两周
设计成绩:
2011年7月8日
一、课程设计目的........................................................1
二、课程设计正文........................................................2
1.任务要求说明.......................................................2
1.1、主要任务......................................................2
1.2、技术要求......................................................2
1.3、设计思路......................................................2
1.4、所需器件......................................................3
1.5、硬件设计......................................................3
1.5.1.STC90C52AD说明.............................................3
1.5.2.数码管说明.................................................4
1.5.3.74LS245说明................................................5
2.单元模块设计.......................................................5
2.1时间显示模块..................................................5
2.2按键调时模块.................................................6
2.3显示驱动模块.................................................7
3.原理简介...........................................................73.1电路原理图....................................................7
3.2、原理介绍....................................................8
4.参数计算...........................................................8
5.系统软件设计.......................................................8
5.1开发软件KeilC51uVision3简介................................8
5.2单片机程序烧写软件............................................9
5.3参考程序.....................................................10
6、软硬件调试........................................................18
三、课程设计总结........................................................18
四、参考文献............................................................19
附录一、系统原理图
附录二、PCB图
1、课程设计目的
1.进一步熟悉和掌握单片机的结构及工作原理。
2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3.通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。
4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5.通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。
2、课程设计正文
1任务及要求说明
1.1主要任务
用STC90C52AD作为控制单元,实现数字钟的设计。
1)设计键盘输入电路
2)设计显示电路
3)合理分配地址,编写系统程序
4)利用Protel设计硬件电路原理图并进行软硬件联机调试
1.2技术要求
技术要求
1、用P1口控制4只段码管,用2位数码管进行分针时间显示,用2位数码管进行秒针时间显示。
2、可以调整时间,且调整位闪烁提示。
3、设置调节切换键、确认键、加1键和减1键。
1.3设计思路
1、时间的显示:
单片机P0.0—P0.3控制位选,可分别选通四只共阴数码管。
P2.6控制段选,可点亮选通的数码管。
P1.0—P1.6控制段码管,将数据送给74LS245驱动数码管显示时间。
2、时间的调整:
设置4个按钮,分别由P2.0—P2.3控制,其编号分别是1到4。
1为调节切换键,2为加1键,3为减1键,4为确认开始键。
1.4设计所需器材
电阻:
1K(4个)10K(8个)3.3k(4个)300(8个)
按键开关:
4个
瓷石电容:
22pF(2个)
独石电容:
0.22μF(5个)
电解电容:
10μF(3个)1.0μF(2个)47μF(4个)
晶振:
12MHZ(1个)
三极管:
NPN(3个)
共阴极数码管:
4个
底座:
DIP40(1个)DIP16(1个)
万能电路板:
1个
芯片:
STC90C52(1片)MAX232(1片)
发光二极管:
3个
接线端子:
1个
1.5硬件设计
1.5.1.STC90C52AD说明
AT89C51的引说明和功能说明如下:
XTAL1:
接外部晶振的一个引脚。
在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。
它采用外部振荡器时,些引脚应接地。
XTAL2:
接外部晶振的一个引脚。
在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。
当采用外部振荡器时,则此引脚接外部振荡信号的输入。
RST:
STC90C52AD的复位信号输入引脚,高电位工作,当要对芯片又时,只要将此引脚电位提升到高电位,并持续两个机器周期以上的时间,AT89C51便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。
P0口(P0.0~P0.7)是一个8位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低8位)和数据总线复用。
外部不扩展而单片应用时,则作一般双向I/O口用。
P0口每一个引脚可以推动8个LSTTL负载。
P2口(P2.0~P2.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),当访问外部程序存储器时,它是高8位地址。
外部不扩展而单片应用时,则作一般双向I/O口用。
每一个引脚可以推动4个LSTL负载。
P1口(P1.0~P1.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),其输出可以推动4个LSTTL负载。
仅供用户作为输入输出用的端口。
P3口(P3.0~P3.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。
1.5.274LS245说明
74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收) DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。
由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。
P0口与74LS245输入端相连,E端接地,保证数据线畅通。
8051的/RD和/PSEN相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1←D1),其它时间处于输出(P0.1→D1)。
1.5.3数码管
LED显示器由8段发光二极管组成,排列成8字形状,称为8段LED显示器,器件内部接线图如图所示:
为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
简易计算器用到的数字0~9的共阴极字形代码如下表:
显示字符
0
1
2
3
4
5
6
7
8
9
段码
0x7b
0x11
0x67
0x57
0x1d
0x5e
0x7e
0x13
0x7f
0x5f
共阴数码管段码表
2.单元模块设计
2.1、时间显示模块
时间显示模块
2.2按键调时模块
按键调时模块
2.3显示驱动模块
显示驱动模块
3.原理简介
3.1电路原理图
电路原理图
3.2、原理介绍
(1)初始时,4个数码管显示全为0,并且秒显示数码管最后一位每秒钟加1.此时,单片机内部定时器0计时,每100ms溢出一次,十次中断秒显加一。
单片机P1口不断向245送数据驱动数码管显示。
(2)按下S1时,系统进入调节切换模式,定时器0关闭,计时停止。
按S1一下调分,按S1两下条秒。
S2、S3分别为加数和减数。
S4为确认开始键,按下后系统计时开始。
(3)进入调整时间模式时,数码管闪烁显示提示。
4.参数计算
1、定时器初值计算
定时器0设为16位定时器。
外部为6兆的晶体振荡器,故而可知一个机器周期是2微秒。
定时器0高八位和第八位分别装入初值TH0=(65536-50000)/256;TL0=(65536-50000)%256。
每100ms定时器溢出一次,中断十次刚好1s,秒显示加1.
5.系统软件设计
5.1开发软件KeilC51uVision3简介
KeiluVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持、PLM、汇编和C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
KeilC51集成开发环境主要由菜单栏、工具栏、源文件编辑窗口、工程窗口和输出窗口五部分组成。
工具栏为一组快捷工具图标,主要包括基本文件工具栏、建造工具栏和调试工具栏,基本文件工具栏包括新建、打开、拷贝、粘贴等基本操作。
建造工具栏主要包括文件编译、目标文件编译连接、所有目标文件编译连接、目标选项和一个目标选择窗口。
调试工具栏位于最后,主要包括一些仿真调试源程序的基本操作,如单步、复位、全速运行等。
在工具栏下面,默认有三个窗口。
左边的工程窗口包含一个工程的目标(target)、组(group)和项目文件。
右边为源文件编辑窗口,编辑窗口实质上就是一个文件编辑器,我们可在这里对源文件进行编辑、修改、粘贴等。
下边的为输出窗口,源文件编译之后的结果显示在输出窗口中,会出现通过或错误(包括错误类型及行号)的提示。
如果通过则会生成“HEX”格式的目标文件,用于仿真或烧录芯片。
基本环境如图2-1所示:
MCS-51单片机软件KeilC51开发过程为:
①建立一个工程项目,选择芯片,确定选项。
②建立汇编源文件或C源文件。
③用项目管理器生成各种应用文件。
④检查并修改源文件中的错误。
⑤编译连接通过后进行软件模拟仿真或硬件在线仿真。
KeilC51软件的运行界面
5.2单片机程序烧写软件
STC90C52AD系列单片机大部分具有在系统可编程特性,单片机在用户系统上即可在线
烧录用户程序,而无需将单片机从已经生产好的产品上拆下,在用通用编程器进行烧写程序。
大部分STC90C50AD系列单片机在销售给用户之前已经在单片机系统内部固化了ISP系统引导程序配合PC端得控制程序即可将用户的程序代码下载进单片机内部,故无需编程器烧写程序。
5.3参考程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitS1=P2^0;
sbitS2=P2^1;
sbitS3=P2^2;
sbitS4=P2^3;
sbitDULA=P2^6;
voiddelay(uintt);
voiddisplay(uintk,m,n,p,q);
voidfenjia();
voidmiaojia();
voidfenjian();
voidmiaojian();
voidtiaozheng();
voidtiaobiao();
voidinit_t0();
uintNUM;
uintSEC;
uintflag1=0;
uinti=0;
ucharcodeseg_table1[]={0x7b,0x11,0x67,0x57,0x1d,0x5e,0x7e,0x13,0x7f,0x5f};
voidmain()
{
NUM=0;
SEC=0;
init_t0();
while
(1)
{
while(!
flag1)
{
display(SEC,0x01,0X02,0X04,0X08);
if(S4==0)
{
delay(30);
if(S4==0)
flag1=1;
}
if(S1==0)
{
delay(30);
if(S1==0)
TR0=1;
}
}
if(flag1)
{
while(flag1)
{
tiaobiao();
}
}
}
}
voiddelay(uintt)
{
uintx,y;
for(x=t;x>0;x--)
{
for(y=120;y>0;y--)
{
}
}
}
voiddisplay(uintk,m,n,p,q)//秒显示最低位0x01,第二位0x02,第三位0x04,第四位0x08
{
ucharmiao,shimiao,fen,shifen;
shifen=k/600;
fen=k%600/60;
shimiao=k%60/10;
miao=k%10;
P0=m;//把最低为数码管选中
DULA=1;
P1=seg_table1[miao];
DULA=0;
delay
(1);
P0=n;//选中第二个数码管
DULA=1;
P1=seg_table1[shimiao];
DULA=0;
delay
(1);
P0=p;//选中第三个数码管
DULA=1;
P1=seg_table1[fen];
DULA=0;
delay
(1);
P0=q;//选中第四个数码管
DULA=1;
P1=seg_table1[shifen];
DULA=0;
delay
(1);
}
voidinit_t0()
{
TMOD=0x01;//00000001T0设为16为定时器
TH0=(65536-50000)/256;//100ms溢出
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;
TR0=1;
}
voidt0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
NUM++;//每100ms加1
if(NUM==10)
{
NUM=0;
SEC++;
if(SEC==3600)
{
SEC=0;
}
}
}
/******************************************************************************
调时函数
******************************************************************************/
voidfenjia()
{
if((S3==0)&&(SEC/600<=5)&&(SEC%600/60<=9))
SEC=SEC+60;
if(SEC/600==6)
SEC=0;
}
voidmiaojia()
{
if((S3==0)&&(SEC%60/10<=5)&&(SEC%10<=9))
SEC++;
if(SEC%60/10==6)
SEC=0;
}
voidfenjian()
{
if((S2==0)&&(SEC%600/60>0)|(SEC/600>0))
SEC=SEC-60;
}
voidmiaojian()
{
if((S2==0)&&(SEC%10>0)|(SEC%60/10>0))
SEC--;
}
/******************************************************************************
按键调时
******************************************************************************/
voidtiaozheng()
{
if(S4==0)
{
if(i<=4)
i++;
if(i==4)
i=0;
while(!
S4);
}
}
voidtiaobiao()
{
if(S4==0)
{
delay(30);
if(S4==0)
TR0=0;
tiaozheng();
while(!
S4);
}
if(i==1)
{
if(S3==0)
{
delay(30);
if(S3==0)
fenjia();
while(!
S3);
}
if(S2==0)
{
delay(30);
if(S2==0)
fenjian();
while(!
S2);
}
display(SEC,0,0,0X04,0X08);
delay(5);
display(SEC,0,0,0,0);
delay(10);
display(SEC,0,0,0X04,0X08);
}
if(i==2)
{
if(S3==0)
{
delay(30);
if(S3==0)
miaojia();
while(!
S3);
}
if(S2==0)
{
delay(30);
if(S2==0)
miaojian();
while(!
S2);
}
display(SEC,0X01,0X02,0,0);
delay(5);
display(SEC,0,0,0,0);
delay(10);
display(SEC,0X01,0X02,0,0);
}
if(i==3)
{
flag1=0;
}
}
6.软硬件调试
系统调试:
根据系统设计方案,本系统的调试共分为两大部分:
硬件调试,软件调试。
(1)硬件调试
对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。
首先用数字万用表对实物板上的各元器件进行测试,在测试过程中,检验出一些错误,如数码管的两个引脚短接了,导致数码管显示不正确,将两引脚分开后,数码管正常工作。
(2)软件调试
软件调试采用单片机仿真器keiluVision及protus,将编好的程序进行调试,主要是检查语法错误。
再进行仿真,检验各个子程序是否正确执行,和硬件模块的协调性。
三、课程设计总结
课设心得
时间飞快,两个星期的课程设计已接近尾声。
两个星期的课程设计让我学到了很多。
学到的不仅仅是如何查找资料,画原理图、pcb,写程序及调试电路板,更有贯穿课程设计始终的团队精神。
一项工程一个人很难完成,而必须依靠团队的力量。
有了团结的队伍才能做出完美的设计,才能完成伟大的工程。
在设计之前,我翻阅了上课时做的笔记,看了下老师上课时用的课件,又去图书馆查阅了一些资料。
这样对单片机应用课程设计有了大体思路:
首先,研读课程设计任务书,定制设计方案。
其次,根据定制的方案绘制原理图并生成pcb。
再次,根据原理图及pcb焊制电路板,写程序并进行软硬件调试。
最后,撰写报告。
课程设计第一天,班长把各组的设计题目发到各组手中,我们的课设的题目是“数字钟设计”。
看到题目后我很高兴,因为在创新实验室我曾经做过比这个复杂得多的数字钟。
看完设计要求后,我就开始着手绘制原理图。
不过绘图的时候问题出现了。
我不知到老师那到底有什么器件,单片机最小系统好说,数码管驱动用什么器件就要看老师那有什么了。
当时考虑了下驱动数码管用74HC245可以,用573可以,用三极管也行。
于是我就大概画了个原理图。
当时用的是两片74HC573,因为看到课设任务书上的要求是用P1口控制4只段码管。
有了两片573单用P1口就能驱动数码管显示。
天气很热,我们的工作也很累,汗水打湿了我们的衣衫,但我们却很开心。
因为我们收获的不仅仅是一张原理图还有团队合作精神。
实验课上我把画好的原理图给老师审查了一下,后来得知实验室没有573,于是我快速回实验室把两片573