DSB 单片机数码管显示原理图和程序

合集下载

数码管显示原理及应用实现

数码管显示原理及应用实现
当为多位一体的数码管时,它们的内部的公共端是独立的,而负责显示什么数字 的段线全部是连接在一起的,独立的公共端可以控制多位一体的哪一位数码管点亮, 而连接在一起的段线可以控制这个能点亮数码管亮什么数字,那么把公共端叫做“位 选线”,连接在一起的段线叫做“段选线”。有了段选和位选线,通过单片机及外部驱 动电路可以控制任意的数码管显示任意的数字。
8
两位数的分离:
三位数的分离 :
9
a
10
4
数码管的硬件原理图
5
数码管的静态显示
本开发板的数码管为共阴极,根据上图我们可知,图上6个单位数码管的阳极, 即标有a,b,c,d,e,f,g,h的引脚全部连接在一起;数码管WE1,WE2,WE3,WE4,WE5 ,WE6是它们的位选端,每一个数码管对应一个位选端。
74HC573锁存器的功能介绍。 例如我们用C语言写一段程序,先让第一个数码管显示一个8字。 分析如下: 第一个数码管显示8字,那么其他的数码管位选就要关闭,即只打开第一个数码 管的位选。因数码管为共阴极,所以位选选通时,为低电平,关闭时为高电平,即 W1端对应数据为0,其他为1,那么P0口输出的值为0xfe。再确定段选,要显示8, 那么只有h为0,其他都为1,所以P0口的数据为0x7f。 程序代码如下所示:
6
数码管的静态显示
#include<reg52.h>//52系列单片机头文件
sbit dula=P2^6; //声明U1锁存器的锁存端
sbit wela=P2^7; //声明U2锁存器的锁存端
void main()
{
wela=1;
//打开U2锁存端
P0=0xfe;
//送入位选信号
wela=0;

基于单片机的LED数码管实验设计程序(附电路原理图)

基于单片机的LED数码管实验设计程序(附电路原理图)
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++);
}
void main( )//主函数
{
while(1) //无限循环
{
P3=0x7f; //P3.8引脚输出低电平,L8点亮
P0=0x06; //数字1的段码
delay();
P3=0xbf ; //P3.7引脚输出低电平,L7点亮
void main(void)
{
TMOD=0x01; //使用定时器T0
EA=1; //开中断总允许
ET0=1; //允许T0中断
TH0=(65536-46083)/256; //定时器高八位赋初值
TL0=(65536-46083)%256; //定时器低八位赋初值
TR0=1;
int_time=0; //中断计数变量初始化
void interserve(void ) interrupt 1 using 1 //using Time0
{
int_time++;
if(int_time==20)
{
int_time=0; //中断计数变量清0
second++; //秒计数变量加1
}
if(second==60)
{
second=0; //如果秒计满60,将秒计数变量清0
}
}
//********************************************************
//函数功能:定时器T0的中断服务程序
//*******************************************************

DS18B20单片机数码管显示原理图和程序

DS18B20单片机数码管显示原理图和程序

最近天气热了,想要是做个能显示温度的小设备就好了,于是想到DIY个电子温度计,网上找了很多资料,结合自己的材料,设计了这个用单片机控制的实时电子温度计。

作为单片机小虾的我做这个用了2天时间,当然是下班后,做工不行见谅了。

主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。

先上原理图:洞洞板布局图:然后就是实物图了:附上源程序:程序是别人写的,我只是自己修改了下,先谢谢原程序者的无私奉献。

#include"reg52.h"#define uchar unsigned char#define uint unsigned intsbit DQ=P3^4; //温度数据口sbit wx1=P2^0; //位选1sbit wx2=P2^1; //位选2sbit wx3=P2^2; //位选3sbit wx4=P2^3; //位选4unsigned int temp, temp1,temp2, xs;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, //共阳数码管0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};/******延时程序*******/void delay1(unsigned int m){unsigned int i,j;for(i=m;i>0;i--)for(j=110;j>0;j--);}void delay(unsigned int m) //温度延时程序{while(m--);}void Init_DS18B20(){unsigned char x=0;DQ = 1; //DQ复位ds18b20通信端口delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于480usDQ = 1; //拉高总线delay(4);x=DQ; //稍做延时后如果x=0那么初始化成功x=1那么初始化失败delay(20);}/***********ds18b20读一个字节**************/uchar ReadOneChar(){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 高电平拉成低电平时读周期开始dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80; //delay(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0; //从高电平拉至低电平时,写周期的开始DQ = dat&0x01; //数据的最低位先写入delay(5); //60us到120us延时DQ = 1;dat>>=1; //从最低位到最高位传入}}/**************读取ds18b20当前温度************/void ReadTemperature(){unsigned char a=0;unsigned b=0;unsigned t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作/WriteOneChar(0x44); // 启动温度转换delay(5); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度存放器等〔共可读9个存放器〕前两个就是温度/ delay(5);a=ReadOneChar(); //读取温度值低位/b=ReadOneChar(); //读取温度值高位/temp1=b<<4; //高8位中后三位数的值temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位数的值temp1室温整数值temp2=a&0x0f; //小数的值temp=((b*256+a)>>4); //当前采集温度值除16得实际温度值zhenshuxs=temp2*0.0625*10; //小数位,假设为0.5那么算为5来显示xs小数xiaoshu }void wenduxianshi(){wx1=0;P0=table[temp/10]; //显示百位delay1(5);wx1=1;wx2=0;P0=table[temp%10]+0x80; //显示十位加上0x80就显示小数点了。

DS18B20的传感器数码管显示的设计原理及程序

DS18B20的传感器数码管显示的设计原理及程序

以下是原理图:以下是原理图的程序设计:#include <reg52.h>#include<math.h>#define uchar unsigned charsbit DQ=P1^6;unsigned char tempL=0;unsigned char tempH=0;unsigned int tempa;uchar display_data[4]={0};uchar flag_fu=0; //温度正负值标志位float temperature; //温度值void DS18_delay(int useconds)//延时函数{int s;for (s=0; s<useconds;s++);}unsigned char Init_DS18B20(void){unsigned char x=0;DQ=0; //发送复位脉冲DS18_delay(29); //延时(>480ms)DQ=1; //拉高数据线DS18_delay(3); //等待(15~60ms) 等待存在脉冲x=DQ; //获得存在信号(用于判断是否有器件)DS18_delay(25); // 等待时间隙结束return(x); //返回存在信号,0 = 器件存在, 1 = 无器件}ReadOneChar(void)//读一个字节{unsigned char i=0;unsigned char dat=0;for (i=8;i>0;i--){DQ=1;DS18_delay(1);DQ=0;dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值) DQ=1;if(DQ)dat|=0x80;DS18_delay(4);}return(dat);}WriteOneChar(unsigned char dat){unsigned char i=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;DS18_delay(5);DQ=1;dat>>=1;}DS18_delay(4);}unsigned int ReadTemperature(void){Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0x44);DS18_delay(125);Init_DS18B20();WriteOneChar(0xcc);WriteOneChar(0xbe);tempL=ReadOneChar();tempH=ReadOneChar();tempa=((tempH*256)+tempL);if(tempa&0x8000){tempa=~tempa;tempa+=1;flag_fu=1;}else{flag_fu=0;}//温度转换,把高低位做相应的运算转化为实际温度temperature=tempa*0.625*8;DS18_delay(200);return temperature ;}void display(){unsigned char code dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x7f,0xff};P3=0x01;P2=dis[display_data[0]];DS18_delay(10);P3=0x02;P2=dis[display_data[1]];DS18_delay(10);P3=0x04;P2=dis[display_data[2]]+0x80;DS18_delay(10);P3=0x08;P2=dis[display_data[3]];DS18_delay(10);}void main(){unsigned int temp;uchar i;while(1){temp=ReadTemperature();if(flag_fu==0){ if(temp>=1000){display_data[0]=temp/1000;display_data[1]=(temp/100)%10;display_data[2]=(temp/10)%10;display_data[3]=temp%10;}else if(temp>=100){display_data[0]=12;display_data[1]=temp/100;display_data[2]=(temp%100)/10;display_data[3]=temp%10;}else{ display_data[0]=12;display_data[1]=12;display_data[2]=temp/10;display_data[3]=temp%10;}}else{ if(abs(temp)>100){display_data[0]=10;display_data[1]=abs(temp)/100;display_data[2]=(abs(temp)%100)/10;display_data[3]=abs(temp)%10;}else{display_data[0]=12;display_data[1]=10;display_data[2]=abs(temp)/10;display_data[3]=abs(temp)%10;}}for(i=0;i<250;i++)display();}}。

数码管的接线及显示(程序)

数码管的接线及显示(程序)

共阳共阴LED数码管引脚图管脚接口共阳共阴LED数码管引脚图管脚接口常见的数码管由七个条状和一个点状发光二极管管芯制成,叫七段数码管如下图所示,根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。

根据管脚资料,您可以判断使用的是何总接口类型.<LED数码管引脚图>LED数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。

在一定范围内,其正向电流与发光亮度成正比。

由于常规的数码管起辉电流只有1~2 mA,最大极限电流也只有10~30 mA,所以它的输入端在5 V电源或高于TTL高电平(3.5 V)的电路信号相接时,一定要串加限流电阻,以免损坏器件。

数码管使用的电流与电压电流:静态时,推荐使用10-15mA;动态时,16/1动态扫描时,平均电流为4-5mA,峰值电流50-60mA。

电压:查引脚排布图,看一下每段的芯片数量是多少?当红色时,使用1.9V乘以每段的芯片串联的个数;当绿色时,使用2.1V乘以每段的芯片串联的个数。

怎样测量数码管引脚,分共阴和共阳?找公共共阴和公共共阳首先,我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻, VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。

5.2.1数码显示原理1.LED显示器的结构与原理LED数码显示器是由若干个发光二极管组成的,当发光二极管导通时,相应的点或线段发光,将这些二极管排成一定图形,控制不同组合的二极管导通,就可以显示出不同韵字形。

单片机应用系统中常用的LED显示器为七段显示器,再加上有一个小数点,因此也可把它称为八段显示器。

结构形式有共阴极和共阳极两种,它的结构图如图5.11所示。

共阴极是把所有发光二极管的阴极连起来,通常接地,通过控制每一只发光二极管的阳极电平来使其发光或熄灭,阳极为高电平发光,为低电平熄灭;共阳极是把所有发光二极管的阳极连起来,通常为高电平(如+5V),通过控制每一只发光二极管的阴极电平来使其发光或熄灭,阴极为低电平发光,为高电平熄灭。

单片机和DSB的数字温度计设计方案

单片机和DSB的数字温度计设计方案

题目:基于89C51和DS18B20的数字温度计设计一、设计要求数字式温度计要求测温范围为—55〜125°C,精度误差在0.1 °以内,LED 数码管直读显示。

二、方案论证根据系统的设计要求,选择DS18B20作为本系统的温度传感器,选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示、报警等功能。

选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。

该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到AT89C51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用4位共阳LED数码管以动态扫描法实现。

检测范围-55摄氏度到125 摄氏度。

按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。

数字温度计总体电路结构框图如图1所示。

图1数字温度计总体电路结构框图三、系统硬件电路的设计温度计电路设计原理图如图2所示,控制器使用单片机AT89C51,温度传感器使用DS18B20,用4位共阳LED数码管实现温度显示图2数字温度计设计电路原理图1、主控制器AT89C51是一种带4K 字节闪烁可编程可擦除只读存储器的低电压,高性 能CMOS8位微处理器。

该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能 8位CPU 和闪烁存储器组合在单个芯片中, ATMEL 的AT89C51是一种高效微控制器, 为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2、 显示电路显示电路采用 4位共阳LED 数码管,从 P0 口输出段码,列扫描用P3.0~P3.3 口来实现,列驱动用8550三极管。

3、 温度传感器工作原理DS18B20温度传感器是美国DALLAS 半导体公司最新推出的一种改进型智 能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度, 并且可根据实际要求通过简单的编程实现 9〜12位的数字值读数方式。

数码管显示原理及实例

数码管显示原理及实例

数码管显示电路原理(1)元件需求以及选型8个八段数码管,8个PNP三极管,8个电阻,数码管内部由8个发光二极管组成,排成一个8字,可以组成0到9数字以及A-F字符的表示形式,分共阴和共阳两种,共阴表示8个二极管公共极接的是二极管的负极,共阳表示公共极接的是发光二极管的正极。

我们选的是共阳的数码管,三极管(8550)用来做片选,增加驱动,电阻的作用在于限流,由于基极电流很大,所以需要一个电阻来限流,防止烧坏单片机IO口。

阻值选择用1K。

建议使用1K。

(2)程序原理数码管要亮,必须满足里面的二极管导通,有两个条件,片选打开,数据口要置低(视硬件而定)。

首先要得到0到9十个数据的断码。

即按硬件的排布,画出对应的0到9形状,标出对应的二极管控制IO口,得到数值,可以参照我们提供的数据。

片选:片选就是开关,控制数码管亮或不亮的,每个数码管都有自己的片选。

数据口:数据口就直接接到了IO口上面,低电平有效,灌电流。

数码管的显示分为两种:静态显示和动态显示。

静态显示:只能显示一个数码管或者几个数码管而且只能同时显示同一个数字,静态显示不需要扫描的,就是说打开片选后不需要关闭,只需要跟换数据口出来的数据就可以改变显示的内容。

一般静态显示用的比较少,只用在数码管只有一个的情况下。

动态显示:动态显示用的很普遍,动态显示可以任意数码管随意显示想要显示的内容。

动态显示需要不断的对数码管进行扫描。

原理是开一个片选送一个字节显示,延时一些时间(注:延时时间很重要,没有的话就会显示一片红,超过的话数码管就会闪烁,一般一个数码管延时显示1MS左右就可以了)。

然后关闭第一个片选,开启第二个片选,送另外的一个数据,延时,然后关闭低二个片选,送数值,延时……循环,那么就可以看到几个数码管显示出不同的数值了。

每个显示数字共用数据线,每个分别有一个使能管脚,显示数据采用隐消的编程方法,即每一位显示一段时间再轮换。

实验内容:在四位数码管上显示8051接线说明:P0口接八段显示数据低电平有效,P2口低四位接片选低电平有效。

数码管显示温度 原理图+程序

数码管显示温度 原理图+程序

原理图:程序:#include // 包括一个52标准内核的头文件#include //_nop_(; 延时函数用sbit DQ=P3^3; //温度输入口sbit P07=P0^7; //LED小数点控制// sbit P20=P2^0;sbit SPEA=P3^7;sbit P17=P1^7;unsigned int h,n=0;unsigned int temp;void delay(unsigned int t;void delay882us(void;ow_reset(void;void write_byte(unsigned char val; unsigned char read_byte(void; unsigned int read_temp(;void delayms(unsigned int ms;void runled(void;void light(void;void x8led(unsigned long ddd;/**********************温度小数部分用查表法************************/unsigned char data temp_data[2]={0x00,0x00}; //读出温度暂放unsigned char data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用/*************************11us延时函数*****************************///void delay(unsigned int t{for (;t>0;t--;}///*****************************延时882us****************************/void delay882us(void{unsigned char i;for(i=0;i<255;i++;{_nop_(;}}///***************************DS18B20复位函数************************/ow_reset(void{char presence=1;while(presence{while(presence{DQ=1;_nop_(;_nop_(;//从高拉倒低DQ=0;delay(50; //550 usDQ=1;delay(6; //66 uspresence=DQ; //presence=0 复位成功,继续下一步}delay(45; //延时500 uspresence=~DQ;}DQ=1; //拉高电平}/////**************************DS18B20写命令函数************************///向1-WIRE 总线上写1个字节void write_byte(unsigned char val{unsigned char i;for(i=8;i>0;i--{DQ=1;_nop_(;_nop_(; //从高拉倒低DQ=0;_nop_(;_nop_(;_nop_(;_nop_(; //5 us DQ=val&0x01; //最低位移出delay(6; //66 usval=val/2; //右移1位}DQ=1;delay(1;}/************************DS18B20读1字节函数*************************///从总线上取1个字节unsigned char read_byte(void{unsigned char i;unsigned char value=0;for(i=8;i>0;i--{DQ=1;_nop_(;_nop_(;value>>=1;DQ=0;_nop_(;_nop_(;_nop_(;_nop_(; //4 usDQ=1;_nop_(;_nop_(;_nop_(;_nop_(; //4 usif(DQvalue|=0x80;delay(6; //66 us}DQ=1;return(value;}/*****************************读出温度函数**************************/unsigned int read_temp({ow_reset(; //总线复位delay(200;write_byte(0xcc; //发命令write_byte(0x44; //发转换命令ow_reset(;delay(1;write_byte(0xcc; //发命令write_byte(0xbe;temp_data[0]=read_byte(; //读温度值的第字节temp_data[1]=read_byte(; //读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0]; // 两字节合成一个整型变量。

DSB的原理与应用

DSB的原理与应用

DALLAS18B20DQar-J ■:匚 B i.Nl ■ i fl二l NC ZZl MC 二 NCS-Piii ^L SGP CDSI&B20U)3 DS18B20的原理与应用单片机系统除了可以对电信号进行测量外,还可以通过外接传感器对温度信号进行测 量。

传统的温度检测大多以热敏电阻为传感器,但热敏电阻可靠性差、 测量的温度不够准确,且必须经专门的接口电路转成数字信号后才能被单片机处理。

DS18B20是一种集成数字温度传感器,采用单总线与单片机连接即可实现温度的测量。

本节内容在先介绍 DS18B20的工作原理、时序和指令后,然后设计完成一个数字温度计。

温度计功能要求采用数码管显示温度,小数点后2位有效数字,实际温度高于某个值时用蜂鸣器报警。

3.1 DS18B20工作原理DS18B20是美国DALLAS 半导体公司推出的第一片支持 一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度 转化成串行数字信号供单片机处理,可实现温度的精度测量与控制。

DS18B20性能特点见表3-1-1所示。

表3-1-1 DS18B20性能指标 性能 参数备注电源 电压范围在3.0~ 5.5V ,在寄生电源方式下可由数据线供电测温范围 -55 °C - +125 在-10 °C 〜+85 C 时精度为 ±).5 °C分辨率 9〜12 位,分别有 0.5C, 0.25C, 0.125C 和 0.0625C 编程控制转换速度 在9位时,小于 93.75ms ; 12位分辨率时,小于750ms总线连接点理论248,实际视延时、距离和干扰限制,最多几十个、封装外形根据应用领域不同, DS18B20有常见有TO-92、SOP8等封装外形,见图 3-1-1所示, 表3-1-2给出了 TO-92封装的引脚功能,其中DQ 引脚是该传感器的数据输入 /输出端(I/O ), 该引脚为漏极开路输出,常态下呈高电平。

单片机实验——数码管显示

单片机实验——数码管显示

数码管显示一、数码管静态显示1、电路图图12、电路分析该电路采用串行口工作方式进行串行显示实验,串行传输数据为8位,只能从RXD 端输入输出,TXD端用于输出同步移位脉冲。

当CPU执行一条写入发送缓冲器SBUF得指令时,产生一个正脉冲,串行口开始将发送缓冲器SBUF中得8位数据按照从低位到高位依次发送出去,8位数据发送完毕,发送结束标志TI置1,必须由软件对它清0后才能启动发送下一帧数据。

因此,当输完8个脉冲后,再一次来8个脉冲时,第一帧得8位数据就移到了与之相连得第二个74LS164中,其她数据依此类推.3、流程图N二、数码管动态显示1、电路图图22、电路分析R1—R7电阻值计算:一个7-seg数码管内部由8段LED组成,因此导通电压与电流与LED灯相同,LED导通压降大概在1、5V-2、2V,电流3mA-30mA,单片机得工作电压就是5V,所以一般取Rmin与Rmax中间值,330Ω、470Ω、510Ω.由于P0口内部没有上拉电阻,所以在P0口接排阻,上拉电压。

如果没有排阻得话,接上拉电阻时需要考虑数码管得电流,如果太小得话,就是驱动不了数码管得。

如图3:发现电流大于5mA时,数码管才能亮,与前面电流最小3mA不符,因此计算数码管电流时使其在10mA—20mA之间,确保能驱动数码管亮。

两个74HC573实现对六位数码管得段选与位选,控制端为LE(第11脚)。

3、思路分析先使第一个573输出同步,把数据送入573中,然后锁存,第二个573输出同步,打开第一个数码管,这样就把第一个数显示在了第一个数码管上,然后以此类推,把数据送到相应得数码管上显示,进行短暂得延时,在频率快得时候,人得眼睛瞧得就是数码管一直在显示,实际上就是以特别快得频率在闪烁。

(必须进行一个短暂得延时,延时时间可根据实际情况调整。

如果没有延时得话,数码管上得电流在瞬间就是达不到LED得导通电流,所以数码管不会显示,经过proteus仿真实验论证确实如此。

dsb汇编设计报告附电路图和程序

dsb汇编设计报告附电路图和程序

d s b汇编设计报告附电路图和程序文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]基于AT89C51单片机和DS18B20的数字温度计1课题说明随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。

传统的温度检测以热敏电阻为温度敏感元件。

热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。

这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。

本设计选用AT89C51型单片机作为主控制器件,DS18B20作为测温传感器,通过LCD1602实现温度显示。

通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。

该器件可直接向单片机传输数字信号,便于单片机处理及控制。

另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。

2 实现方法采用数字温度芯片DS18B20 测量温度,输出信号全数字化。

采用了单总线的数据传输,由数字温度计DS18B20和AT89C51单片机构成的温度测量装置,它直接输出温度的数字信号,也可直接与计算机连接。

采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。

该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限温度。

该系统扩展性非常强。

该测温系统电路简单、精确度较高、实现方便、软件设计也比较简单。

系统框图如图1所示。

图1 DS18B20温度测温系统框图3 硬件设计3.1 单片机最小系统设计3.1.1 电源电路图2 电源电路3.1.2 振荡电路与复位电路图3 振荡电路图4 复位电路3.2 DS18B20与单片机的接口电路图5 DS18B20与单片机的接口电路3.3 PROTEUS仿真电路图图6 PROTEUS仿真电路图4 软件设计系统程序主要包括主程序、读取温度子程序、数据转换子程序、显示数据子程序等。

单片机与DSB的数字温度计设计方案

单片机与DSB的数字温度计设计方案

四川师范大学课程设计报告基于单片机的DS18B20数字温度计设计学生姓名杜恒院系名称物理与电子工程学院专业名称电子信息工程班级2008 级 6 班学号2008070607指导教师汪文蝶完成时间2018年 5 月 20 日基于单片机的DS18B20数字温度计设计学生姓名:杜恒指导老师:汪文蝶内容摘要:随着现代信息化技术的飞速发展和传统工业改造的逐步实现,能独立工作的温度检测系统已广泛应用于各种不同的领域。

本文介绍了一个基于STC89C52单片机和数字温度传感器DS18B20的测温系统,并用LED数码管显示温度值,易于读数。

系统电路简单、操作简便,能任意设定报警温度并可查询最近的10个温度值,系统具有可靠性高、成本低、功耗小等优点。

关键词:单片机数字温度传感器温度计1 引言32 设计要求42.1 基本要求42.2 扩展功能43 总体方案设计43.1 方案论证43.1.1 方案一43.1.2 方案二43.2 总体设计框图44 硬件设计44.1 单片机系统54.2 数字温度传感器模块54.2.1 DS18B20性能54.2.2 DS18B20外形及引脚说明54.2.3 DS18B20接线原理图64.2.4 DS18B20时序图64.2.5 数据处理74.3 显示电路84.4 声光报警电路84.5 键盘输入电路95 软件设计95.1 主程序模块95.2 读温度值模块105.3 中断模块125.4 温度查询模块135.5 温度设定、报警模块145.6 数码管驱动模块156 源程序167 总结错误!未定义书签。

参考文献:错误!未定义书签。

1 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。

数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。

其中数字温度计就是一个典型的例子。

数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。

单片机数码管显示原理

单片机数码管显示原理

单片机数码管显示原理数码管是一种常见的数字显示器件,它可以用来显示数字、字母、符号等信息。

在单片机应用中,数码管常用于显示各种数据,如温度、电压、时间等。

本文将介绍单片机数码管显示的原理。

一、数码管的基本结构数码管是由多个发光二极管(LED)组成的,每个发光二极管都可以发出不同颜色的光。

常见的数码管有共阳极和共阴极两种类型。

共阳极数码管的阳极连接在一起,共阴极数码管的阴极连接在一起。

数码管的结构如下图所示:二、数码管的工作原理数码管的工作原理是通过控制各个发光二极管的亮灭来显示数字、字母、符号等信息。

以共阳极数码管为例,当某个数字需要显示时,单片机会将该数字对应的发光二极管的阳极接通,使其发出光亮。

其他数字对应的发光二极管的阳极则被断开,使其不发光。

这样就可以显示出需要的数字。

三、单片机控制数码管显示的方法单片机控制数码管显示的方法有两种:直接驱动和间接驱动。

1. 直接驱动直接驱动是指单片机的输出端口直接连接到数码管的各个发光二极管上,通过控制输出端口的电平来控制数码管的亮灭。

直接驱动的优点是控制简单,缺点是需要消耗大量的I/O口资源。

2. 间接驱动间接驱动是指单片机的输出端口连接到数码管的驱动芯片上,由驱动芯片来控制数码管的亮灭。

间接驱动的优点是可以节省I/O口资源,缺点是需要额外的驱动芯片。

四、数码管显示的应用数码管广泛应用于各种电子设备中,如计算器、电子钟表、温度计、电压表等。

在单片机应用中,数码管常用于显示各种数据,如温度、电压、时间等。

通过单片机控制数码管的亮灭,可以实现各种数字显示功能。

单片机数码管显示原理是通过控制各个发光二极管的亮灭来显示数字、字母、符号等信息。

单片机控制数码管显示的方法有直接驱动和间接驱动两种。

数码管广泛应用于各种电子设备中,是一种非常实用的数字显示器件。

用LED数码管和DSB设计的温度显示器

用LED数码管和DSB设计的温度显示器

单片机课程设计说明书用LED数码管和DS18B20设计的温度显示器目录1.概述 (2)1.1课题研究背景和意义 (2)1.2课题设计内容 (2)2.课程方案设计 (3)2.1系统总体设计要求 (3)2.2系统模块结构论证 (3)2.2.1方案一 (3)2.2.2方案二 (3)3.系统硬件设计 (6)3.1总体设计 (6)3.2单片机最小运行系统 (6)3.3温度传感器(DS18B20)电路 (7)3.3.1 DS18B20基本介绍 (7)3.3.2 DS18B20控制方法 (7)3.3.3 DS18B20供电方式 (8)3.4七段数码管显示电路 (8)3.5驱动电路 (9)4.系统软件设计 (9)4.1程序结构分析 (9)4.2系统程序流图 (10)5.软硬件联调 (13)5.1软硬件调试中出现的问题及解决措施 (13)5.2实物图 (13)5.3调试结果 (13)结束语 (14)参考文献 (15)附录 (16)附录1:基于单片机的温度显示系统设计原理图 (17)附录2:基于单片机的温度显示系统设计PCB图 (18)附录3:proteus仿真图 (19)附录4:基于单片机的温度显示系统设计C语言程序清单 (20)附录5: 基于单片机的温度显示系统设计元器件目录表 (24)1.概述1.1课题研究背景和意义温度控制是工业自动控制的重要组成部分,在工业、电子、化工精度实验等诸多领域都有重要的应用,而温度测量又是温度控制当中重要的一环。

将现场温度控制在一定范围内,是在各种实际应用的重要保证和前提。

因此温度控制系统在工业控制领域中十分重要。

由于现代工艺越来越多的需要对实时温度进行监测和控制,而且需要的精度越来越高。

所以温度控制系统国内外许多有关人员的重视,得到了十分广泛的应用。

温度控制系统发展迅速,而且成果显著。

由于单片微处理器的性能日益提高、价格又不断降低,使其性能价格比的优势非常明显。

“用LED数码管和DS18B20设计的温度显示器”课程设计,主要设计以一个单片机为控制核心的温度自动测量系统,本课题的研究意义如下:(1)它是一个单片机系统,对它的设计和制作可以灵活运用在单片机课程中所学的知识,并使之得到巩固和提高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近天气热了,想要是做个能显示温度的小设备就好了,于是想到DIY个电子温度计,网上找了很多资料,结合自己的材料,设计了这个用单片机控制的实时电子温度计。

作为单片机小虾的我做这个用了2天时间,当然是下班后,做工不行见谅了。

主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。

先上原理图:
洞洞板布局图:
然后就是实物图了:
附上源程序:程序是别人写的,我只是自己修改了下,先谢谢原程序者的无私奉献。

#include
eg52.h
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^4; //温度数据口
sbit wx1=P2^0; //位选1
sbit wx2=P2^1; //位选2
sbit wx3=P2^2; //位选3
sbit wx4=P2^3; //位选4
unsigned int temp, temp1,temp2, xs;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, //共阳数码管0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};
/******延时程序*******/
void delay1(unsigned int m)
{
unsigned int i,j;
for(i=m;i>0;i--)
for(j=110;j>0;j--);
}
void delay(unsigned int m) //温度延时程序
{
while(m--);
}
void Init_DS18B20()
{
unsigned char x=0;
DQ = 1; //DQ复位ds18b20通信端口
delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时大于480us
DQ = 1; //拉高总线
delay(4);
x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20);
}
/***********ds18b20读一个字节**************/
uchar ReadOneChar()
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 高电平拉成低电平时读周期开始
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80; //
delay(4);
}
return(dat);
}
/*************ds18b20写一个字节****************/ void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0; //从高电平拉至低电平时,写周期的开始
DQ = dat&0x01; //数据的最低位先写入
delay(5); //60us到120us延时
DQ = 1;
dat>>=1; //从最低位到最高位传入
}
}
/**************读取ds18b20当前温度************/ void ReadTemperature()
{
unsigned char a=0;
unsigned b=0;
unsigned t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作/ WriteOneChar(0x44); // 启动温度转换
delay(5); // this message is wery important
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)/ 前两个就是温度delay(5);
/
a=ReadOneChar(); //读取温度值低位/ 读取温度值高位// b=ReadOneChar();
temp1=b<<4; //高8位中后三位数的值
temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位数的值temp1室温整数值
temp2=a&0x0f; //小数的值
temp=((b*256+a)>>4); //当前采集温度值除16得实际温度值zhenshu
xs=temp2*0.0625*10; //小数位,若为0.5则算为5来显示xs小数xiaoshu
}
void wenduxianshi()
{
wx1=0;
P0=table[temp/10]; //显示百位
delay1(5);
wx1=1;
wx2=0;
P0=table[temp_x0010_]+0x80; //显示十位就显示小数点了。

0x80加上delay1(5);
wx2=1;
wx3=0;
//显示个位P0=table[xs_x0010_];
delay1(5);
wx3=1;
wx4=0;
//显示C 字符P0=table[12];
delay1(5);
wx4=1;
}
void main()
{
while(1)
{ ReadTemperature();
wenduxianshi();
}
}。

相关文档
最新文档