河北工程单片机课设简易厨房报警器分解Word文件下载.docx
《河北工程单片机课设简易厨房报警器分解Word文件下载.docx》由会员分享,可在线阅读,更多相关《河北工程单片机课设简易厨房报警器分解Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
②4个数码管分别用于显示分十位、分个位、秒十位和秒个位。
2.2系统设计分析
本次厨房提醒器设计的过程中由于条件限制,设计过程中选取AT89C51代替AT89S51,其能够满足本次设计的功能需求,符合本次设计要求。
本系统应包括键盘输入系统、显示系统、报警系统、控制系统四部分。
键盘输入系统需要实现“开始”键、“清除”键、“分十位加1”键、“分个位加1”键和“秒十位加1”键;
显示系统需实现时间的显示;
报警系统需要实现倒计时为00:
00后蜂鸣器报警提醒;
控制系统需要实现数值设置计数、减计数和按键的响应。
2.3系统硬件的设计
2.3.1硬件电路材料
名称
数值
数量
电阻(Ω)
330
7
1K
5
10K
2K
1
电容
10μf
22pf
2
AT89C51
CD4511
三极管NPN
4
三极管PNP
蜂鸣器
共阴极数码管
按键
6
2.3.2硬件线路设计
2.3.2.1设计材料说明
1、AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,其外形及引脚排列见图2-1。
图2-1AT89C51外形及引脚图
AT89S51的引说明和功能说明如下:
VCC:
AT89S51电源正极输入,接+5V电压。
GND:
电源接地端。
XTAL1:
接外部晶振的一个引脚,内部是反相放大器输入端,构成了片内振荡器,采用外部振荡器时,引脚接地。
XTAL2:
接外部晶振的一个引脚。
在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。
当采用外部振荡器时,则此引脚接外部振荡信号的输入。
RST:
AT89C51的复位信号输入引脚,高电位工作。
将此引脚电位提升到高电位,并持续两个机器周期以上的时间,A系统复位。
P0口(P0.0~P0.7)是一个8位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低8位)和数据总线复用。
外部不扩展而单片应用时,则作一般双向I/O口用。
P0口每一个引脚可以推动8个LSTTL负载。
P1口(P1.0~P1.7)是具有内部提升电路的双向I/0端口(准双向并行I/O口),其输出可以推动4个LSTTL负载。
仅供用户作为输入输出用的端口。
P2口(P2.0~P2.7)是具有内部提升电路的双向I/0端口(准双向并行I/O口),当访问外部程序存储器时,它是高8位地址。
每一个引脚可以推动4个LSTL负载。
P3口(P3.0~P3.7)是具有内部提升电路的双向I/0端口(准双向并行I/O口),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。
AT89C51内部程序存储器(FLASH)4K字节;
外部程序存储器(ROM)64K字节;
内部数据存储器(RAM)256字节;
外部数据存储器(RAM)64K字节,只读程序存储器和外部数据存储器分别如下图。
图2-2只读程序存储器图2-3外部数据存储器
表2-1内部高128个字节地址空间的特殊功能寄存器区
AT89C51复位后寄存器状态发生变化,其数据值见表2-2。
表2-2AT89C51复位后寄存器状态
AT89C51中断入口见表2-3。
表2-3AT89C51中断入口
PSW程序状态字见表2-4。
表2-4PSW程序状态字
CY(PSW.7):
高位进位标志位。
常用“C”表示;
AC(PSW.6):
辅助进位标志;
F0(PSW.5):
用户标志位;
RS1(PSW.4):
寄存器组选择位1;
RS0(PSW.3):
寄存器组选择位0;
OV(PSW.2):
溢出标志位;
-(PSW.1):
保留位,无定义;
P(PSW.0):
奇偶校验位,在每一个指令周期中,若累加器(A)中的“1”的位个数是奇数个则P=1,偶数个则P=0。
定时/计数器主要包括TMOD和TCON两种类型。
TMOD工作方式控制寄存器中当GATE=1时,INT0或INT1引脚且为高电平,同时TCON中的TR0或TR1控制位如为1时,定时/计数器0或1才会工作。
若GATE=0,同时只要TCON中的TR0或TR1控制位如为1时,定时/计数器0或1即可工作。
C/T:
选择定时或计数器模式。
当C/T=1为计数器,由外部引脚T0或T1输入计数脉冲。
C/T=0时为计时器,由内部系统时钟提供计时工作脉冲。
选择操作方式1为16位定时/计数器;
2为8位定时/计数器。
TCON定时/计数器控制寄存器中TF1/0:
计时器1/0溢出标志,当计时溢出时,由硬件设定为1,在执行相对的中断服务程序后则自动清0;
TR/0:
计时器1/0启动控制位,可以由软件来设定或清除。
TR=1时启动计时器工作,TR=0时关闭;
IE1/0:
外部中断1/0工作标志,当外部中断被检查出来时,硬件自动设定此位,在执行中断服务程序后,则清0;
IT1/0:
外部中断1/0工作形式选择,IT=1时,由下降缘产生外部中断,IT=0时,则为低电位产生中断。
SCON串行口控制寄存器中SM0(SCON.7)串行通讯工作方式设定位0;
SM1(SCON.6)串行通讯工作方式设定位1;
SM2(SCON.5)允许方式2或方式3多机通讯控制位;
REN(SCON.4)允许/禁止串行接收控制位;
TB8(SCON.3)在方式2或方式3为要发送的第9位数据,按需要由软件置位或清0;
RB8(SCON.2)在方式2或方式3是接收到的第9位数据,在方式l若SM2=0,则RB8是接收到的停止位,方式0不用RB8;
TI(SCON.1)发送中断请求标志位;
RI(SCON.0)接收中断请求标志位。
在其他方式中,串行接收到停止位的中间时刻由内部硬件置位RI=1必须由软件复位RI=0。
其中SM0、SM1按下列组合确定串行通讯的工作方式见表2-5。
表2-5SM0、SM1按下列组合确定串行通讯的工作方式
、
常用波特率与定时/计数器1各参数关系见表2-6。
表2-6常用波特率与定时/计数器1参数关系
2、数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);
共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点)。
本次选取共阴极数码管,数码管见图2-4。
图2-4共阴极数码管
3、CD4511各引脚的名称:
其中7、1、2、6分别表示A、B、C、D;
5、4、3分别表示LE、BI、LT;
13、12、11、10、9、15、14分别表示a、b、c、d、e、f、g。
左边的引脚表示输入,右边表示输出,还有两个引脚8、16分别表示的是VDD、VSS,具体见图2-5。
图2-5CD4511结构及引脚
BI:
4脚是消隐输入控制端,当BI=0时,七段数码管均处于熄灭(消隐)状态,不显示数字。
LT:
3脚是测试输入端,当BI=1,LT=0时,译码输出全为1,七段均发亮,显示“8”。
LE:
锁定控制端,LE=0允许译码输出;
LE=1译码器是锁定保持,译码器输出LE=0时的数值。
A1、A2、A3、A4为8421BCD码输入端。
a、b、c、d、e、f、g:
为译码输出端,输出为高电平1有效。
CD4511具有锁存、译码、消隐功能,通常以反相器作输出级,通常用以驱动LED。
2.3.2.2线路设计说明
1、时钟电路中12MHz的晶振,机器周期为1μs,其线路设计见图2-6。
图2-6时钟电路图
2、按键电路中P0口设置上拉电阻,电阻阻值为10KΩ,按钮接地,具体见图2-7。
2-7按键电路图
3、报警线路与P2.6口连接,选取1KΩ电阻和PNP管构成控制线路,具体见图2-8。
2-8报警电路图
4、显示线路设计中数码管的7个段码分别由P1口控制,限流电阻为300Ω,当单片机P1的相应口为高电平时,会点亮数码管的相应的段码。
2-9显示电路图
5、位选电路由四个NPN型三极管与电阻串联而成,电阻的主要作用是保护单片机的并行口,NPN型三级管的b级分别接单片机的P2.0,P2.1,P2.2,P2.3,e端接接地,c端接数码管的位选端,当P2口中相应的并行口为高电平时,则三极管导通,并会选中相应的数码管。
2-10位选电路图
6、系统图见2-11。
2-11系统电路图
2.3.3系统软件编程
2.3.3.1流程图分析
此厨房提醒器采用的是提醒的方式,有五个按键,分别是“开始”键,“清除”键,“分十位加一”键,“分个位加一”键和“秒十位加一”键,程序需要设置各个按键的时间,然后按开始键倒计时,当再次显示00:
00时则蜂鸣器提醒到时,具体的程序流程图如下图2-12所示。
分十位设置
图2-12厨房提醒器程序流程图
2.3.3.2系统程序
#include"
reg52.h"
//AT89S52单片机头文件
/*定义系统变量与引脚*/
#defineuintunsignedint
#defineucharunsignedchar
sbitBuzzer=P2^6;
//蜂鸣器控制脚
sbitkey1=P0^0;
//按键1
sbitkey2=P0^1;
//按键2
sbitkey3=P0^2;
//按键3
sbitkey4=P0^3;
//按键4
sbitkey5=P0^4;
//按键5
sbitguan1=P2^0;
//数码管位选控制端1
sbitguan2=P2^1;
//数码管位选控制端2
sbitguan3=P2^2;
//数码管位选控制端3
sbitguan4=P2^3;
//数码管位选控制端4
intfenshi=0;
intfenge=0;
intmiaoshi=0;
intmiaoge=0;
/*子函数列表*/
voiddelay_dis(void);
//延时子程序
voiddelay_key(void);
uchargetkey(void);
//键值获取子函数
voidkey(void);
//按键扫描子程序
voidxianshi(void);
//显示子程序
voidjingbao(void);
//警报声
voidinit_dis(void);
//初始化数码管
///主程序
voidmain()
{
P1=0X00;
P2=0X00;
TMOD=0X01;
TH0=0X99;
TL0=0X2f;
ET0=1;
init_dis();
while
(1)
{xianshi();
getkey();
key();
}
}
//子函数
//初始化显示程序
voidinit_dis(void)
{
fenshi=0;
fenge=0;
miaoshi=0;
miaoge=0;
xianshi();
//动态扫描延时
voiddelay_dis(void)
uintN=4000;
while(N--);
//按键消抖扫描
voiddelay_key(void)
uintN=1000;
//确认哪个键按下
uchargetkey(void)
uchari=0;
if(!
key1)
delay_key();
if(!
i=1;
}
key2)
i=2;
key3)
i=3;
key4)
i=4;
key5)
i=5;
returni;
//按键程序
voidkey(void)
ucharkeyid;
keyid=getkey();
if(keyid==1)
fenshi+=1;
if(fenshi>
=6)
fenshi=0;
xianshi();
if(keyid==2)
fenge+=1;
if(fenge>
fenge=0;
if(keyid==3)
miaoshi+=1;
if(miaoshi>
miaoshi=0;
if(keyid==4)
TR0=1;
EA=1;
if(keyid==5)
miaoge=0;
//显示程序
voidxianshi(void)
guan4=0;
P1=miaoge;
guan4=1;
delay_dis();
guan3=0;
P1=miaoshi;
guan3=1;
guan2=0;
P1=fenge;
guan2=1;
guan1=0;
P1=fenshi;
guan1=1;
//中断程序
voidtimer0_int(void)interrupt1
staticunsignedcharcounter;
TH0=0X99;
TL0=0X2f;
(counter--))
counter=40;
miaoge--;
if(miaoge==-1)
miaoge=9;
miaoshi--;
if(miaoshi==-1)
miaoshi=5;
fenge--;
if(fenge==-1)
fenge=9;
fenshi--;
if(fenshi==-1)
TR0=0;
EA=0;
while
(1)
//init_dis();
guan1=0;
guan2=0;
guan3=0;
guan4=1;
P1=0;
jingbao();
//报警程序
voidjingbao(void)//警报声
unsignedintul,n;
for(ul=0;
ul<
3000;
ul++)//输出一个频率的声音
{
for(n=0;
n<
40;
n++);
//延时
Buzzer=~Buzzer;
//取反输出到喇叭的信号
2500;
ul++)//输出另一个频率的声音
50;
}
2.3.4系统软硬件调试
2.3.4.1硬件调试
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试是在用户系统未工作时的一种硬件检测,包括:
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步:
联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
2.3.4.2软件调试
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
3、课程设计总结
单片机课程对操作应用具有非常高的要求,需要我们在实际动手过程中不断丰富理论知识,提升设计、编程及动手方便的认知,积累经验,这对我们学习效果的改善具有至关重要的意义。
本次单片机课程设计希望通过我们动手设计、编程和操作深入掌握单片机的基础知识,加深对单片机功能的了解,顺利对其进行应用,将理论学习与实际操作结合在一起,是我们单片机学习过程中一次非常宝贵的机会。
本次课程设计的过程中我们小组一同进行厨房提醒器的设计。
课设的第一天和第二天,我们查阅了相关的书籍资料、文献资料和网络资料等,对本次课设中的材料信息进行采集。
采集的过程中我们不仅加深了对AT89S51单片机、CD4511等的认识,更进一步巩固了自身课堂所学到的知识,这为我们后续的线路设计和程序设计打下了非常好的基础。
课程设计第一周的后续时间我们先结合已经采集到的材料对简易厨房硬件线路图进行设计和绘画,其次开始着手准备程序设计。
该阶段中使用protus软件时操作的不熟练严重影响了我们的绘画进度,从一开始的磕磕绊绊,到最后的迅速绘画,我们对protus软件应用已经非常熟练。
这让我们在操作过程中真正掌握了Protus画图功能,使我们的理论学习和实践结合在了一起,大幅提升了我们的专业知识操作水平。
但在编程过程中我们发现第一次绘制的图形存在一定的问题,编程过程中无法正常执行。
为了解决上述问题,我们不得不对线路图进行修改和重绘。
虽然付出了一定的艰辛,但当老师检查一次过关可以直接拿工具的时候,我们还是有一丝小小的喜悦。
编程是我们组面临的重要挑战,本次编程的过程中我们使用C语言进行编程,编程仿真后基本达到设计要求。
可能前面的顺利让我们有些心浮气躁,结果却在焊接上出现了失误。
焊接操作的过程中由于焊接不当,整体的电路板显示存在一定的问题,厨房提醒器显示和报警均不能够正常实现,在后续课程设计中我们会吸取上述经验,焊接过程中加倍小心,不粗心大意,不再让焊接成为阻碍我们设计的步伐。
这次课程设计让我收获到了许多书本上没有学到的知识,比如protus绘图中的小技巧、protus置入单片机程序的注意事项、KeilμVsion4创建工程导出的注意事项、如何构建“.hex”文件等,设计的过程中我深入了解到了单片机应用的广泛性,开始认识到单片机对我们生活的重要意义,开始认识到单片机设计的多元化和多面化,从根本上激发了我对单片机继续学习的兴趣。
除此之外,这次课程设计还让我更进一步了解到了团队合作的力量,了解到了工程设计中团队的重要性。
我们小组之间的合作和分工让这次课程设计基本上顺利完成,小组之间的鼓励使面对困难时我们能迎难而上,小组之间的配合时许多难题迎刃而解,这是非一己之力可以完成的,是合作的真谛。
最后,谢谢老师们在本次课设中对我们小组的指导和帮助,正是由于你们两周来不耐其烦的讲解,解决我们课程设计过程中的各个难题,我们小组的课程设计才可以顺利进行,谢谢老师们的付出,你们是我们最坚实的后盾!
4、参考文献
[1]张毅刚.单片机原理及应用[M].高等教育出版社出版,2003.
[2]钟睿.MCS-51单片机原理及应用开发技术[M].北京:
中国铁道出版社,2006.
[3]蔡振江.单片机原理及应用[M].电子工业出版社,2011.
课程设计
评语
成绩
指导教师
(签字)
年月日