DS18B20温度采集+1602显示

DS18B20温度采集+1602显示
DS18B20温度采集+1602显示

/*************************************************************************************************************** 名称:DS18B20采集温度+1602LCD 显示

编写:超

时间:2012-11-29

内容:

***************************************************************************************************************/ #include

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P3^7; //ds18b20与单片机连接口

sbit RS=P3^0; //1602写数据/写命令选择端口

//RS=1写数据,即要显示的内容

//RS=0写命令,即一些LCD 设置命令

sbit RW=P3^1; //1602读/写选择端,RW=0为写模式

sbit EN=P3^2; //给EN一个高脉冲,将数据送入液晶控制器,完成写操作

uchar code str1[]={"^_^ Zhang Chao"};

uchar code str2[]={" T= "};

uchar data disdata[5];//百、十、个、小数位

uint tvalue; //温度值

uchar tflag; //温度正负标志

/*************************lcd1602设置子函数*******************************************************************/ void delay1ms(uint ms) //延时1毫秒子函数,形参为ms(不够精确的)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<110;j++);

}

void wr_com(uchar com)//lcd写控制指令子函数,形参为com

{

delay1ms(1); //调用延时子函数,并用实参1代替延时子函数中的形参ms

RS=0; //RS=0进入写命令状态,即一些LCD设置命令

RW=0; //RW=0为写模式

EN=0; //EN=0时不能完成写操作

P2=com; //把要设置的指令码com送给P2口

delay1ms(1);

EN=1; //给EN一个高脉冲,将数据送入液晶控制器,完成写操作

delay1ms(1);

EN=0; //EN=0时不能完成写操作

}

void wr_dat(uchar dat)//lcd写显示数据子函数,形参为dat

{

delay1ms(1);

RS=1; //RS=1进入写数据状态,即要显示的内容

RW=0; //RW=0为写模式

EN=0; //EN=0时不能完成写操作

P2=dat; //把要显示的数据dat送给P2口

delay1ms(1);

EN=1; //给EN一个高脉冲,将数据送入液晶控制器,完成写操作

delay1ms(1);

EN=0; //EN=0时不能完成写操作

}

void lcd_init() //lcd初始化设置子函数,不带参数,0x38是显示模式设置,其余是显示开/关及光标设置,无顺序

{

delay1ms(15);

wr_com(0x38); //调用写控制指令子函数,并用实参"0011 1000"代替形参com

//0x38表示设置为16*2显示,每个块为5*7点阵,8位数据接口

delay1ms(5);

wr_com(0x08); //调用写控制指令子函数,并用实参"0000 1000"代替形参com

//0x08表示设置为关显示、不显示光标、光标不闪烁

delay1ms(5);

wr_com(0x01); //调用写控制指令子函数,并用实参"0000 0001"代替形参com

//0x01表示显示数据清屏(数据指针清0,所有显示清0)

delay1ms(5);

wr_com(0x06);//调用写控制指令子函数,并用实参"0000 0110"代替形参com

//0x06表示当读或写一个字符后地址指针加1,且光标加1;当写一个字符时,整屏显示不移动delay1ms(5);

wr_com(0x0c);//调用写控制指令子函数,并用实参"0000 1100"代替形参com

//0x0c打开显示、不显示光标、光标不闪烁

delay1ms(5);

}

void display(uchar *p)//lcd显示字符串子函数

{

while(*p!='\0') //测试是否等于'\0',即判断是否结尾

{

wr_dat(*p); //显示指针所指的字符串

p++; //指针加1

delay1ms(1);

}

}

init_play()//初始化显示子函数

{

lcd_init(); //调用lcd初始化设置子函数,对LCD进行初始化

wr_com(0x80); //调用写控制指令子函数,并用实参"1000 0000"代替形参com

//并将数据指针定位到第一行第一个字符处

display(str1);//从第一行第一个字符处显示字符串str1

wr_com(0x80+0x40);//调用写控制指令子函数,并用实参"1000 0000"代替形参com

//并将数据指针定位到第二行第一个字符处

display(str2); //从第二行第一个字符处显示字符串str2

}

/**************************************************************************************************************/

/******************************ds18b20程序******************************************************************/ void delay_18b20(uint i)//延时1微秒

{

while(i--);

}

void ds18b20rst() //ds18b20初始化子函数

//要求"数据线拉高-延时-数据线拉低-延时大于480微妙-数据线拉高-延时等待" {

uchar x=0;

DQ = 1; //信号线DQ复位

delay_18b20(4); //延时

DQ = 0; //DQ拉低

delay_18b20(100); //精确延时大于480us

DQ = 1; //拉高

delay_18b20(40);

}

void ds18b20wr(uchar wdata)/*写数据子函数,无返回值,含参数*/

{

uchar i=0;

for (i=8; i>0; i--)//要写完一个字节,故需要重复8次以下操作

{

DQ = 0; //数据线拉低

DQ = wdata&0x01;//wdata是一个形参,将其与0000 0001进行按位与

//按从低到高的顺序发送数据(一次发送一位)

delay_18b20(10);

DQ = 1; //最后将数据线拉高

wdata>>=1; //将wdata右移1位

}

}

uchar ds18b20rd() //读数据子函数,是有返回值dat

{

uchar i=0;

uchar dat = 0;

for (i=8;i>0;i--)//要读完一个字节,故需要重复8次以下操作

{

DQ = 0; //给脉冲信号

dat>>=1;

DQ = 1; //给脉冲信号

if(DQ)

dat|=0x80;

delay_18b20(10);

}

return(dat); //返回dat

}

read_temp() //读取温度值并转换的子函数,有返回值温度值tvalue

{

uchar a,b;

ds18b20rst(); //调用ds18b20初始化子函数

ds18b20wr(0xcc);//调用写数据子函数,向ds18b20写命令0xcc

//ccH表示跳过ROM读序列号,适用于单机工作,直接向18b20发送温度变换命令ds18b20wr(0x44);//调用写数据子函数,向ds18b20写命令0x44

//44H表示启动ds18b20温度转换,结果自行存入9字节的RAM中ds18b20rst(); //调用ds18b20初始化子函数

ds18b20wr(0xcc);//同上

ds18b20wr(0xbe);//调用写数据子函数,向ds18b20写命令0xbe

//beH表示读取RAM中9字节的温度数据

a=ds18b20rd(); //调用读数据子函数,并将所得数据给a

b=ds18b20rd(); //

tvalue=b; //把b的值给tvalue

tvalue<<=8; //tvalue左移8位

tvalue=tvalue|a;//tvalue与a进行按位或

if(tvalue<0x0fff)//

tflag=0; //前五位为0时,读取的温度为正,标志位为0,此时只要

//将测得数值乘以0.0625即可得到实际温度

else //前五位为1时,读取的温度为负,标志位为1,此时需要

{ //将测得数值取反后再加1,再乘以0.0625即可得到实际温度

tvalue=~tvalue+1;

tflag=1; //此时表示负温度

}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

return(tvalue); //返回温度值

}

/*************************************************************************************************************/

/************************温度值显示**************************************************************************/ void ds18b20disp()//温度值显示

{

uchar flagdat;

disdata[0]=tvalue/1000+0x30; //百位数

disdata[1]=tvalue%1000/100+0x30;//十位数

disdata[2]=tvalue%100/10+0x30; //个位数

disdata[3]=tvalue%10+0x30; //小数位

if(tflag==0)

flagdat=0x2b; //正温度显示符号:+

else

flagdat=0x2d; //负温度显示负号:-

if(disdata[0]==0x30)

{

disdata[0]=0x20; //如果百位为0,不显示

if(disdata[1]==0x30)

{

disdata[1]=0x20; //如果百位为0,十位为0也不显示

}

}

wr_com(0x80+0x46); //定位数据指针的位置:第二行第六个字符处

wr_dat(flagdat); //显示符号位

wr_com(0x80+0x47); //定位数据指针的位置:第二行第七个字符处

wr_dat(disdata[0]); //显示百位

wr_com(0x80+0x48); //定位数据指针的位置:第二行第八个字符处

wr_dat(disdata[1]); //显示十位

wr_com(0x80+0x49); //定位数据指针的位置:第二行第九个字符处

wr_dat(disdata[2]); //显示个位

wr_com(0x80+0x4a); //定位数据指针的位置:第二行第十个字符处

wr_dat(0x2e); //显示小数点

wr_com(0x80+0x4b); //定位数据指针的位置:第二行第十一个字符处

wr_dat(disdata[3]); //显示小数位

}

/**************************************************************************************************************/

/********************主程序*********************************************************************************/ void main()

{

init_play(); //调用lcd初始化显示子函数

while(1)

{

read_temp(); //调用ds18b20读取温度

ds18b20disp(); //调用温度显示子函数

}

}

/************************************************************************************************************/

基于DS18B20的温度采集显示系统的设计

《单片机技术》课程设计任务书(三) 题目:基于DS18B20的温度采集显示系统的设计 一、课程设计任务 传统的温度传感器,如热电偶温度传感器,具有精度高,测量范围大,响应快等优点。但由于其输出的是模拟量,而现在的智能仪表需要使用数字量,有些时候还要将测量结果以数字量输入计算机,由于要将模拟量转换为数字量,其实现环节就变得非常复杂。硬件上需要模拟开关、恒流源、D/A转换器,放大器等,结构庞大,安装困难,造价昂贵。新兴的IC温度传感器如DS18B20,由于可以直接输出温度转换后的数字量,可以在保证测量精度的情况下,大大简化系统软硬件设计。这种传感器的测温范围有一定限制(大多在-50℃~120℃),多适用于环境温度的测量。DS18B20可以在一根数据线上挂接多个传感器,只需要三根线就可以实现远距离多点温度测量。 本课题要求设计一基于DS18B20的温度采集显示系统,该系统要求包含温度采集模块、温度显示模块(可用数码管或液晶显示)和键盘输入模块及报警模块。所设计的系统可以从键盘输入设定温度值,当所采集的温度高于设定温度时,进行报警,同时能实时显示温度值。 二、课程设计目的 通过本次课程设计使学生掌握:1)单总线温度传感器DS18B20与单片机的接口及DS18B20的编程;2)矩阵式键盘的设计与编程;3)经单片机为核心的系统的实际调试技巧。从而提高学生对微机实时控制系统的设计和调试能力。 三、课程设计要求 1、要求可以从键盘上接收温度设定值,当所采集的温度高于设定值时,进行报警(可以是声音报警,也可是光报警) 2、能实时显示温度值,若用Proteus做要求保留一位小数; 四、课程设计内容 1、人机“界面”设计; 2、单片机端口及外设的设计; 3、硬件电路原理图、软件清单。 五、课程设计报告要求 报告中提供如下内容:

DS1802HE LCD1602实现万年历和温度显示(不用时间芯片)

#include #include #include #define uchar unsigned char #define uint unsigned int uchar code table[]="--Figo"; //uchar code table1[]="https://www.360docs.net/doc/3d10606104.html,"; sbit lcden=P3^4; sbit lcdrs=P3^5; sbit dula=P2^6; sbit wela=P2^7; sbit ds=P1^7; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; int tempValue; int s_1=1000; unsigned char FunKeyFlag=6,keypress; #define key_vaule1 0x01 #define key_vaule2 0x02 #define key_vaule3 0x03 #define key_vaule4 0x04 uchar num; int ms_10=10; int flag=0; int s_1_1=1000; uint sec=55; uint min=9; uint hour=22; uint nian=2014; uint yue=8; uint ri=20; uint xingqi=3; //延时函数, 对于11.0592MHz时钟, 例i=10,则大概延时10ms. void delay_wendu(unsigned int i) { unsigned int j; while(i--) {

基于stc51单片机的LCD1602显示时间_的电子万年历(显示当前温度)

1 课设所需软件简介 1.1 Keil uVision4的简要介绍 2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。 2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。 Keil C51开发系统基本知识Keil C51开发系统基本知识 1. 系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 2. Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

DS18B20温度采集程序代码

/******************************************************************** * 文件名:温度采集DS18B20.c * 描述: 该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上显示出来。 * 创建人:东流,2012年2月10日 * 版本号:2.0 ***********************************************************************/ #include #define uchar unsigned char #define uint unsigned int #define jump_ROM 0xCC #define start 0x44 #define read_EEROM 0xBE sbit DQ = P2^3; //DS18B20数据口 unsigned char TMPH,TMPL; uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /******************************************************************** * 名称: delay() * 功能: 延时函数 * 输入: 无 * 输出: 无 ***********************************************************************/ void delay(uint N) { int i; for(i=0; i

LCD1602和DS18B20显示温度

您研究一下以下这个程序,然后就可以加上时间功能.多做一点就能多学一点. 开机时对DS18B20进行检测,如果DS18B20检测不正常,LCD1602显示:DS18B20 ERROR PLEASE CHECK 蜂鸣器报警。 DS18B20检测正常,LCD1602显示: DS18B20 OK TEMP: 100.8℃ 如果温度值高位为0,将不显示出来。 你可以通过拔插DS18B20查看DS18B20的检测功能。 /* ME300B单片机开发系统演示程序- DS18B20温度显示*/ /* LCD1602显示*/ /* 作者:gguoqing */ /*Copyright(C)伟纳电子https://www.360docs.net/doc/3d10606104.html, All Rights Reserved */ /*******************************************************************/ #include < reg51.h > #include < intrins.h > #define uchar unsigned char #define uint unsigned int sbit DQ = P3^3 ; //定义DS18B20端口DQ sbit BEEP=P3^7 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P2^0 ; sbit LCD_RW = P2^1 ; sbit LCD_EN = P2^2 ; uchar code cdis1[ ] = {" DS18B20 OK "} ; uchar code cdis2[ ] = {" TEMP: . C "} ; uchar code cdis3[ ] = {" DS18B20 ERR0R "} ; uchar code cdis4[ ] = {" PLEASE CHECK "} ; unsigned char data temp_data[2] = {0x00,0x00} ; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,

单片机原理实验1602显示温度时钟

《单片机原理实验》 考 试 报 告 题目:1602显示温度时钟及星期

1602显示温度时钟及星期 摘要:本次实验利用STC89C51单片机作为控制器,通过keil编写程序,并且将生成hex文件写入单片机的内存中,实现对单片机的I/O口,液晶显示屏1602和温度传感器DS18B20操作,最终实现在液晶显示器1602上显示时钟,星期以及实时温度的功能。关键词:STC89C52单片机,液晶显示器1602,DALLAS公司生产的DS18B20数字温度计,时钟,温度,星期 1.引言 在开始的时候只是想用1602显示成数字温度计,可是在做完温度计之后发现1602屏上还有足够的空间用来显示时钟,所以就在原来的数字温度的程序上进行了扩展,加入了时钟的显示程序以及星期的显示程序。确定了要显示的内容之后,通过计算字符的个数,对要显示的东西进行了布局,使得其显示看起来比较协调美观。在做这个实验的时候,数字温度计的程序是最难的部分,我花了两天的时间把参考书上的一个用数码管显示温度的程序读懂,弄清楚DS18B20操作时序和数码管显示温度的基本步骤和原理之后,再结合我已经掌握的1602显示器的知识,尝试这把数码管显示改为1602显示,这个过程就是写这个程序最重要的地方,由于数码管显示原理与数码管显示原理完全不同,要进行比较大的调整,从写完这个程序和到完全调试好这个程序并且进行成功仿真花了大半天的时间。当我调试完了程序和仿真之后,我在面包板上用相应的元器件搭出了仿真时候的电路,当我把程序写入单片机内,1602显示的实验室温度为30.7。成功之后,我再把以前写过的数字钟的程序逐渐的移植到这个程序当中,并且重新设置相关的参数,经过半天的调试,最终取得了理想中的结果。 2.原理 使用的STC89c51单片机对所有的元器件进行控制。外接时钟信号的晶振的频率为12MHz,所以其机器周期为1us,在写数字钟的程序是用的是中断计时,因此赋的初值为(65536-50000),即为50ms,中断进行20次后就是一秒,因此也就可以实现比较精准的定时了。 温度传感器DS18B20采用的是单总线协议,与单片机连接只需要一个I/O端口就可以实现双向通信。它只有三个引脚,一个接高电平,一个接地,还一个就是单总线,在接单总线通常要求外接一个约为5k欧的电阻,仿真实验时我采用的是4.7k欧,搭建实物电路用的是4.3k欧。该单条信号线既可以传输时钟,又可以传输数据,而且数据传输是双向的,因而这种单总线控制技术具有线路简单硬件开销少,成本低廉,便于总线扩展和维护。 液晶显示屏1602可以显示两行字符,每行最多可以显示16个字符,液晶第3端为对比度调节端,通过一个10k欧的电位器接地来调节液晶显示器的对比度,在仿真时可以不接入,但是在搭建实物电路时必须接上,以免烧坏器件造成损失。 通过先学习以上元器件的工作原理及操作时序,然后在keil上编写出控制这些器件正常工作的程序,并且生成hex文件以供单片机识别和使用。 3.电路

基于DS18B20的lcd1602的温度检测系统

1.1、来源 在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。温度无时无刻不在,同样也时时刻刻都在变化,为了让人们能更直观的看出此时此刻此地的实时温度,我就利用了单片机来完成这一功能。 1.2、意义 温度的检测与控制在现代经济与社会中有举足轻重的地位,与我们的生活息息相关,密不可分,越发占有一席之地。例如在储粮仓库、智能楼宇、空调控制及其他的工农业生产和科学研究中应用广泛。在温度的检测与控制方面,DS18B20小型温度检测系统及其数字温度传感器有许多突出的优点,其通过单总线与单片机连接,系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度检测,因此对于我们来设计并研究基于DS18B20的温度检测系统有主要的现实意义,从一方面讲这不仅对于工农业的发展,更对于国防的巩固与建设起到重要的作用;另一方面,本设计能够在一定程度上提高自己的单片机开发能力。 1.3、目的 (1)本实验要实现的是通过DS18B20温度传感器采集温度并在LCD上显示,并学会使用单片机控制DS18B20此类单总线器件,并对数字温度传感器DS18B0进行时序分析。 (2)更进一步了解LCD1602的应用。 (3)掌握单片机与PC的远程通信。 2、课题承担人员及分工说明 *********:(1)主要负责电路板的制作、焊接与调试。 (2)电路的仿真。 (3)温度主要程序的编写与调试。 **********:(1)Protel画板,材料的收集。 (2)串口的调试与程序编写。 (3)VB界面的设计和上位机程序的编写。 二、课题总体设计说明 1、说明总体开发计划和课题所达到的功能目标和技术指标 1.1、总体开发计划 1.1.1、基本功能 (1)以数字传感器DS1820作为前端采集温度,经过单片机处理后,将外部的温度显示在液晶屏上。 (2)可用通过独立式按键来设定温度的上限值和下限值,当坏境温度超过上限值或低于下限值时蜂鸣器会自动报警,并在液晶屏上提示温度大于上限值或温度小于下限值。 (3)当单片机检测到DS18B20存在时会在在LCD1602上显示“DS18B20 Succes”,反之则显示“DS18B20 is Wrong,TEMP is No on”。 1.1.2、扩展功能 以数字传感器DS1820作为前端采集温度,经过单片机处理后,再通过串口通信,把实

ds18b20多路温度采集程序

本程序为ds18b20的多路温度采集程序,是我自己参考其他程序后改写而成,可显示4路正负温度值,并有上下限温度报警(声音、灯光报警)。 亲测,更改端口即可使用。(主要器件:51单片机,ds18b20,lcd显示器) 附有proteus仿真图,及序列号采集程序 /****上限62度下限-20度****/ #include #define uchar unsigned char #define uint unsigned int sbit ds=P1^1; sbit rs=P1^4; sbit e=P1^6;

sbit sp=P1^0; sbit d1=P1^2; sbit d2=P1^3; uchar lcdrom[4][8]={{0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e}, {0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9}, {0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0}, {0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7}}; unsigned char code table0[]={"TEMPERARTURE:U "}; unsigned char code table1[]={"0123456789ABCDEF"}; int f[4]; int tvalue; float ftvalue; uint warnl=320; uint warnh=992; /****lcd程序****/ void delayms(uint ms)//延时 { uint i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--);

DS18B20温度显示演示程序-LCD1602显示

/*DS18B20温度显示演示程序-LCD1602显示 开机时对DS18B20进行检测,如果DS18B20检测不正常,LCD1602显示: DS18B20 ERROR PLEASE CHECK 蜂鸣器报警。 DS18B20检测正常,LCD1602显示: DS18B20 OK TEMP: 100.8℃ 如果温度值高位为0,将不显示出来。 你可以通过拔插DS18B20查看DS18B20的检测功能。*/ #include < reg51.h > #include < intrins.h > #define uchar unsigned char #define uint unsigned int sbit DQ = P3^2 ; //定义DS18B20端口DQ sbit BEEP=P1^0 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P1^0 ; sbit LCD_RW = P1^1; sbit LCD_EN = P1^2 ; uchar code cdis1[ ] = {" DS18B20 OK "} ; uchar code cdis2[ ] = {" TEMP: . C "} ; uchar code cdis3[ ] = {" DS18B20 BUSY "} ; uchar code cdis4[ ] = {" PLEASE WAIT "} ; unsigned char data temp_data[2] = {0x00,0x00} ; unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00} ; unsigned char code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ; void beep() ; unsigned char code mytab[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; #define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ; /*******************************************************************/ void delay1(int ms)

温度(温度传感器ds18b20)控制系统(水温) 带ds1302时间显示 lcd1602显示

#include #include #define uint unsigned int #define uchar unsigned char #include"lcd1602.h" #include"ds1302.h" #include"ds18b20.h" void keyscan(); void wenduxianshi(); void buzzer(); void jidianqi(); void delay(uint z); uchar l=0,temp=20; sbit k2= P3^0; sbit k3= P3^1; sbit k4= P3^2; sbit t= P2^0; sbit b= P2^2; void delay(uint z) { uint i,j; for(i=0;i<=z;i++) for(j=0;j<=500;j++); } void keycan() { if(k2==0); delay(12); if(k2==0) { l++; if(l==7) {l=0;} } switch(l) { case 0: { if(k3==0); delay(12); if(k3==0) { (times[1])++;

{(times[1])=0x00;} } if(k4==0); delay(12); if(k4==0) { (times[1])--; if((times[1])==0x00) {(times[1])=0x60; } } write_1302(0x82,times[1]); } break; case 1: { if(k3==0); delay(12); if(k3==0) { (times[2])++; if((times[2])==0x24) {(times[2])=0x00;} write_1302(0x84,times[2]); } if(k4==0); delay(12); if(k4==0) { (times[2])--; if((times[2])==0x00) {(times[2])=0x24;} } write_1302(0x84,times[2]); } break; case 2: { if(k3==0); delay(12); if(k3==0) { (times[3])++;

基于51单片机——Ds18B20温度采集-LCD显示汇编程序(附带proteus仿真图)

TEMP_ZH EQU 24H ;实测温度值存放单元 TEMPL EQU 25H TEMPH EQU 26H TEMP_TH EQU 27H ;高温报警值存放单元 TEMP_TL EQU 28H ;低温报警值存放单元 TEMPHC EQU 29H ;正、负温度值标记 TEMPLC EQU 2AH TEMPFC EQU 2BH K1 EQU P1.4 ;查询按键 K2 EQU P1.5 ;设置/调整键 K3 EQU P1.6 ;调整键 K4 EQU P1.7 ;确定键 BEEP EQU P3.7 ;蜂鸣器 RELAY EQU P1.3 ;指示灯 LCD_X EQU 2FH ;LCD 字符显示位置 LCD_RS EQU P2.0 ;LCD 寄存器选择信号 LCD_RW EQU P2.1 ;LCD 读写信号 LCD_EN EQU P2.2 ;LCD 允许信号 FLAG1 EQU 20H.0 ;DS18B20是否存在标志 KEY_UD EQU 20H.1 ;设定按键的增、减标志 DQ EQU P3.3 ;DS18B20数据信号

ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#60H MOV A,#00H MOV R0,#20H ;将20H~2FH 单元清零 MOV R1,#10H CLEAR: MOV @R0,A INC R0 DJNZ R1,CLEAR LCALL SET_LCD LCALL RE_18B20 START: LCALL RST ;调用18B20复位子程序 JNB FLAG1,START1 ;DS1820不存在 LCALL MENU_OK ;DS1820存在,调用显示正确信息子程序 MOV TEMP_TH,#055H ;设置TH初值85度 MOV TEMP_TL,#019H ;设置TL初值25度 LCALL RE_18B20A ;调用暂存器操作子程序 LCALL WRITE_E2 ;写入DS18B20 LCALL TEMP_BJ ;显示温度标记 JMP START2

LCD1602液晶显示器设计

LCD1602液晶显示课程设计 第一章绪论 1.1课题背景 当今时候是一个信息化的时代,信息的重要性不言而喻的,获取手段显得尤其重要。人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在当代显示技术中,主流的有LED显示屏和LCD液晶显示,而在这些显示技术中,尤其以液晶显示器LCD(Liquid crystal display)为代表的平板显示器发展最快,应用最广。LCD是典型的发光器件,它一材料科学为基础,综合利用了精密机械,光电及计算机技术,并正在微机械,微光学,纤维光学等前沿领域研究基础上,向高集成化,智能化方向发展。 液晶显示技术发展迅猛,市场预测表明,液晶显示平均年销售呈增长10%~13%,不久的将来有可能取代CRT,成为电子信息产品的主要显示器件,另外,液晶显示器对空间电磁辐射的干扰不敏感,且在紧凑的仪器空间不需要专门的屏蔽保护,因而课大大简化仪器的结构和制造成本,在各种便携式仪器,仪表将会越来越广泛的应用。特别是在电池供电的单片机产品中,液晶显示更是必选的显示器件。 1.2课题设计目标 本设计是基于AT89C51芯片单片机为主控芯片,结合1602液晶显示模板等外围电路,通过软件程序,来实现液晶显示英文字母。本次设计的目的在于利用单片机和IIC技术来显示英文字母。 1.3课程设计的主要工作 (1)对系统的各个模块的各个功能进行深入分析和研究,在对课题所采用的方案进行可行详细的研究后设计具体功能电路。 (2)熟悉所选芯片的功能并完成具体电路设计。

(3)对系统的最终指标进行测试,针对系统的不足,进行分析并提出一些改正方法。 1.4 设计要求 (1)运行IIC总线技术。 (2)循环显示字母。 第二章硬件设计 2.1 LCD1602简介 2.1.1 LCD1602引脚功能 LCD1602引脚如图2.1所示 图2.1 LCD1602引脚图 引脚图的功能如表2—1所示

DS18B20温度传感器和1602液晶制作温度和时间同时显示

用DS18B20温度传感器和1602液晶制作温度和时间同时显示【含原理图】2009年11月26日星期四22:43 C程序如下: /* 功能:温度采集显示和可调时钟显示,时钟用中断法实现 s1:选择要调节的时、分、秒位 s2:时、分、秒加一 s3:时、分、秒减一 */ #include #define uchar unsigned char #define uint unsigned int uchar num,s1num,count; ucharshi,fen,miao; sbitrs=P2^0; sbit e=P2^1; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; //按键定义 sbit DQ =P2^2; //定义通信端口 bit flag; uchar code table1[]="Time: 00:00:00"; uchar code table2[]="Temperature: 'C";//1602初始化字符 void delay(uint z)//延时子函数 { uintx,y; for(x=z; x>0; x--) for(y=110;y>0;y--); } #include<1602.h> #include<18b20.h> #include void main() { uchar temp; init_1602(); while(1) { delay(500); //去除0秒和1秒之间显示间隔跟正常1秒间隔相差过大if(miao==0) //每分钟进行温度采集一次 {

基于ARM的多片ds18b20 温度采集系统

基于ARM的多片ds18b20 温度采集系统 /****************************************************************************** 实验五多片ds18b20 温度采集 2005.1.13 *******************************************************************************/ #include #include "..\inc\option.h" #include "..\inc\44b.h" #include "..\inc\44blib.h" #include "..\inc\def.h" #include "..\inc\timer.h" /*************************************************************************** Timer5 初始化 入口参数:Timing_count=定时时间常数,定时时间=定时时间常数*0.02ms T5_int_Enable=1,T5 中断方式,T5_int_Enable=0,T5 查询方式 ****************************************************************************/ Timer_Init(U16 timing_count,U8 T5_int_Enable) { rINTMSK=BIT_GLOBAL|BIT_TIMER5; rTCFG0=0X0c70101;//prescaler=199 rTCFG0=0X010101;prescaler=1 rTCFG1=0X0100000; // DIV=4 rTCNTB5=timing_count; //rTCMPB5=(timing_count/2); havn't rTCMPB5!!! but T0--T4 have. rTCON=0X2000000; rTCON=0X1000000; if(T5_int_Enable) { rINTCON=0X05; rINTMOD=0X0; rINTMSK=~(BIT_GLOBAL|BIT_TIMER5); } } /********************************************************************************** 匹配ROM(命令55H),发8字节ROM代码 入口参数:*ROM_addr 为DS18B20-ID首地址 **********************************************************************************/ Match_Rom(U8 *ROM_addr) { U8 count; U8 *p; U8 temp=0x55; //匹配ROM 命令55H Write_Byte(temp);

【51单片机】温度传感器DS18B20程序-LCD1602显示

仿真截图: //仿真文件网盘地址: //程序: #include #include #define uchar unsigned char #define uint unsigned int sbit P00 = P0^0; sbit P01 = P0^1; sbit P02 = P0^2; sbit P03 = P0^3; sbit P04 = P0^4; sbit P05 = P0^5; sbit P06 = P0^6; sbit P07 = P0^7; sbit P10 = P1^0; sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit P14 = P1^4;

sbit P15 = P1^5; sbit P16 = P1^6; sbit P17 = P1^7; sbit P20 = P2^0; sbit P21 = P2^1; sbit P22 = P2^2; sbit P23 = P2^3; sbit P24 = P2^4; sbit P25 = P2^5; sbit P26 = P2^6; sbit P27 = P2^7; sbit P30 = P3^0; sbit P31 = P3^1; sbit P32 = P3^2; sbit P33 = P3^3; sbit P34 = P3^4; sbit P35 = P3^5; sbit P36 = P3^6; sbit P37 = P3^7; //****** DS18B20 ****** #define DQ P17 /*************精确延时函数*****************/ void delay10us(void) //误差0us { unsigned char a,b; for(b=1;b>0;b--) for(a=2;a>0;a--); } void delay20us(void) //误差0us { unsigned char a,b; for(b=1;b>0;b--) for(a=7;a>0;a--); } void delay30us() //误差0us { unsigned char a,b; for(b=3;b>0;b--) for(a=3;a>0;a--); }

基于DS18B20的温度报警器设计

毕业设计论文 基于DS18B20的温度报警器设计 系电子信息工程系 专业电子信息工程技术姓名康志凌 班级电子信息122 学号1201043206 指导教师徐敏N 职称讲师 设计时间2014.10.08-2015.04.08

基于DS18B20的温度报警器设计 摘要 本设计以AT89C51单片机为核心,设计了一个温度测量报警系统,可以方便的实现温度采集和显示。它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工农业中的温度测量及报警。本设计由AT89C51单片机、DS18B20温度传感器和LED显示器组成,可以直观的显示测量的温度。本设计运行过程中,如果外界温度低于-20℃或高于70℃,系统将出发蜂鸣器,产生报警声音,且对应的LED同步闪烁。 关键词:AT89C51,DS18B20,传感器,温度报警器

江苏信息职业技术学院毕业设计(论文) 目录 摘要 ................................................................................................................................................... I 目录 ................................................................................................................................................. II 第1章引言.. (1) 第2章方案设计 (2) 第3章 DS18B20简介 (3) 3.1 DS18B20性能指标 (3) 3.2 DS18B20的封装及内部结构 (4) 3.3 DS18B20工作原理及应用 (4) 3.4 控制器对DS18B20操作流程 (5) 第4章硬件电路设计 (7) 4.1 AT89C51 (8) 4.2 晶振电路 (9) 4.3 复位电路 (9) 4.4 报警电路 (10) 4.5 74LS245 (10) 4.6 显示电路 (11) 第5章软件设计 (12) 5.1 主程序模块 (12) 5.2 程序说明 (12) 第6章仿真结果 (21) 参考文献 (23) 致谢 (24)

基于stc89c52单片机的温度检测LCD1602显示

#include #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^2; unsigned char code str1[]={"temperature: "}; unsigned char code str2[]={" "}; uchar data disdata[5]; uint tvalue;//温度值 uchar tflag;//温度正负标志 /*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的){unsigned int i,j; for(i=0;i

{ delay1ms(1);; RS=1; RW=0; EN=0; P2=dat; delay1ms(1); EN=1; delay1ms(1); EN=0; } void lcd_init()//初始化设置// {delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } void display(unsigned char *p)//显示// { while(*p!='\0') { wr_dat(*p); p++; delay1ms(1); } } init_play()//初始化显示 { lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2);

DS18B20温度采集+1602显示

/*************************************************************************************************************** 名称:DS18B20采集温度+1602LCD 显示 编写:超 时间:2012-11-29 内容: ***************************************************************************************************************/ #include #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7; //ds18b20与单片机连接口 sbit RS=P3^0; //1602写数据/写命令选择端口 //RS=1写数据,即要显示的内容 //RS=0写命令,即一些LCD 设置命令 sbit RW=P3^1; //1602读/写选择端,RW=0为写模式

sbit EN=P3^2; //给EN一个高脉冲,将数据送入液晶控制器,完成写操作 uchar code str1[]={"^_^ Zhang Chao"}; uchar code str2[]={" T= "}; uchar data disdata[5];//百、十、个、小数位 uint tvalue; //温度值 uchar tflag; //温度正负标志 /*************************lcd1602设置子函数*******************************************************************/ void delay1ms(uint ms) //延时1毫秒子函数,形参为ms(不够精确的) { unsigned int i,j; for(i=0;i

相关文档
最新文档