单片机课程设计报告.docx
- 文档编号:23860421
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:13
- 大小:110.84KB
单片机课程设计报告.docx
《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告
课程设计报告
课程名称:
微控制器原理课程设计
院(系):
电子与信息工程学院
专业:
电子信息科学与技术
班级:
电技14-2班
姓名:
徐临晖
成绩:
一、设计要求
基于51单片机实现一控制系统,该系统具有以下功能
1、能将A/D采集的数据通过数码管显示出来
2、根据采样值与设定的阈值比较产生报警提示
3、通过开关,使系统具有解警功能
4、系统具有加热功能,达到设定阈值停止加热
实现方式可以是1)实物制作;2)基于开发板制作;3)protues软件仿真。
二、设计方案
加热模块
1.总体方案
↑
AT89C51
主
控
制
器
显示电路
DS18B20
<-------->-------->
报警电路
<--------
1.1测温模块
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。
DS18B20的特点:
(1)、只要求一个I/O口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55。
C到+125。
C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
1.2显示模块
LED显示模块是由一个四联共阳七段数码管组成。
七段数码管是由若干发光二极管组合而成的,一般的“8”字形显示块由“a、b、c、d、e、f、g、h”8个发光二极管组成。
四个七段数码管分别与P2口相连,通过对单片机输入程序达到控制显示输出的目的(如图)。
四个七段数码管由单片机的P3.0~P3.3控制亮灭,P3.0~P3.3分别对应1~4,当P3.0~P3.3其中之一置高电平,对应的三级管导通,段码管亮,置低电平,对应的三级管截止,段码管灭。
1.3报警模块
本设计采用蜂鸣器报警电路,它由晶体管和蜂鸣器组成。
由单片机I/O口输出信号控制晶体管的导通或截止,晶体管导通,则蜂鸣器报警。
通过单片机来控制蜂鸣器产生报警声音。
温度超过设定的阈值,LED灯亮,蜂鸣器报警,可通过开关手动关闭报警。
1.4加热模块
利用DS18B20控制与加热装置连接的I/O口的高地电平,以此来控制加热器何时加热
此后显示器将一直显示实测温度。
若实测温度高于设定温度时,则通过控制器电关上加热器并报警;若实测温度低于设定温度,则通过控制器打开加热器。
2.硬件电路设计
3.软件设计
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitds=P1^0;//DS18B20
sbitbeep=P1^1;//蜂鸣器
sbitled1=P1^2;//警报灯
sbithot1=P0^0;//加热器
sbithot2=P0^1;
sbitwx1=P3^0;//位选1
sbitwx2=P3^1;//位选2
sbitwx3=P3^2;//位选3
sbitwx4=P3^3;//位选4
uinttp;//温度值
floattpcy;//浮点型
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};//共阳数码管
//****延时函数
voiddelay(unsignedinti)
{
unsignedcharj;
for(i;i>0;i--)
for(j=255;j>0;j--);
}
//****复位初始化
voiddsreset()
{
uintx;
ds=0;
x=103;
while(x>0)x--;
ds=1;
x=4;
while(x>0)x--;
}
//****读取一位
bitreadbit()
{
bitdat;
uinti;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;while(i>0)i--;
return(dat);
}
//***读取一字节
uchartpread()
{
uchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=readbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
//***写入
voidtpwrite(uchardat)
{
uinti;
ucharj;
bittestb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
ds=0;i++;i++;
ds=1;
i=8;while(i>0)i--;
}
else
{
ds=0;
i=8;while(i>0)i--;
ds=1;i++;i++;
}
}
}
//温度转换
voidtpchange()
{
dsreset();
delay
(1);
tpwrite(0xcc);
tpwrite(0x44);
}
//温度获取
uinttpget()
{
uchara,b;
dsreset();
delay
(1);
tpwrite(0xcc);
tpwrite(0xbe);
a=tpread();
b=tpread();
tp=b;
tp<<=8;
tp=tp|a;
tpcy=tp*0.0625;
tp=tpcy*10+0.5;
tpcy=tpcy+0.005;
returntp;
}
//条件
voidtiaojian()
{if(tp<=980)
{led1=1;
beep=0;
hot1=1;
hot2=0;
}
else
{led1=0;
beep=1;
hot1=1;
hot2=1;
}
}
//******显示函数********
voidxianshi()
{
wx1=1;
P2=table[tp/1000];//显示百位
delay(5);
wx1=0;
wx2=1;
P2=table[tp/100%10];//显示十位
delay(5);
wx2=0;
wx3=1;
P2=table[tp%100/10];//显示个位
delay(5);
wx3=0;
wx4=1;
P2=table[12];//显示C字符代表℃
delay(5);
wx4=0;
}
//****主函数
voidmain()
{
while
(1)
{
tpchange();
tpget();
tiaojian();
xianshi();
}
}
4.测试
设定该系统低于98℃,系统开始加热,
系统超过98℃,开始报警,红灯亮起,停止加热,按下开关,关闭警报。
二、设计总结
此次课程设计中,难点在于DS18B20的使用,即对它的时序控制、初始化以及字节的读写方法,任何一个环节出错或是时序控制不到位的话就不能得到正确的数据。
还有掌握AT89C51单片机原理和应用以及对C语言的开发技巧,特别是对数据的处理。
因为DS18B20芯片是16位寄存,而单片机是8位寄存,所以数据要分开高八位和低八位寄存处理。
一开始,自己把程序写完了,仿真时却出错,后来重新修改才解决问题。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所有的理论知识用到实际当中,学习单片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
并且做每一件事都要认真严谨去完成,否则,一个小小的问题都会让你付出更多的时间和代价。
总的来说,自己从这次独立的课程设计中收获了一些知识与经验,一些从书本中学之不来的东西。
四、参考文献
[1]郭天祥.51单片机C语言教程北京:
电子工业出版社,2008
[2]谭浩强.C程序设计北京:
清华大学出版社,1991
[3]张毅刚.新编MCS-51单片机应用设计.哈尔滨:
哈尔滨工业大学出版社,2003
[4]DS18B20开发手册
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告