单片机课程设计.docx

上传人:b****2 文档编号:598386 上传时间:2023-04-29 格式:DOCX 页数:30 大小:2.25MB
下载 相关 举报
单片机课程设计.docx_第1页
第1页 / 共30页
单片机课程设计.docx_第2页
第2页 / 共30页
单片机课程设计.docx_第3页
第3页 / 共30页
单片机课程设计.docx_第4页
第4页 / 共30页
单片机课程设计.docx_第5页
第5页 / 共30页
单片机课程设计.docx_第6页
第6页 / 共30页
单片机课程设计.docx_第7页
第7页 / 共30页
单片机课程设计.docx_第8页
第8页 / 共30页
单片机课程设计.docx_第9页
第9页 / 共30页
单片机课程设计.docx_第10页
第10页 / 共30页
单片机课程设计.docx_第11页
第11页 / 共30页
单片机课程设计.docx_第12页
第12页 / 共30页
单片机课程设计.docx_第13页
第13页 / 共30页
单片机课程设计.docx_第14页
第14页 / 共30页
单片机课程设计.docx_第15页
第15页 / 共30页
单片机课程设计.docx_第16页
第16页 / 共30页
单片机课程设计.docx_第17页
第17页 / 共30页
单片机课程设计.docx_第18页
第18页 / 共30页
单片机课程设计.docx_第19页
第19页 / 共30页
单片机课程设计.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计.docx

《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(30页珍藏版)》请在冰点文库上搜索。

单片机课程设计.docx

单片机课程设计

 

《单片机原理及应用》

课程设计说明书

 

设计题目:

烤烟房环境参数采集与显示仪设计

学院:

工学院

专业:

电气工程及其自动化

设计者:

学号:

指导老师:

设计时间:

2016年12月5日~2016年12月25日

《单片机原理及应用》课程设计任务书

一、目的意义

《单片机原理及应用》是高校工程专业的一门专业基础课,该门课程具有很强的实践性。

通过课程的学习,使学生掌握基本概念、基本理论和基本技能,为今后从事相应的生产设计和科研工作打下一定的基础。

因此,除课程的理论教学和实验教学外,课程设计也是一个必要和重要的实践教学环节。

通过课程设计,进一步培养学生理论联系实际的能力,学会正确地分析工程实际问题,善于查阅参考文献,准确地选择相应的数据、参数,具备全面地解决实际问题的素质,同时课程设计也为今后的毕业设计打下基础。

二、设计时间、地点、班级

时间:

第16、17周(二周)

地点:

三教433、426

班级:

14电气工程及其自动化第二组

三、设计内容

烤烟房环境参数采集与显示仪设计

1、功能描述

烟草行业在世界各国的经济中都占有非常重要的地位,提高烟叶质量的主要途径是烤烟的科学化,即在烤烟过程中控制烤烟房的温度。

(1)采用单片机作控制器,模拟量输出的温度传感器、A/D转换器、键盘及显示电路等一起构成1路温度采集与显示仪。

(2)由键盘输入设定值,采用LCD,显示整数值,开机或复位后,在最右端显示“PH”,以提示系统正常,正常运行时,不断采集温度并送显示;

(3)可以通过串口将采集的温度实时数据送PC机显示;(单片机也可选用STC12C5A系列)

(4)设计加热电路。

2、设计要求:

(1)、分析系统功能,选择单片机、传感器和功能模块;

(2)、设计系统的硬件电路图;

(3)、编写相应的软件,完成控制系统的控制要求;

(4)、上机调试、完善程序;

3、软件设计要求:

可以用按键设置温度目标值,扫描按键采用查询方式,200ms启动一次AD转换,用定时器1,且AD转换结果在AD中断服务程序中读出,同时结果通过串口0发送到PC机。

 

烤烟房环境参数采集与显示仪设计

作者:

指导老师:

(安徽农业大学工学院电气工程及其自动化)

摘要:

该设计是基于STC90C516RD+单片机微处理器系统,采用LCD1602显示屏采集并显示烤烟房环境温度,能够用按键预设最低温度值,具备对烤烟房进行加热的功能,同时还可以将采集的温度数据上传PC机并记录保存相关数据。

能实现控制烤烟房温度的功能。

具有系统简单可靠,具有控制精准,成本低的特点。

1总体设计方案

1.1设计原理及相关说明

该系统设计是利用PCF8591AD模块采集温度传感器的信号输出电压,再根据电压与温度之间关系式,将温度传感器采集的温度显示在LCD上,并能够利用按键设定最低温度,当实时温度小于最低温度时,能够启动继电器工作,从而启动加热设备。

1.2总体设计框图

烤烟房环境参数采集与显示仪系统设计框图如图1所示:

 

图1总体设计框图

2各芯片的设计及其调用

2.1STC90C516RD+单片机主控模块

STC90C516RD+系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强干扰的新一代8051系列单片机,指令代码完全兼容传统的8051,但速度快8-12倍。

12时钟周期/机器周期和6时钟周期/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位管脚可以直接接地。

该型号单片机具有以下特点:

1、增强型6时钟/机器周期,12时钟/机器周期8051CPU。

2、工作电压:

3.8V-5.5V(5V单片机)/2.4V-3.8V(3V单片机)。

3、工作频率范围:

0-40MHz,相当于普通的8051的0-80MHz。

4、用户应用程序空间4K/6K/7K/8K/10K/12K/13K/16K/32K/40K/48K/56K/61K字节。

5、片上集成1280字节/512/256字节RAM。

6、通用I/O口(35/39个),复位后为:

P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O口)。

P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

7、ISP(在系统可编程)/IAP(在应用可编程),无需专用可编程/仿真器,可通过串口(P3.0/P3.1)直接下载用户程序。

8、EEPROM功能。

9、看门狗。

10、内部集成MAX810专用复位电路,外部晶振12M以下,可省外部复位电路,复位引脚可以直接接地。

11、共3个16位定时器/计数器,其中定时器0还可以当成两个8位定时器使用。

12、外部中断4路,下降沿中断或者低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒。

13、通用异步串行口(UART),还可以用定时器软件实现多个UART。

14、工作温度范围:

0-75℃/-40-+85℃。

该系统设计使用的单片机封装为DIP-40封装,引脚图如下:

 

图2:

微处理器管脚分布图

该系统用的晶振电路与传统的8051一样,都是用石英晶体起震,晶振频率为11.0592MHz,晶振的选择不同可能在程序编写的时候会有所不同,其主要就是定时器和串口波特率选择不同,在编写程序和利用串口察看数据的时候应当注意。

晶振电路和复位如图3所示:

 

 

图3:

单片机晶振电路和复位电路

由图3可知,单片机的18和19管脚接时钟电路,19管脚接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,18管脚接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,9引脚是复位输入端,接上电容、电阻及开关后构成上电复位电路。

 

2.2AD/DA模块

 

图3AD/DA模块

本设计的AD转化电路采用市场上比较流行的AD/DA转化模块PCF8591,能够同时进行四路AD采集,可以很大程度拓展本设计功能。

该模块最大特点就是通过IIC总线串行输入输出。

2.2.1PCF8591的结构及工作原理

PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。

PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。

PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。

在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。

PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。

PCF8591的最大转化速率由IIC总线的最大速率决定。

2.2.2引脚功能及结构

其中引脚1、2、3、4是4路模拟输入,引脚5、6、7是I2C总线的硬件地址,8脚是数字地GND,9脚和10脚是I2C总线的SDA和SCL。

12脚是时钟选择引脚,如果接高电平表示用外部时钟输入,接低电平则用内部时钟,该设计系统电路用的是内部时钟,因此12脚直接接GND,同时11脚悬空。

13脚是模拟地AGND,14脚是基准源,15脚是DAC的模拟输出,16脚是供电电源VCC。

2.3LCD1602液晶显示模块

LCD1602是市场上常见的液晶显示模块,该模块控制简单,寿命长,得到大多数人的喜爱。

该设计系统的LCD1602接线图如图五

 

图五:

LCD1602液晶显示模块

2.3.1LCD1602的主技术参数

(1)显示容量:

16×2个字符 

(2)芯片工作电压:

4.5—5.5V 

(3)工作电流:

2.0mA(5.0V) 

(3)字符尺寸:

2.95×4.35(W×H)mm

2.3.2LCD1602的引脚功能说明

第1脚:

VSS为地电源。

第2脚:

VDD接5V正电源。

第3脚:

VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线,在该设计系统中接到单片机P0口。

第15脚:

背光源正极。

第16脚:

背光源负极。

2.4键盘电路

键盘接口电路如图6,本次设计中,按键有3个,每个按键各占用一根I/O线,各按键相互独立,彼此的工作状态互不影响,STC单片机自带上拉电阻因此无需外接上拉电阻,用查询法完成按键功能。

 

图6键盘电路

2.5加热电路

加热接口电路如图七所示,本设计中,利用继电器的启动与否来控制加热设备的工作与否。

 

 

图七加热电路

3系统软件设计

 

 

 

图八:

系统软件设计图

3.1系统正常工作提示

开机后,在LCD右下端显示“PH”字样来提示系统工作正常。

该字样在开机后会一直显示,若系统出现故障,则不能正常显示。

3.2按键设定程序

当开机后,LCD页面会显示“+00.00C”,该页面为按键设置最低温度页面,通过key_up按键来让显示温度的数字加一,通过key_down按键来让显示温度的数字减一,只能加减温度的个位,个位逢十进一。

在程序中直接扫描按键,消抖时间由于硬件问题设置为100MS。

当按下start按键就会停止设定,系统开始采集温度数据。

在LCD第一行显示实时采集的温度数据,在第二行,显示的是通过按键设定的温度值。

3.3LCD显示温度程序

AD转换模块获取的是AD值,后变成int型数据,在LCD显示函数中再将int型数据转化为float型数据来增加数据精确度,后面再通过电压与温度之间关系式,将采集得到的电压转化为温度,最后将数据变成十位,个位,十分位,百分位,一个一个来通过LCD显示。

3.4串口显示温度程序

可以通过串口实时显示LCD显示的温度数据,其中波特率设置为4800,无校验位。

串口发送通过系统上485接口与PC机进行连接,485串口传输距离长,速度快,适合工业上长距离的数据传输。

4调试

调试过程分为硬件和软件。

4.1硬件部分

实验的时候选用的是型号为STC90C516RD+的单片机,但是在烧录程序的时候选择的其他的,导致出现的现象完全没有达到预期,后来经过同学提醒,完成了这个步骤。

LCD接口问题,LCD的RS、RW、E控制端口需要特别注意,一定要和程序上的LCD控制端口定义要一致,否则不能正常工作。

察看LCD数据端是否与程序上定义相符,不同的定义LCD无法工作。

一定要检查PCF8591模块是否良好,可能在调试之前无法工作。

中间修改程序后再次下载,握手不成功,COM端口未连接,后来卸载重装了驱动,该问题解决。

4.2软件部分

让LCD能够显示PCF8591采集的电压值。

之前设置温度时都只按了key_up键,后来在使用key_down键时出现问题,通过key_down按键来让显示温度的数字减一,只能加减温度的个位,个位逢十进一,11往下减时直接跳到了9,到0再往下减不是到99而直接到了9,后来修改程序后使其能正常工作。

通过计算,找到电压与温度之间的线性关系式,让LCD显示出正常温度。

增加按键设置程序,让LCD能够显示温度设定页面,按键能够正常设定温度。

串口能够正常显示温度数据,增加加热程序。

单片机上采集的温度数字与试验台上测量出来的真实温度不一样,这是因为电压与温度之间的关系要经过程序修正后,才能正确对应,反复调试后,基本上能与试验台上的温度对应,有时候有一些小波动,这个程序中温度只精确到个位,以调试的结果来看,误差在1度以内。

5性能分析

将程序烧入单片机后,开机显示PH,表示系统正常工作,可以实现目标温度的设定,设定时可以任意进行加减操作,可以实现实际温度与目标温度的比较,达到设定温度时继电器动作。

该系统能够200MS扫描一次AD,并将AD采样的电压读取出来,通过一定的关系式转化为温度,通过LCD显示,并且可以通过串口察看温度数据。

单片机上的温度与试验台测量出来的温度误差在1度以内,最后可以将温度数据以文本模式发送到PC机。

 

附录1系统电路原理图

附录2实物调试图

1、当开机后,LCD页面会显示“+00.00C”,在右端显示“PH”,以提示系统正常

 

2、由键盘输入设定值,采用LCD,显示整数值

 

3、正常运行时,不断采集温度并送显示;以及试验台所测得温度

 

 

 

此时发现试验台和单片机所检测到的温度并不一致,原因在调试过程中叙述。

4、当采集温度高于设定温度,此时继电器动作

附录3元件清单

1、单片机开发板

2、K/E型复合热电偶

3、温度传感器实验模块

4、传感器试验台

附录4系统程序清单

#include"reg52.h"

#include"lcd.h"//包含LCD的H文件

#include"temp.h"//读取温度的H文件其中包含AD转换,直接输出温度值

#include

#defineuintunsignedint

#defineucharunsignedchar

//LED显示,后面用于功能拓展

sbitled0=P1^0;//灯亮时,处于温度设定状态

sbitled1=P1^1;//灯亮时,处于温度测量状态

sbitled2=P2^3;//开始加热

sbitrelay=P2^2;//继电器动作,同样用于功能拓展

sbitkey_up=P1^3;//用于温度增加的设定按键硬件电路中独立按键应该全部接GND。

K4

sbitkey_dowm=P1^4;//用于温度减少的设定按键K5

sbitstart=P1^5;//确定按键定义K6

ucharflagstart;//确定按键按下标志位

uchartempsetmin;//定义设定最小温度

uchartempnow;//定义现在温度,用于和最小温度比较

ucharCNCHAR[6]="摄氏度";

ucharxdatadatas[]={0,0,0,0};//定义数组

ucharxdatasetdata[]={0,0,0,0};

ucharstop;//用于紧急停止,外部中断0按键控制用于功能拓展

uchartime_count;//定时器计数AD扫描200MS一次

uchartimer_count;//按键扫描10ms一次

#definedelaytime2

voidLcdDisplay(int);

voidUsartConfiguration();

voiddelay(uchar);

voidkeyset();

voidinitial();

voidmain()

{

led2=0;//加热指示灯,先关闭

relay=1;//先关闭继电器,在实际中避免误动作产生危险实验室开发板继电器是低电平触发,则默认不触发

UsartConfiguration();//初始化串口

LcdInit();//初始化LCD1602

initial();//定时器和外部中断初始化

LcdWriteCom(0x87);//写地址80表示初始地址

LcdWriteData('C');

LcdWriteCom(0x40+0x88);//在LCD最右端显示PH字样,表示系统工作正常

LcdWriteData('P');

LcdWriteCom(0x40+0x89);

LcdWriteData('H');

while

(1)

{

LcdDisplay(ReadTemp());

}

}

voiddelay(ucharz)//简单延时函数

{

ucharx,y;

for(x=110;x>0;x--)

for(y=z;y>0;y--);

}

voidkeyset(void)//按键设定温度值//设定温度用的数组与实时显示温度的数组不一样,防止后面再次扫描按键的时候变化

{

key_up=1;

if(!

key_up)//如果温度加的按键按下

{

//delay(delaytime);//延时100MS用于消抖

//if(!

key_up)

{

setdata[1]++;//个位温度值加1

if(setdata[1]==10)//如果加到了10

{

setdata[1]=0;//个位显示0

setdata[0]++;//十位加一,个位任然显示0

if(setdata[0]==10)//如果十位到10

{

setdata[0]=0;//十位显示0;

}

}

}

}

while(!

key_up);//这种按键消抖不是借助延时消抖的,可以设置短时间扫描按键一次,但不能连续按,一次最多加一或者减一

if(!

key_dowm)//如果温度加的按键按下

{

//delay(delaytime);//延时10MS用于消抖

//if(!

key_dowm)//减法到0时,出现错误,需要逐级判断才行!

{

setdata[1]--;//个位温度值减1

if(setdata[1]==-1)//如果减到了0

{

setdata[1]=9;//个位显示9

setdata[0]--;//十位减一,个位任然显示0

if(setdata[0]==-1)//如果十位10

{

setdata[0]=9;//十位显示0;

}

}

}

}

while(!

key_dowm);

tempsetmin=setdata[0]*10.0+setdata[1];//设定温度

if(!

start)//如果启动测量按键按下

{

//delay(delaytime);//延时消抖

//if(!

start)

{

flagstart=1;//开始测量标志位

}

}

while(!

start);

}

voidLcdDisplay(inttemp)//lcd显示此处temp类型应该与ReaTemp返回值类型一致,否则可能会出错

{

unsignedchari;

floattp;//用于整型变量和浮点型变量转换

//keyset();//按键先扫描一次

if(!

flagstart)//还没有开始测量一开始LCD的显示,用于设定

{

led0=1;

led1=0;

LcdWriteCom(0x80);//写地址80表示初始地址

LcdWriteData('+');//显示正号

LcdWriteCom(0x87);//写地址80表示初始地址

LcdWriteData('C');

LcdWriteCom(0x81);//写地址80表示初始地址

LcdWriteData('0'+setdata[0]);//十位

LcdWriteCom(0x82);//写地址80表示初始地址

LcdWriteData('0'+setdata[1]);//个位

LcdWriteCom(0x83);//写地址80表示初始地址

LcdWriteData('.');//显示‘.’

LcdWriteCom(0x84);//写地址80表示初始地址

LcdWriteData('0'+setdata[2]);//显示十分位

LcdWriteCom(0x85);//写地址80表示初始地址

LcdWriteData('0'+setdata[3]);//显示百分位

}

if(flagstart)//启动测量

{

led0=0;

led1=1;

if(temp>0.0)//当温度值为负数

{

LcdWriteCom(0x80);//写地址80表示初始地址

SBUF='+';//将接收到的数据放入到发送寄存器

while(!

TI);//等待发送数据完成

TI=0;//清除发送完成标志位

LcdWriteData('+');//显示负

tp=temp;//将int型temp转化为float型tp

temp=tp*10.00;//将温度对应的电压放大10倍进行采集,可以提高灵敏度

temp=temp*1.85+7.0;//电压与温度关系

}

datas[0]=temp%10000/1000;//十位

datas[1]=temp%1000/100;//个位

datas[2]=temp%100/10;//十分位

datas[3]=temp%10;//百分位

tempnow=10.0*datas[0]+datas[1];//目前的温度

if(tempsetmin>tempnow)//当目前温度小于设定温度时,启动加热装置,让继电器动作,指示灯亮

{

relay=0;

led2=1;

}

if(tempsetmin<=tempnow)//加热完成后记得关闭继电器

{

relay=1;

led2=0;//指示灯灭

}

LcdWriteCom(0x80+0x40);//写地址80表示初始地址//在第二行显示设定温度

LcdWriteData('s');

LcdWriteCom(0x81+0x40);//写地址80表示初始地址

LcdWriteData('e');

LcdWriteCom(0x82+0x40);//写地址80表示初始地址

LcdWriteData('t');

LcdWriteCom(0x83+0x40);//写地址80表示初始地址

LcdWriteData('0'+(tempsetmin/10));//显示正号

LcdWriteCom(0x84+0x40);//写地址80表示初始地址

LcdWriteData('0'+(tem

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2