单片机课程设计文档格式.docx
- 文档编号:20626298
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:19
- 大小:527.27KB
单片机课程设计文档格式.docx
《单片机课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
能力
得分
课程设计成绩评定
成绩:
分(五级制)
指导教师签字年月日
目录
一、设计目的……………………………………….……………….............…..4
二、设计要求………………………………………….……………….……..…..5
三、总体设计……………………………………….…………….…………...….6
3.1工作原理………………………………………………………….……6
3.2电路设计………………………………………………………….……6
四、各部分电路设计………………………………………………………….….8
4.1键盘模块电路设计…………………………………………………….8
4.2档位控制设计…………………………………………………....…….8
4.3显示部分…………………………………………………………...…..8
五、整体电路图…………………………………………….…………….11六、设计总结…………………………………………………………….….12参考文献………………………………………………………………………….20
一、设计目的
学习单片机已有半年时间,单单对书本知识了解还远远不够,应将书本的知识运用到实际生活中去,语言只是一个工具,更重要的是对硬件的工作原理要有深的理解,为此,进行一次课程设计很有必要。
我选择的题目是微波炉控制器的设计,微波炉在人们的生活中使用非常普遍。
微波炉内部的电子元件有不多,本人只设计其中的核心部分控制器,此部分将用户的输入转换成控制信号,经过一系列变换,然后输出信号控制微波炉启动加热,停止等操作,还输出给像数码管一样的用户可感知的电子器件。
这是一个实用性很强的设计,没有特别复杂的功能要求,而且应用到了状态机,计时器,译码器等基本电子器件,在模块设计以及模块组合的过程中将加深我对硬件工作原理理解和认识。
二、设计要求
设置开始键,功率设置键(可设置分位大、中、小三档,由LED显示),定时键(设置时间)及复位键。
三、总体设计
本文的主要工作是掌握单片机应用技术,显示技术,电子技术等相关知识,设计制作一个微波炉控制器电路,具有三档微波加热功能,分别表示微波加热为烹调、烘烤、解冻,试验中用LED模拟。
实现工作步骤:
复位待机——〉检测显示电路——〉设置输出功能和定时器初值——〉启动定时和工作开始——〉结束烹调、音响提示。
。
设定初值后,按开启键,一方面按选择的挡位启动相应的微波加热;
另一方面使计时电路以秒为单位作倒计时。
当计时到时间为0则断开微波加热器,并给出声音提示。
具体的问题有:
(1)如何进行时间设置(分、秒)和时钟倒计时功能;
(2)如何设计智能火力控制
(3)如何设计显示模块显示时间;
(4)如何设计按键设置;
(5)如何设计音响提示声音;
(6)如何设计微波炉开门停止工作。
3.1工作原理
微波炉工作分四个步骤分别为:
系统待机—用户设定—微波炉加热—加热完成响音提示。
具体流程如下图3.1。
任务
结束
系统开始工作
用户进行设置
系统待机状态
图3.1系统流程图
系统上电自检后,数码管显示九十九分,档位通过三个发光二极管显示(分别表示三种功率的工作状态)。
键盘分按键K0,K1,K2,K3,REST五个按键。
K0键为微波炉的复位键。
K1键为工作开始控制键,K2为加热时间设置键,K3为档位选择键(选择后相应的发光二极管会发亮)。
REST为复位键。
微波炉启动数码管开始倒计时,当倒计时到零分,零秒微波炉会自动关闭,此时会发出提示声音。
在火力档位方面,不同的档位在不同时间的火力不同,根据烹调,烘烤,解冻三个档位制定了不同档位时的
注:
高中低三个火力大小用三个发光二极管模拟。
3.2电路设计
系统以AT89S52单片机为核心,连接各外部电路完成人机交互等各功能的控制。
系统的总体框图如下图3.2。
单片机
内部定时器
电源电路
音响发生电路
键盘电路
档位显示电路
数码管显示电路
图3.2系统的总体框图
电路设计部分以单片机控制电路为核心由定时器电路,显示电路,键盘电路,门电路,电源电路,音响发声电路,火力输出电路,档位显示电路共同组成微波炉控制系统电路。
四、各部分电路设计
4.1键盘模块电路设计
四个按键分别表示复位键,工装状态控制键,时间设置键,档位调整键,用K1K2K3K4表示。
K1键连接管脚P2.2,K2键连接管脚P2.3,K3连接管脚P2.4,K4连接管脚P2.5.如图4.1
图4.1
4.2档位控制设计
采用三个发光二极管来表示所选择的的不同的档位,分别连接单片机的P3.2,P3.3,P3.4.如图4.2
图4.2
4.3显示部分
采用数码管显示动态驱动是将所有数码管的8个显示笔"
a,b,c,d,e,f,g,dp"
的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能节省大量的I/O端口,而且功耗更低。
如图4.3.1
图4.3.1
数码管各个接口如图4.3.2
图4.3.2
五、整体电路图
六、设计总结
在设计的过程中遇到了以下四方面的问题:
程序问题,软件排版问题,理论知识与实际之间的出入问题,电路板的焊接问题。
编程用的时c语言,c语言较为简单,汇编比较繁琐开始选择汇编语言最后不得已放弃,以后要加强汇编语言的应用。
对于protues软件第一次接触难免有些陌生,很多应用技巧不是很了解,比如连线较多的时候电路图会显得很繁琐,看着很乱,不便于与其他人进行交流,用buswire来代替端口之间的长距离连线可以解决这个问题,等等。
拿单片机来说at89s51有40个引脚,在硬件上并没有标注每一个管脚的具体信息,还有数码管的引脚也一样,实际接线的时候难免会有困难,好在互联网上都有这些信息,通过网上查资料解决了这部分的问题。
在焊板子的时候由于是第一次,难免有些生疏,对烙铁,锡的特性不了解在焊焊板子的时候出现了很多连锡现象,虽然焊的丑陋,排线不规整,但是还是焊出了板子。
以后随着实际操作的次数增多,我坚信会有进步的。
附录:
程序
voidCpu_Int()
{
EA=0;
TMOD=0x01;
//定时/计数器0工作于方式1
TH0=0xff;
TL0=256-110;
//50ms定时常数
EA=1;
//开总中断
ET0=1;
//允许定时/计数器0中断
TR0=1;
//启动定时/计数器0中断
}
/*********************************************************
变量初始化
**********************************************************/
voidRam_init(void)
{
Time_Data=99;
LED_LEAVE=1;
//默认为1档
Buzz_Flag1=0;
LED_LEAVE1=0;
LED_LEAVE2=0;
LED_LEAVE3=0;
main主函数
voidmain(void)
P1=0xff;
P3=0xff;
P0=0;
Cpu_Int();
Ram_init();
BUZZ=0;
while
(1)
{
if(T0_Flag)
{
T0_Flag=0;
Time_Fun();
}
}
时基函数走时函数
voidTime_Fun(void)
staticucharT2Ms_Cnt=0,T5Ms_Cnt=0,T10Ms_Cnt=0,T100Ms_Cnt=0;
staticucharT1s_Cnt=0,Tmin_Cnt=0;
staticucharBuzz_On_Cnt=0,Buzz1_On_Cnt=0;
T5Ms_Cnt++;
if(T5Ms_Cnt>
=5)
T5Ms_Cnt=0;
LedDisplay();
T10Ms_Cnt++;
if(T10Ms_Cnt>
=10)
T10Ms_Cnt=0;
KeyDataProcess();
if(Buzz_Flag)
Buzz_On_Cnt++;
if(Buzz_On_Cnt>
{
Buzz_Flag=0;
Buzz_On_Cnt=0;
}
T100Ms_Cnt++;
if(T100Ms_Cnt>
=100)
T100Ms_Cnt=0;
T1s_Cnt++;
if(T1s_Cnt>
=10)//1S
T1s_Cnt=0;
Tmin_Cnt++;
if(Tmin_Cnt>
=60)//1分钟预约时间递减
Tmin_Cnt=0;
if(Open_Flag&
&
Time_Data)
Time_Data--;
if(Open_Flag)
if(!
Time_Data)//蜂鸣器发出报警,一秒响一次,LED灯也一起闪烁一秒亮一次。
Buzz1_On_Cnt++;
if(Buzz1_On_Cnt>
=10)
{
Buzz1_On_Cnt=0;
Buzz_Flag=1;
}
switch(LED_LEAVE)
case0:
LED_LEAVE1=0;
LED_LEAVE2=0;
LED_LEAVE3=0;
break;
case1:
LED_LEAVE1=1;
case2:
LED_LEAVE2=1;
case3:
LED_LEAVE3=1;
125us定时中断服务函数
voidTime0(void)interrupt1//using0
staticuchartimecount;
TF0=0;
TH0=0xff;
//125us定时
TL0=256-110;
timecount++;
if(timecount>
=8)//1ms计时
timecount=0;
T0_Flag=1;
if(Buzz_Flag||Buzz_Flag1)//蜂鸣器驱动
BUZZ=~BUZZ;
else
BUZZ=0;
voidKeyDataProcess(void)//10mS处理一次
staticucharKey_Data=0,Old_Key_Data=0;
staticucharKey_Down_Cnt=0;
Key_Data=P2;
Key_Data|=_1100_0011b;
if(Key_Data==Old_Key_Data)
Key_Down_Cnt++;
if(Key_Down_Cnt>
Key_Down_Cnt=90;
if(Key_Down_Cnt==10)
switch(Old_Key_Data)
case_1111_1011b:
//复位按键
if(Open_Flag)
{
Buzz_Flag=1;
Time_Data=99;
Buzz_Flag1=0;
}
break;
case_1111_0111b:
//启动/暂停按键
Open_Flag=0;
else
Open_Flag=1;
case_1110_1111b:
//定时键
if(!
Open_Flag)
Time_Data++;
if(Time_Data>
Time_Data=0;
}
case_1101_1111b:
//功率设置键
LED_LEAVE++;
if(LED_LEAVE>
=4)
LED_LEAVE=1;
}
default:
Old_Key_Data=Key_Data;
Key_Down_Cnt=0;
#defineLED_GLOBAL
#include"
..\inc\config.h"
..\inc\comm.h"
unsignedcharcodeLEDData[]=
//_SGFE_DCBA
_1100_0000b,//0
_1111_1001b,//1
_1010_0100b,
_1011_0000b,
_1001_1001b,
_1001_0010b,
_1000_0010b,
_1111_1000b,
_1000_0000b,
_1001_0000b,//9
_1011_1111b//10-
};
//****************显示扫描处理**********************/
voidLedDisplay(void)
staticucharDisp_ID=0;
uchartmp;
com00=0;
com01=0;
Disp_ID++;
if(Disp_ID>
=2)
Disp_ID=0;
if(!
Disp_ID)//数码管个位显示
com01=1;
tmp=Time_Data;
P1=LEDData[tmp%10];
elseif(Disp_ID==1)//数码管十位显示
com00=1;
P1=LEDData[tmp/10];
参考文献:
【1】张毅刚彭喜元彭宇单片机原理及应用(第二版)高等教育出版社,2010
【2】童诗白华成英模拟电子技术基础(第四版)高等教育出版社,2006
【3】宋戈黄鹤松员玉良将海峰51单片机应用开发范例大全(第二版)人民邮电出版社,2012
【4】张齐杜群贵单片机应用系统设计技术—基于C语言编程电子工业出版社,2004
【5】阉石数字电子技术基础高等教育出版社,1998
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)