导航:首页 > 操作系统 > 电子温度计单片机

电子温度计单片机

发布时间:2023-06-27 16:28:22

‘壹’ 单片机温度计上电显示温度怎么设置

1、首先通过DS18B20检测温度,若温度高于设定最大阈值,红灯亮,若温度低于设定最小阈值,黄灯亮。
2、其次通过ADC0832配合电压检测电路检测当前电压,通过蜂鸣器提供按键音。
3、最后通过显示屏显示数字温度计的温度下限阈值,当前温度值,电压表的电压值,通过按键切换界面,设置上下限阈值。

‘贰’ 51单片机数字温度计常见故障及解决办法

用51做处理器,外围电路如图,一片双积分转换芯片ICL7135做AD,它的时钟需要125K,用51的ALE经过一片CD4024分频得到。1403提供基准源。另外,一片7660提供7135工作所需要的负压。
为了省电,把所有模拟电路部分电源用一个晶体管管理起来,由P1.0来控制。(上图为示意图,省去了电阻没画)P1.0为地的时候,模拟系统才上电
现在怪现象如下:
仿真机正常运行,烧写芯片后无反应。
仿真正常,说明外围芯片完全正常,电路也没有错误。
经过检查,晶体正常,复位可靠,EA高,程序堆栈都没有溢出,并排除其它一切低级错误的可能。
再编写一程序,
main()
{
while(1) {P1.1=0;}
}
P1.1和VCC间接有一发光管,开机无反应。
后来,发现更奇怪的现象:
拔除CD4024,MC1403,ICL7135,ICL7660中的任何一个,系统就可以正常运行!
百思不得其解,茶饭不思,郁闷了N久
更换全部芯片,如故。
更换ATMEL/PHILIPS/WINBOND的N款单片机,如故。
检查,排除电路故障的可能,
后来又发现,只要上电之前把P1.0对地短路,(也就是模拟部分强加电源),上电,系统正常运行。
但是,如果开机前P1.0不对地短路,上电一定不能运行,此后即使再把P1.0对地接,也不行。
顺这个思路,应该是和模拟部分有关……
又是郁闷N久,之后,无意间翻看CD4024内部图,茅塞顿开……
CD4024等TTL/CMOS逻辑芯片,为了防止静电或错误的IO电平,内部都有保护电路

51单片机故障分析一个 - cryinrain_cug - cryinrain_cug的博客
如图2,每个IO口都有如图的2个二极管,集成在芯片内部。保证IO口电压在-0.6~5.6V之间
复位的过程中,全部IO为高,P1.0和ALE当然也是高。这样模拟部分不上电。
那么,ALE的输出角就等效于通过一个二极管向这四块模拟芯片供电!!!(如图)
ALE的输出能力不强,自然,ALE就被拉低了。
在查看51的手册,ALE和/PROG脚是复用的!!
在复位过程中,ALE如果为低,芯片进入编程状态!!!
也就是说,我的系统在上电复位的过程中就进入了PROG编程模式,难怪一条语句都不能执行
那么,也很好解释为什么四个芯片中拔掉一个就能正常工作了,因为负载轻了,ALE可能还没有被拉到2.5V以下,所以正常复位进入程序。
解决的办法:ALE接2K的上拉,再通过47K电阻接到Cd4024上,上电,一切正常!
结论:单片机编程模式/ISP模式是通过用户很不容易出现的一个时序来启动的,在一些特殊应用时要小心避开这些非用户代码模式。

‘叁’ 单片机的应用领域

四个领域:

1、医用设备

单片机在中竖戚低端领域有呼吸机、分析仪等设备,电子温度计在日常生活中比较常用。设计的产品广泛。

4、计算机网络通信

带通信接口的设备,单片机可直接与计算机数据通信。比如无线对讲机、远程监控交换机、手机等设备都能实现智能控制。

除了以上涉及到的几种领域外,还有其他领域也有设计,比如在教育、国防、工商等领域都有应用到,随着64位单片机和32位单片机的不断发展,未来单片机的应用领域将继续扩大。

‘肆’ 单片机数字温度计的源程序

//DS18B20的读写程序,数据脚P2.7 // //温度传感器18B20汇编程序,采用器件默认的12位转化 // //最大转化时间750微秒,显示温度-55到+125度,显示精度 // //为0.1度,显示采用4位LED共阳显示测温值 // //P0口为段码输入,P34~P37为位选 // /***************************************************/ #include "reg51.h" #include "intrins.h" //_nop_();延时函数用 #define Disdata P0 //段码输出口 #define discan P2 //扫描口 #define uchar unsigned char #define uint unsigned int sbit DQ=P1^2; //温度输入口 sbit DIN=P0^7; //LED小数点控制 uint h; uint temp; // // //**************温度小数部分用查表法***********// uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; // uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //列扫描控制字 uchar data temp_data[2]={0x00,0x00}; //读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用 // // // /*****************11us延时函数*************************/ // void delay(uint t) { for (;t>0;t--); } // /****************显示扫描函数***************************/ scan() { char k; for(k=0;k<4;k++) //4位LED扫描控制 { Disdata=dis_7[display[k]]; //数据显示 if (k==1){DIN=0;} //小数点显示 discan=scan_con[k]; //位选 delay(300); P2=0xff; } }

‘伍’ 单片机数字温度计的上电温度为30

最低温度。单片机数字温度计的上电温度为30是最低温度,温度控制范围为30度道100度之间,可键盘设置控制温度值,并显示。温度传感器采用18B20。18b20采用单总线方式与单片机相连,把采集到得温度信息传给单片机。

‘陆’ 单片机数字温度计设计

;调试成功,还能凑合用
;有什么具体的设计要求请说明,现场改。protues电路图,联系[email protected]
DATA_BUS BIT P1.2
FLAG BIT 00H
NEG BIT 01H
TURN BIT 02H
TEMP_L EQU 30H
TEMP_H EQU 31H
TEMP_DP EQU 32H
TEMP_INT EQU 33H
TEMP_BAI EQU 34H
TEMP_SHI EQU 35H
TEMP_GE EQU 36H
T_UP EQU 37H
T_DOWN EQU 38H
MARK EQU 39H
DIS_DP EQU 3AH
DIS_ADD EQU 3BH
KEY_HUAN BIT P3.0
KEY_A BIT P3.1
KEY_D BIT P3.2

ORG 0000H
AJMP START

ORG 0040H
START:
MOV SP, #50H
MOV P2,#00H; 先关闭所有数码管 共阴则 MOV P2, #0FFH
CLR FLAG
CLR NEG
CLR TURN ;按键转换标志,只有转换按键按过,再按其他的键才能调整温度。
MOV T_UP,#60H ;初始化温度上限
MOV T_DOWN,#30H ;初始化温度下限
MOV MARK,#00H ;当前显示数值的标志。0显示当前温度,1显示并调节最高温度,2显示并调节最低温度。
MOV TEMP_DP, #08H
MOV TEMP_BAI, #08H
MOV TEMP_SHI, #08H
MOV TEMP_GE, #08H
LCALL DISPLAY
MAIN:
LCALL READ_TEMP
LCALL PROCESS
LCALL KEYSCAN
LJMP MAIN

;读温度程序
READ_TEMP:
LCALL RESET_PULSE ;18B20初始化,对18B20的每一个读写操作都是从初始化开始的。
MOV A, #0CCH ;指令0CCH 跳过读ROM,至于为什么看看DS18B20的中文资料就知道了。
LCALL WRITE ;往18B20写指令
MOV A, #44H ;指令44H 温度变换。
LCALL WRITE
LCALL DISPLAY ;调用显示
LCALL RESET_PULSE ;18B20初始化
MOV A, #0CCH
LCALL WRITE
MOV A, #0BEH ;0BEH 读暂存存储器
LCALL WRITE ;先写“读温度”指令
LCALL READ ;再读温度值
RET

;复位脉冲程序

;/*--------------------------------------------------------------------------------------------------------------------
; 时序:初始化时序、读时序、写时序。
;
;初始化:检测总线控制器发出的复位脉冲
;
;和ds18b20的任何通讯都要从初始化开始
;
;初始化序列包括一个由总线控制器发出的复位脉冲
;
;和跟在其后由从机发出的存在脉冲。
;
;始化:复位脉冲+存在脉冲
;
;具体操作:
;
;总线控制器发出(TX)一个复位脉冲 (一个最少保持480μs 的低电平信号),然后释放总线,
;
;进入接收状态(RX)。单线总线由5K 上拉电阻拉到高电平。探测到I/O 引脚上的上升沿后
;
;DS1820 等待15~60μs,然后发出存在脉冲(一个60~240μs 的低电平信号)。
;
;具体看" 18b20"文档里的 " 单线复位脉冲时序和1-wire presence detect "的时序图
;对着18B20的复位时序图就看明白了
;--------------------------------------------------------------------------------------------------------------------*/
;
RESET_PULSE:
RESET: SETB DATA_BUS
NOP
NOP
CLR DATA_BUS
MOV R7, #255
DJNZ R7, $
SETB DATA_BUS
MOV R7, #30
DJNZ R7, $
JNB DATA_BUS, SETB_FLAG
CLR FLAG
AJMP NEXT
SETB_FLAG:
SETB FLAG
NEXT: MOV R7, #120
DJNZ R7, $
SETB DATA_BUS
JNB FLAG, RESET
RET

;写命令 同样对着写时序图看
WRITE: SETB DATA_BUS ;数据线置1
MOV R6, #8
CLR C
WRITING:
CLR DATA_BUS
MOV R7, #5
DJNZ R7, $
RRC A
MOV DATA_BUS, C
MOV R7, #30H
DJNZ R7, $
SETB DATA_BUS
NOP
DJNZ R6, WRITING
RET

;读命令

READ: SETB DATA_BUS
MOV R0, #TEMP_L
MOV R6, #8
MOV R5, #2
CLR C
READING:
CLR DATA_BUS
NOP
NOP
SETB DATA_BUS
NOP
NOP
NOP
NOP
MOV C, DATA_BUS
RRC A
MOV R7, #30H
DJNZ R7, $
SETB DATA_BUS
DJNZ R6, READING
MOV @R0, A
INC R0
MOV R6, #8
SETB DATA_BUS
DJNZ R5, READING
RET

;循环显示段位
DISPLAY:
MOV R4, #50

DIS_LOOP:
MOV P2,#00H
MOV A, TEMP_DP
MOV DPTR, #TABLE_DP ;真不知这TABLE_DP能干什么,不显示负号时加上后还会显示255.9.
MOVC A, @A+DPTR ;现在看来必须得加上他,否则添加了负号处理并显示后会间歇性的显示-01.8. 很奇怪这是为什么
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
SETB P2.3
LCALL D1MS
CLR P2.3

MOV A, TEMP_GE
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
CLR P0.7
SETB P2.2
LCALL D1MS
CLR P2.2

MOV A, TEMP_SHI
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
SETB P2.1
LCALL D1MS
CLR P2.1

JNB NEG,BAI
MOV A,#0BFH
MOV P0,A
SETB P2.0
LCALL D1MS
CLR P2.0
;AJMP NEXTT

BAI: MOV A, TEMP_BAI
CJNE A, #0, SKIP
AJMP NEXTT
SKIP: MOV A, TEMP_BAI
MOV DPTR, #TABLE_INTER
MOVC A, @A+DPTR
MOV P0, A
SETB P2.0
LCALL D1MS
CLR P2.0
NEXTT: NOP
DJNZ R4, DIS_LOOP
RET

KEYSCAN:
JB KEY_HUAN,KEY2
LCALL D2MS
JB KEY_HUAN,KEY2
CPL TURN
INC MARK
MOV A,MARK
CJNE A,#03H,KEY2
MOV MARK,#00H

KEY2: JNB TURN, OVER

JB KEY_A,KEY3
LCALL D2MS
JB KEY_A,KEY3
MOV A,MARK
CJNE A,#01H,N1
INC T_UP
N1: MOV A,MARK
CJNE A,#02H,OVER
INC T_DOWN

KEY3: JB KEY_D,OVER
LCALL D2MS
JB KEY_D,OVER
MOV A,MARK
CJNE A,#01,N2
DEC T_UP
N2: MOV A,MARK
CJNE A,#2,OVER
DEC T_DOWN
OVER:
RET

/* ------------------------------------------------------------------------------------------
当温度转换命令发布后,经转换所得的温度值以二字节补码的形式存放在高速暂存存储器的第0、1个字节。
;单片机可通过单线接口读到该数据,读取时低位在前,高位在后。
;对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
;数据处理
--------------------------------------------------------------------------------------------*/
PROCESS:
MOV A,MARK
CJNE A,#01H,TP1
MOV A,T_UP
AJMP SEP
TP1:MOV A,MARK
CJNE A,#02H,TP2
MOV A,T_DOWN
AJMP SEP
TP2: MOV R7, TEMP_L ;取二进制温度最低四位,即温度的小数位。
MOV A, #0FH
ANL A, R7
MOV TEMP_DP,A ;小数位存到TEMP-DP中。

MOV R7, TEMP_L ;取二进制温度整数部分低四位。
MOV A, #0F0H
ANL A, R7
SWAP A
MOV TEMP_L, A

MOV R7, TEMP_H ;取二进制温度整数部分高四位
MOV A, #0FH
ANL A, R7
SWAP A
ORL A, TEMP_L ;温度的整数位在A,
MOV TEMP_L,A ;暂存当前温度值

;比较温度是否超过报警温度。
CJNE A,T_UP,NEQ1
NEQ1: JC NUP
CLR P3.3
AJMP TP
NUP:SETB P3.3
MOV A,TEMP_L
CJNE A,T_DOWN,NEQ2
NEQ2: JNC NDOWN
CLR P3.4
AJMP TP
NDOWN:SETB P3.4

TP: MOV A,TEMP_L
MOV R7, #80H ;判断是否为负数。即温度是否为零下
ANL A, R7
CJNE A, #00H,NG
CLR NEG
MOV A,TEMP_L
AJMP SEP
NG: SETB NEG
MOV A,TEMP_L
CPL A
INC A

SEP:
MOV B, #64H
DIV AB ;
MOV TEMP_BAI,A
MOV A, #0AH
XCH A, B
DIV AB
MOV TEMP_SHI,A
MOV TEMP_GE,B

RET

D1MS:
MOV R7,#250
DJNZ R7,$
RET

D2MS:
MOV R6, #3
LOOP3: MOV R5, #250
DJNZ R5, $
DJNZ R6, LOOP3

RET

TABLE_DP:
DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB 06H,07H,08H,08H,09H,09H

TABLE_INTER:
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H

END

阅读全文

与电子温度计单片机相关的资料

热点内容
为什么主题解压那么慢 浏览:858
怎么下载扫描二维码的手机app 浏览:725
云服务器创建私有镜像的时候一定要关机吗 浏览:112
php开发学习门户 浏览:385
传奇游戏服务器怎么设置 浏览:823
敲击东西解压完整版 浏览:401
刺络学pdf 浏览:868
怎么给手机文件夹设置封面 浏览:931
汽车保养app怎么用 浏览:62
线程javalock 浏览:896
c语言编译运行结果查看器 浏览:112
androidpx转dip 浏览:841
西藏编译局是什么级别 浏览:1001
php提交代码 浏览:597
如何用命令查找并删除代码块 浏览:582
python初学路线图 浏览:534
matlab遗传算法旅行商问题 浏览:304
将办公软件加入加密软件的进程 浏览:724
联想小新pro14编译器 浏览:462
为什么服务器要关掉icmp协议 浏览:855