51单片机课程设计数字温度计报告
更新时间:2023-10-01 12:20:01 阅读量: 综合文库 文档下载
基于单片机的数字温度计系统课程设计
电子设计培训设计报告
题目: 数字温度计
学院: 班级: 学号: 姓名: 指导老师: 日期:
1
基于单片机的数字温度计系统课程设计
数字温度计设计任务书
一、 课程设计目的
1、 加强学生理论联系实际的能力,提高学生的动手能力; 2、 学会基本电子元器件的识别和检测;
3、 学会应用EDA软件Proteus进行电路的设计和仿真; 4、 基本掌握单片机的基本原理,并能将其应用于系统的设计。
5、 通过实训,提高学生的学习兴趣,激发自主学习能力,培养创新意识。 二、 设计任务
先焊制一个单片机最小系统,并以制作的单片机最小系统为核心,设计并制作一个数字式温度计应用系统。 三、 设计要求具有以下功能:
(1) 采用DS18B20作为温度传感器进行温度检测; (2) 对采集温度进行显示(显示温度分辨率0.1℃);
(3) 采集温度数值应采用数字滤波措施,保证显示数据稳定; (4) 显示数据,无数据位必须消隐。
2
基于单片机的数字温度计系统课程设计
目录
数字温度计设计任务书 ……………………………………………… 2 1、 设计思路
(1) 设计原理 ………………………………………………………………… 4 (2) 系统方案及总体设计框图 ……………………………………………… 4
2、 数字温度计应用系统的硬件设计
(1) 单片机小系统基本组成及硬件图 (2) 外围电路工作原理及系统硬件图 (3) 主要芯片及其功能 3、 系统软件程序的设计
软件流程框图
4、 系统调试
(1) 仿真器介绍 (2) 调试结果及其分析
(3) 系统设计电路的特点和方案的优缺点
5、 课程设计心得体会
参考文献
附录 程序清单及注释
3
基于单片机的数字温度计系统课程设计
一、 设计思路:
设计方案及其总体设计框图
单片机芯片 1602显示器
晶振控制
温度计设计系统流程图
开始 进入缓冲区初始化 复位 DS18B20发跳过ROM命令 温度转换命令 延时 复位 DS18B20,跳过ROM命令 读存储器命令 读温度命令 将温度转换为BCD码 更新数据缓冲区 AT89S52 温度检测电路 DS18B20 系统设计原理:
本次课程设计是基于单片机的数字温度计设计,在开始课程设计的时候我们要理解并掌握对单片机的开发,学会使用KEIL及Proteus等仿真软件。根据设计任务要求选择好器件,编写好程序运行成功之后进行软件联调,验证系统是否正确。通过筛选,我们组选用单片机AT89S52作为主控制系统;用1602液晶显示模块芯片作为温度数据显示装置;智能温度传感器采用DS18B20器件作为测温电路主要组成部分。
4
基于单片机的数字温度计系统课程设计
二、数字温度计应用系统的硬件设计
1、单片机小系统的基本组成及其选择 (1)单片机 单片机选型参考 ? ? ?
① AT89S51、AT89S52 :具备ISP下载功能 ,可以使用USBASP程序下载线或者并口下载
② STC89C51、STC89C52:使用串口线+MAX232烧写程序。
③AT89C51、AT89C52 :可以在最小系统板上使用,但需要另外用编程器烧写程序
本次课程设计选用AT89S52型号单片机进行操作。
AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system
programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个 全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 AT89S52引脚图
此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断 系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三 种封装形式,以适应不同产品的需求。 (4) 电源 ? ?
①电源适配器供电:DC座(三个管脚) ②usb供电:
5
基于单片机的数字温度计系统课程设计
//初始化DS18B20
//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动 void dsInit() {
//对于11.0592MHz时钟, unsigned int型的i, 作一个i++操作的时间大于为8us unsigned int i; ds = 0;
i = 100; //拉低约800us, 符合协议要求的480us以上 while(i>0) i--;
ds = 1; //产生一个上升沿, 进入等待应答状态 i = 4; while(i>0) i--; }
void dsWait() {
unsigned int i; while(ds);
while(~ds); //检测到应答脉冲 i = 4; while(i > 0) i--; }
//向DS18B20读取一位数据
//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平, //之后DS18B20则会输出持续一段时间的一位数据 bit readBit() {
unsigned int i; bit b; ds = 0;
i++; //延时约8us, 符合协议要求至少保持1us ds = 1;
i++; i++; //延时约16us, 符合协议要求的至少延时15us以上 b = ds; i = 8;
while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求 return b;
16
基于单片机的数字温度计系统课程设计
}
//读取一字节数据, 通过调用readBit()来实现 unsigned char readByte() {
unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i<8; i++) {
j = readBit();
//最先读出的是最低位数据 dat = (j << 7) | (dat >> 1); }
return dat; }
//向DS18B20写入一字节数据 void writeByte(unsigned char dat) {
unsigned int i; unsigned char j; bit b;
for(j = 0; j < 8; j++) {
b = dat & 0x01;
dat >>= 1;//写\将DQ拉低15us后, 在15us~60us内将DQ拉高, 即完成写1
if(b) {
ds = 0;
i++; i++; //拉低约16us, 符号要求15~60us内 ds = 1;
i = 8; while(i>0) i--; //延时约64us, 符合写时隙不低于60us要求 }
else //写\将DQ拉低60us~120us {
ds = 0;
i = 8; while(i>0) i--; //拉低约64us, 符号要求
17
基于单片机的数字温度计系统课程设计
ds = 1;
i++; i++; //整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us了 } } }
//向DS18B20发送温度转换命令 void sendChangeCmd() {
dsInit(); //初始化DS18B20, 无论什么命令, 首先都要发起初始化 dsWait(); //等待DS18B20应答
delayMs(1); //延时1ms, 因为DS18B20会拉低DQ 60~240us作为应答信号 writeByte(0xcc); //写入跳过序列号命令字 Skip Rom writeByte(0x44); //写入温度转换命令字 Convert T }
//向DS18B20发送读取数据命令 void sendReadCmd() {
dsInit(); dsWait(); delayMs(1);
writeByte(0xcc); //写入跳过序列号命令字 Skip Rom writeByte(0xbe); //写入读取数据令字 Read Scratchpad }
//获取当前温度值 int getTmpValue() {
unsigned int tmpvalue; int value; //存放温度数值 float t;
unsigned char low, high; sendReadCmd();
//连续读取两个字节数据 low = readByte(); high = readByte();
18
基于单片机的数字温度计系统课程设计
//将高低两个字节合成一个整形变量 //计算机中对于负数是利用补码来表示的
//若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value tmpvalue = high; tmpvalue <<= 8; tmpvalue |= low; value = tmpvalue;
//使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度
t = value * 0.0625;
//将它放大10倍, 使显示时可显示小数点后一位, 并对小数点后第二位进行4舍5入
//如t=11.0625, 进行计数后, 得到value = 111, 即11.1 度 //如t=-11.0625, 进行计数后, 得到value = -111, 即-11.1 度 value = t * 10 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5 return value; }
void display(int v) {
unsigned char count;
unsigned char datas[] = {0, 0, 0, 0}; unsigned int tmp = abs(v); datas[0] = tmp / 1000; datas[1] = tmp % 1000 / 100; datas[2] = tmp % 100 / 10; datas[3] = tmp % 10; writeComm(0xc0+3); if(v < 0) {
writeString(\ } else {
writeString(\ }
if(datas[0] != 0)
19
基于单片机的数字温度计系统课程设计
{
writeData('0'+datas[0]); }
for(count = 1; count != 4; count++) {
writeData('0'+datas[count]); if(count == 2) {
writeData('.'); } } }
/******************************DS18B20*******************************/
void main() {
uchar table[] = \ delayMs(1);
sendChangeCmd(); init();
writeComm(0x80); writeString(table, 16); while(1) {
delayMs(1000); //温度转换时间需要750ms以上 writeComm(0xc0); display(getTmpValue()); sendChangeCmd(); } }
20
正在阅读:
51单片机课程设计数字温度计报告10-01
案例-员工无故离职造成损失当赔06-05
浅谈中学数学不等式的证明方法04-21
北京大学地球与空间科学学院空间物理学2015年考博英语暑期备考提分“战术”08-13
施工组织课程设计06-09
标准直齿圆柱齿轮尺寸计算说课05-24
战争简史试复习题09-21
中国古代文学第2阶段测试题12-18
市场监督管理局行政处罚信息一览表11-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 温度计
- 单片机
- 课程
- 数字
- 报告
- 设计
- 潍坊市2015届高三第一次模拟考生物
- 我读这本书
- M70系统PLC操作
- 资产管理行业现状以及未来发展趋势分析
- 上海市建设工程甲方资料员需整理的资料(全部)
- 农业产业联合体章程
- 2018政府采购评标专家库测评真题(3套含答案)
- “十三五”重点项目-光纤光缆生产建设项目可行性研究报告 - 图文
- 农业秸秆木塑复合材料
- 学考新视野 第四编 综合与实践
- 箱变改造施工方案
- 《学困生学习诊断与指导研究》课题开题报告
- 数字信号处理大作业
- matlab第一次训练题目
- 请结合中国革命、建设和改革的实际论述为什么中国社会发展要坚持走自己的路
- 多功能切片机毕业设计设计说明书 - 图文
- 中小企业会计实习具体安排
- 员工手册(物业公司范本)
- 福师《素描》离线作业二
- 实验4-字符处理程序设计