单片机开发之数字温度计制作

您所在的位置:网站首页 单片机最小系统设计要求 单片机开发之数字温度计制作

单片机开发之数字温度计制作

2024-07-03 08:03| 来源: 网络整理| 查看: 265

要求 (一)基本功能 1. 测温范围-50℃—110℃ 2. 精度误差不大于0.1℃ 3. LED数码直读显示 (二)扩展功能 1.实现语音报数(不开发) 2.可以任意设定温度的上下限报警功能 二.计划完成时间 三周 1.第一周完成软件和硬件的整体设计,同时按要求上交设计报告一份。 2.第二周完成软件的具体设计和硬件的制作。 3.第三周完成软件和硬件的联合调试。 准备工作 确定模块

1.温度传感器模块 2.数码管模块 3.转换模块

元件清单

1.STC89C52单片机 2.DS18B20温度传感器

开发工具 1.proteus(开发仿真图) 2.dxp(开发原理图,设计电路板) 安装教程

1.http://www.3d66.com/softhtml/softsetup_114.html

破解教程

破解文件在上文链接中

破解方法:AD10KeyGen

运行AD10KeyGen,点击“打开模板”,加载license.ini,如想修改注册名,只需修改:TransactorName=Your Name其中Your Name用你自己的名字替换,其它参数在单机版的情况下无需修改;

点击“生成协议”,保存生成的alf文件(文件名任意,如“jack”),并将其放到你的安装目录下;

将patch.exe放到你的安装目录下,运行patch,对安装目录下的dxp.exe文件补丁,注意运行破解时软件没有运行;

启动DXP,运行菜单DXP->My Account,点击Add Standalone License file,加载前面生成的license(.alf)文件后即能正常使用了。

3.keil(开发程序)

1.点击"keil3.exe"直接安装直到结束. 不过这样只可以生产2k以下的代码,如果要生成2k以上的代码需要注册, 请按第2部操作.

2.第一次运行请先进入"文件"->“授权管理”弹出窗口下输入注册码, 注册码由"Keil注册.exe"生成,选择V2选项,生成后复制LIC内容到keil 弹出窗口的“新授权ID码(LIC)”中然后点击“添加授权”, 注意看看注册后的使用期限,如果太短可以用注册机重新生成, 一般都可以找到30年左右:-)

3.keil3注册失败(出现错误: ERROR R208: RENEW LICENSE ID CODE (LIC)):[解决方案]

keil3下载地址:http://www.xdowns.com/soft/38/39/2013/Soft_104885.html 注册机下载地址: http://www.51hei.com/f/Keil_lic_v2.exe

设计方案 数字温度计设计方案 电路结构 电路主要有控制模块,报警模块,显示模块,温度传感器模块以及核心模块单片机处理模块, 其系统原理框图如下图所示! 设计思路 DSl8B20作为单片机AT89C52的外部信号源,把所采集到的温度转换为数字信号,通过I/O接口传给AT89C52,AT89C52启动ROM内的控制程序驱动LED数码管,通过I/O接口和数据线(单片机和数码管的接口)把数据传送给数码管,将采集到的温度显示出来,通过控制模块控制测温的上下限,当达到限制时,则AT89C52通知报警模块,实现报警功能!

结构

开发仿真图 开发程序 十六进制数值翻转代码 int isTurn=0; int turnAll(int a) {//切换全部 if(isTurn)return a^0xff; return a; } int turnAfter(int a){//仅切换低位 if(isTurn)return a^0x0f; return a; 全部代码 #include #include #define uchar unsigned char #define uint unsigned int sbit DATA = P1^1; //DS18B20接入口 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极字型码 //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极字型码 int temp; //温度值 int ss; //中间的一个变量 int dd; int j; int isTurn=0; //切换共阴极-共阳极 uchar data b;//定时器中断次数 uchar data buf[4];//字型显示中间变量 int alarmH=320; //默认报警值 int alarmL=100; //定义开关的接入口 sbit k1=P2^5;//+ sbit k2=P2^6;//- sbit k3=P2^7;//确认 sbit k4=P2^4; //切换 sbit bell=P1^0; //蜂鸣器 sbit HLight=P1^2; //正温指示灯 sbit LLight=P1^3; //负温度指示灯 sbit warn=P1^4; //报警指示灯 sbit Red=P1^6; //温度上限设置指示灯 sbit Green=P1^7; //温度下限设置指示灯 bit set=0; //初始化 bit Flag=0; //设置标志 int n,a; //函数的声明区 void key_to1(); void key_to2(); void delay(uint); void key(); void Show(); int turnAll(int a) ; int turnAfter(int a); //函数的定义区 int turnAll(int a) { if(isTurn)return a^0xff; return a; } int turnAfter(int a){ if(isTurn)return a^0x0f; return a; } /*延时子函数*/ void delay(uint num) { while(num--) ; } void delay2(void) //延时函数,延时约0.6毫秒 { unsigned char i; for(i=0;i0;i--) { DATA = 0; // 给脉冲信号 dat>>=1; DATA = 1; // 给脉冲信号 if(DATA) dat|=0x80; delay(8); } return(dat); } WriteOneChar(unsigned char dat) //写一个字节 { uchar i=0; for (i=8; i>0; i--) { DATA = 0; DATA = dat&0x01; delay(10); DATA = 1; dat>>=1; } delay(8); } int ReadTemperature(void) //读取温度 { uchar a=0; uchar b=0; int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=ReadOneChar();//低位 b=ReadOneChar();//高位 t=b; t


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3