单片机综合课程设计(温度控制器)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
杭州电子科技大学信息工程学院
单片机课程设计报告
(电气工程与自动化专业)
姓名
班级:
学号:
指导教师:
2011年10月14日
一引言
单片机课程设计是一项综合性的专业实践的活动,基本任务是利用STC12C5A08S2单片机等电子元器件设计一个具有温度测量、显示和控制的装置。通过本课程综合应用所学知识,分析和解决工程实际问题的能力,将所学的基础理论和专业知识运用到具体的工程实践中去。培养学生的实际动手能力和工程实践能力,为此后的毕业设计打下良好的基础。
二硬件设计
1 数码管显示
图 1
此数码管为共阴极数码管,其8个发光二极管的阴极在数码管内部全部连接在一起,它们的阳极是独立的,通常在设计电路时一般把阴极接地。数码管的显示方法静态显示。当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那它们显示的数字必定一样。图1 中的三极管9013的起到开关“位选”的作用,当三极管导入高电平的时候,相对应的数码管发光。
2 2*2矩阵键盘
图2
矩阵键盘的两端都与单片机I/O口相连,因此检测时给单片机I/O口送入低电平。检测时,先送一列为低电平,其余几列全为高电平,然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平则我们便可确认当前被按下的键是哪一行那一列,用同样的方法轮流送各列一次低电平,轮流检测一次各行是否变为低电平,这样即可检测完所有的按键,当有键被按下时便可判断出按下的键是哪一个键。图2中二极管IN4148 检测是否有按键按下。
3 测温电路
图3
图3中的电容用来滤波的作用。R120滑动变阻器用来调节A/D采样值的变化。AT502热敏电阻。
4 蜂鸣器
试验采用无源蜂鸣器,通过输入震荡电流,是蜂鸣器达到蜂鸣的效果,在本次使用的期间中,对P14管脚加入震荡电流,便可以达到试验效果
5.整个原理图
三软件部分
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit shuma2=P2^6;
sbit shuma1=P2^7;
sbit shuma3=P2^5;
sbit shuma4=P2^4;
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit beep=P1^4;
sbit dat=P1^1;
sbit warm=P1^3;
sbit led=P2^0;
uint wendu=25,numt0=0,cede=0,bzflag=0,flag=1;
/*--定义数码管显示的0~9,10个数据--*/ unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
/*--单片机初始化函数,对定时器进行设置,开总中断,开定时器中断,开定时器--*/
/*--入口参数:无
----出口参数:无--*/
void init()
{
TMOD=0x01;
TH0=(65536-2500)/256;
TL0=(65536-2500)%256;
EA=1;
ET0=1;
TR0=1;
}
/*--延时函数,通过for循环函数实现延时功能--*/
/*--入口参数:uint;
----出口参数:无---*/
void delayms(uint xms)
{
uint i,j;
for(i=0;i for(j=0;j<110;j++); } /*--显示函数,利用2个全局变量对他们求余和求商,用于表示检测的温度的十位和个位,及设定温度的十位和个位 ----入口参数:无 ----出口参数:无---*/ void display() { uchar shi=wendu/10; uchar ge=wendu%10; uchar cge=cede%10; uchar csh=cede/10; P2=0x10; P0=table[ge]; delayms(2); P2=0x20; P0=table[shi]; delayms(2); P2=0x40; P0=table[cge]; delayms(2); P2=0x80; P0=table[csh]; delayms(2); P2=0x00; } /*--键盘检测函数,对2*2矩阵键盘进行设定,分别为温控开关及设定温度加减----入口参数:无 ----出口参数:无--*/ void keyscan() { uchar temp; P3=0x70; if(P3==0x60) { delayms(10); if(P3==0x60) { if(wendu!=0) wendu--; } temp=P3&0x30; while(temp!=0x30) temp=P3&0x30; } if(P3==0x50) { delayms(10); if(P3==0x50) { if(wendu!=99) wendu++; } temp=P3&0x30; while(temp!=0x30) temp=P3&0x30; } P3=0xb0;