单片机系统设计与制作技术报告模板.docx
- 文档编号:11800640
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:26
- 大小:261.16KB
单片机系统设计与制作技术报告模板.docx
《单片机系统设计与制作技术报告模板.docx》由会员分享,可在线阅读,更多相关《单片机系统设计与制作技术报告模板.docx(26页珍藏版)》请在冰点文库上搜索。
单片机系统设计与制作技术报告模板
(此文档为word格式,下载后您可任意编辑修改!
)
中国矿业大学徐海学院
单片机系统设计与制作技术报告
班级:
电气09-5
题目:
温度计与流水灯
任课教师:
胡明老师
2011年9月
单片机设计与制作任务书
任务下达日期:
年月日
设计日期:
年月日至年月日
设计题目:
设计主要内容和完成功能:
教师签字:
摘要
本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用
的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。
本
设计以数字集成电路技术为基础,单片机技术为核心。
本文编写的主导思想是软硬件相结合,以硬件为
基础,来进行各功能模块的编写。
关键词:
AT89S52DS18B20LCD1602蜂鸣器
目录
1、系统概述5
2、硬件设计7
2.1单片机主控模块7
2.2液晶显示模块9
2.3温度传感器模块9
2.4报警模块10
3、软件设计10
3.1主程序10
3.2LCD1602的驱动11
3.3DS18B20的驱动13
3.4蜂鸣器驱动14
4、系统调试14
5、结束语15
6.参考文献15
7、附录15
包括系统硬件电路图、源程序(加注释)、实物作品调试和演示照片
1、系统概述
数字温度计功能要求是用51单片机(AT89S52)和温度传感器(DS18B20)通过程序控制来实现在液
晶屏LCD1602上显示当前温度值、报警温度值,并可以通过蜂鸣器模块在过温时报警。
设计思路是根据普通温度计的功能,在单纯测量温度的基础上增加蜂鸣器模块实现温度报警功能,并可以设定报警温度值。
系统以AT89S52单片机作为核心控制器件,外围主要有液晶显示LCD1602、DS18B20和蜂鸣器,均为
串行通信器件,使得系统线路简单可靠性高。
Proteus仿真图
2、硬件设计
2.1单片机主控模块
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使
用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允
许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程
Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
它主要负责各个模块
的初始化工作;设置定时器、寄存器的初值;读取并处理来自温度传感器的信号;处理按键响应;控制
液晶实时显示等。
图2.AT89S52管脚排布
AT89S52的管脚排布如图2所示:
VCC:
电源
GND:
地
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(I
IL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
在这种应用中,P2口使用很强的内
部上拉发送1。
在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。
对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(I
IL)。
P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。
在flash编程和校验时,P3口也接收一些控制信号。
RST:
复位输入。
ALE/PROG:
地址锁存控制信号。
PSEN:
外部程序存储器选通信号。
EA/VPP:
访问外部程序存储器控制信号。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
在本设计中所用到的引脚有VCC,GND,RST,EA/VPP,XTAL1,XTAL2,P0口,P2口,P3口。
硬件电路连接如图3所示。
系统采用12M晶振;P0口为单片机与液晶显示器通信的数据端口,其中P0口有8个1K的上拉电阻;AT89S52单片机的复位靠外部电路来实现,信号由RESET(RST)引脚输入,高电平有效,在振荡器工作时,只要保持RESET(RST)引脚高电平两个机器周期,单片机即可以复位,
系统既有上电复位电路又可以手动复位S4;P2.0~P2.2为液晶显示器的控制信号端口:
P3.7为蜂鸣器的控制端口;P1.4~P1.5为按键模块的接口;P3.3为温度传感器通信端口。
2.2液晶显示模块
系统中采用LCD1602作为显示器件输出信息。
与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。
LCD1602可以显示2行16个字符,具有8位数据总线D0-D7,和RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节和背光设置。
管脚功能简介:
VL:
LCD对比度调节端,电压调节范围为0-5V。
接正电源时对比度最弱,接地电源时对比度最高,可以用一个5K的电位器来调整对比度;
RS:
数据或者指令选择端。
处理器写入指令时,RS为低电平,写入数据时,RS为高电平
R/W:
读写控制端。
R/W为高电平时,读取数据;R/W为低电平时,写入数据
E:
LCD模块使能信号控制端。
写数据时,需要下降沿触发模块
D0-D7:
8位数据总线,三态双向
BL+:
LED背光正极。
需要背光时,BLA串接一个限流电阻接VCC
BL-:
LED背光负极
LCD1602的管脚功能排布如图2.2.1所示
2.3温度传感器模块
系统采用DS18B20作为温度信息采集模块。
DS18B20支持“一线总线”
,温度测量范围为-55℃~+125℃,在-10℃~+85℃精度为±5℃。
现场温度直接以“一线总线”的数字方式进行传输,大大提高系统的可靠性,温度数字量转换时间为200ms(典型值)
DS18B20的管脚功能排布如图2.3.1所示:
。
2.4报警模块
系统采用蜂鸣器作为报警的输出,蜂鸣器的电路连接图如图2.4.1所示:
电路中采用PNP管8550来做为信号功率放大来驱动喇叭闹铃,由图可以看出PNP管8550的集电极接电源正5伏。
过温时从AT89S52的P3.7脚输出低频的方波信号使蜂鸣器报警。
3、软件设计
根据设计任务的要求确定系统程序的完整结构,尽可能采用模块化程序设计方法,将任务划分为相对独立的功能模块,明确各模块的功能、时间顺序和相互关系,系统的软件设计可以分为几个部分,首先是各个模块的底层驱动程序编写,而后是系统联机调试,编写上层系统程序。
本系统软件程序主要包括:
液晶LCD1602的底层驱动模块、DS18B20的低层驱动模块、定时器0定时温度检测模块、蜂鸣器报警模块等。
3.1主程序
voidmain()
{
ucharnum;
init();
delay(2000);
delay(2000);
delay(2000);
write_com(0x01);//清除LCD的显示内容
while
(1)
{
P0=0xaa;
write_com(0x80);
P0=0x55;
for(num=0;num<15;num++)
{
write_data(table2[num]);
delay(5);
}
P0=0xcc;
wendu=ReadTemp();
P0=0x33;
write_wendu(2,wendu);
P0=0x0f;
P0=0xf0;
Dela(50);
P0=0x00;
Dela(25);
P0=0xff;
Dela(25);
P0=0x00;
Dela(25);
P0=0xff;
Dela(25);
}
}
3.2LCD1602的驱动
液晶显示分两个子程序,一个是初始化时候使用,如图3.2.1.所示。
另一个接受来自温度采集子程序
的数据,送入液晶显示LCD1602显示。
以下是LCD1602的程序:
//lcd的写指令
voidwrite_com(ucharcom)
{
lcdrs=0;
lcden=0;
P1=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//lcd的写数据
voidwrite_data(ucharda)
{lcdrs=1;
lcden=0;
P1=da;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//初始化
voidinit()
{
ucharnum;
lcdwrite=0;
lcden=0;
write_com(0x38);//16*2显示,5*7点阵,8位数据
write_com(0x0c);//显示开,关光标
write_com(0x06);//移动光标
write_com(0x01);//清除LCD的显示内容
write_com(0x80);
for(num=0;num<10;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<11;num++)
{
write_data(table1[num]);
delay(5);
}
}
voidwrite_wendu(ucharadd,charda)
{
ucharshi,ge;
shi=da/10;
ge=da%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);
}
voidDela(uintdel)
{
uinti,j;
for(i=0;i for(j=0;j<1827;j++) ; } 3.3DS18B20的驱动 温度采集子程序程序框图如图3.2.1所示。 程序在定时器2中断产生时候响应,进入采集。 首先检测 DS18B20是否正常,不正常进行温度报警,激活报警程序。 发送转换信号,等待转换完成,读DS18B20 寄存器。 把接受的数据转换为10进制。 返回一个表示温度的整形数据。 以下是温度采集子程序的底层驱 动源程序: /**************读取ds18b20当前温度************/ ReadTemp(void) {floatval; uchartemp_value,value; unsignedchara=0; unsignedcharb=0; unsignedchart=0; Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 delay_18B20(100);//thismessageisweryimportant Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度 delay_18B20(100); a=ReadOneChar();//读取温度值低位 b=ReadOneChar();//读取温度值高位 temp_value=b<<4; temp_value+=(a&0xf0)>>4; value=a&0x0f; val=temp_value+value; return(val); } 3.4蜂鸣器驱动 voidbeep() //蜂鸣器子程序 { unsignedchari; for(i=0;i<180;i++) { Delay(80); BEEP=! BEEP;//BEEP取反 } BEEP=1;//关闭蜂鸣器 delayms(100); } 4、系统调试 这套系统里运用的是按钮复位,单片机在刚通电的时候可能会没用发现,这次只需按下单片机左边的方形按钮便可。 在温度计去流水灯的作品板上LCD1602需要调节它的VEE端。 通过一个10K的电阻进行调节,将“鬼影”去掉。 调节后的的效果如下: 5、结束语 本次用单片机设计的数字温度计已经完成。 同其他温度采集系统相比,这次的设计还有可以改进的地 方。 主要有如下几点: 1.可以组建温度测量网络,实时显示各网点的温度。 2.DS18B20最高精度可达±0.0625℃(12位)。 3.使用片内具有eeprom的单片机,即可实现可记录温度数据和可在线设定报警温度的温度计。 6.参考文献 [1]龚运新.《单片机C语言开发技术》[M].清华大学出版社,2006 [2]张迎新.《单片机原理及应用》[M].电子工业出版社,2004 7、附录 8、 程序代码: /***********ds18b20子程序*************************/ /***********ds18b20延迟子函数(晶振12MHz)*******/ #include sbitDQ=P3^3; #defineucharunsignedchar #include"18b20.h" #defineuintunsignedint ucharcodetable[]="WelcomeTo";//初始化日期和星期 ucharcodetable1[]="OurSystem! ";//初始化时间 ucharcodetable2[]="Temperatureis: ";//初始化时间 voiddelay_18B20(unsignedinti) { while(i--); } /**********ds18b20初始化函数**********************/ voidInit_DS18B20(void) { unsignedcharx=0; DQ=1;//DQ复位 delay_18B20(8);//稍做延时 DQ=0;//单片机将DQ拉低 delay_18B20(80);//精确延时大于480us DQ=1;//拉高总线 delay_18B20(4); x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败 delay_18B20(20); } /***********ds18b20读一个字节**************/ unsignedcharReadOneChar(void) { uchari=0; uchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); } return(dat); } /*************ds18b20写一个字节****************/ voidWriteOneChar(uchardat) { unsignedchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay_18B20(5); DQ=1; dat>>=1; } } /**************读取ds18b20当前温度************/ ReadTemp(void) {floatval; uchartemp_value,value; unsignedchara=0; unsignedcharb=0; unsignedchart=0; Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 delay_18B20(100);//thismessageisweryimportant Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度 delay_18B20(100); a=ReadOneChar();//读取温度值低位 b=ReadOneChar();//读取温度值高位 temp_value=b<<4; temp_value+=(a&0xf0)>>4; value=a&0x0f; val=temp_value+value-6; return(val); } //以上是DS18B20的驱动程序。 然后在主程序中直接调用函数就可以了。 //以上是在主程序中的调用,你看关于温度的那个就可以。 //以下三个是定义LCD的引脚 sbitlcden=P2^2; sbitlcdwrite=P2^1; sbitlcdrs=P2^0; charwendu; //延时程序 voiddelay(uintz) {uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //lcd的写指令 voidwrite_com(ucharcom) { lcdrs=0; lcden=0; P1=com; delay(5); lcden=1; delay(5); lcden=0; } //lcd的写数据 voidwrite_data(ucharda) {lcdrs=1; lcden=0; P1=da; delay(5); lcden=1; delay(5); lcden=0; } //初始化 voidinit() { ucharnum; lcdwrite=0; lcden=0; write_com(0x38);//16*2显示,5*7点阵,8位数据 write_com(0x0c);//显示开,关光标 write_com(0x06);//移动光标 write_com(0x01);//清除LCD的显示内容 write_com(0x80); for(num=0;num<10;num++) { write_data(table[num]); delay(5); } write_com(0x80+0x40); for(num=0;num<11;num++) { write_data(table1[num]); delay(5); } } voidwrite_wendu(ucharadd,charda) { ucharshi,ge; shi=da/10; ge=da%10; write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); } voidDela(uintdel) { uinti,j; for(i=0;i for(j=0;j<1827;j++) ; } //主函数 voidmain() { ucharnum; init(); delay(2000); delay(2000); delay(2000); write_com(0x01);//清除LCD的显示内容 while (1) { P0=0xaa; write_com(0x80); P0=0x55; for(num=0;num<15;num++) { write_data(table2[num]); delay(5); } P0=0xcc; wendu=ReadTemp(); ifReadTemp>=30 P3^7=1; P0=0x33; write_wendu(2,wendu); P0=0x0f; P0=0xf0; Dela(50); P0=0x00;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 系统 设计 制作 技术 报告 模板
![提示](https://static.bingdoc.com/images/bang_tan.gif)