数码管显示STC89C54RD+DB18B20测温板,资料来源于网络。
主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。
原理图:
#include"reg52.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);
}
[page]
/***********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%10]+0x80; //显示十位 加上0x80就显示小数点了。
delay1(5);
wx2=1;
wx3=0;
P0=table[xs%10]; //显示个位
delay1(5);
wx3=1;
wx4=0;
P0=table[12]; //显示 C 字符
delay1(5);
wx4=1;
}
void main()
{
while(1)
{
ReadTemperature();
wenduxianshi();
}
}
关键字:数码管显示 STC89C54RD DB18B20 测温板
引用地址:
数码管显示STC89C54RD+DB18B20测温板
推荐阅读最新更新时间:2024-03-16 14:24
基于stc89c52rc单片机的数字钟设计(数码管显示)
事情总是看着简单,做起来没那么容易。 这个程序我开始时是根据教程编的,有些地方不理解就匆匆略过……事实证明这是不可取的…… 写了百十来行以后编译,报错!就不会解决了。 这时才体会到基础是多么重要!!! 学习方法要科学,要知其然,更要知其所以然。 就像罗哥说的,从原理入手…… 感谢 刘鹏 百忙之中抽出时间指导,真是我的良师和益友。。。。。。。 ***************************************************** 把程序贴出来。大家学习学习。千万不要ctrl c,ctrl v。 全部代码下载地址:http://www.51hei.com/f/ssz.rar ******************
[单片机]
数码管动态显示1——7,循环右移
数码管动态显示1 7,循环右移 * 功 能:数码管动态显示1 7,循环右移 * * 芯片:Amega16L * * 时钟频率:内部4M * * 编译环境:ICC-AVR7 * #include iom16v.h #include macros.h #define uint unsigned int #define uchar unsigned char #define on_138 PORTC|=BIT(PC7) //on or off 138 #define off_138 PORTC&=~BIT(PC7) #pragma data:code uchar flash table ={0x3f,0x
[单片机]
STM32下SPI模式通过MAX7219驱动8位数码管显示模块
借鉴的地方: 1、正点原子的“ALIENTEK MINISTM32 实验20 SPI实验” 2、 STM32 硬件SPI max7219 8位数码管显示模块 http://www.openedv.com/posts/list/46179.htm 工具: STM32F103RCT6开发板;MAX7219 8位数码管显示模块: 数码管模块电路图:(店家https://item.taobao.com/item.htm?spm=a1z09.2.0.0.FiSjlX&id=41059249086&_u=cjnajni5a96提供) MAX7219中文说明可以借鉴: http://wenku.baidu.co
[单片机]
C51---4.1 静态数码管显示
数码管引脚定义 原理图 74HC138 通过74HC138译码器的 P2_2 P2_3 P2_4 控制LED1-LED8 输出0为选中 例如 P2_2=1//低位 P2_3=0 P2_4=1//高位 101十进制为5 则第5位为有效 并且低电平有效。数码管为共阴极连接,所以LED5被选中 通过74HC138译码器选择LED 74HC245 74HC245为双向数据缓冲器 OE为低电平有效,芯片使能 A0-A7 与 B0-B7一一相连 DIR控制方向选择,高电平方向为A0- B0,低电平方向为B0- A0 代码 思路:通过74HC138选择LED1-8中的数码管,例如选择LED6 ,则控制 P
[单片机]
单片机驱动数码管显示设计
数码管是非常常见的东西,他能显示数字,以及字母,应用非常的广泛,本文我来和大家谈谈如何用单片机来驱动数码管 数码管的结构 数码管由7个发光二极管组成,行成一个日字形,它门可以共阴极,也可以共阳极.通过解码电路得到的数码接通相应的发光二极而形成相应的字,这就是它的工作原理.
基本的半导体数码管是由7个条状的发光二极管(LED)按图1所示排列而成的,可实现数字"0~9"及少量字符的显示。另外为了显示小数点,增加了1个点状的发光二极管,因此数码管就由8个LED组成,我们分别把这些发光二极管命名为 "a,b,c,d,e,f,g,dp",排列顺序如下图1。
图1: 数码管引脚图及外形图
数码管的分类 数码管按各发光二极管
[单片机]
采用51单片机的共阳数码管流动显示数据实现
本程序是采用51单片机实现共阳数码管流动显示数据,蛮好看的,所以把程序写出来和大家一起分享一下!! 电路图在下面 下面是汇编程序代码: D0 BIT P2.0 D1 BIT P2.1 D2 BIT P2.2 D3 BIT P2.3 D4 BIT P2.5 ORG 0000H SJMP START ORG 0040H START:MOV SP,#60H MOV R0,#00H MOV R1,#20 MOV DPTR,#TABLE SETB D4 MOV A,R0 MOVC A,@A+DPTR //1 MOV P0,A CLR D0 LCALL DELAY MOV R
[单片机]
数码管显示 0-9999计数器
;=========================================== 四位显示器,是可以显示0000~9999的,但是在设计工程实际的产品时,前三个0,是不应该显示的。 一个成熟的程序,都应该有消除无效0的程序段。 消除无效0,其实就是用“空白”的代码来代替“0”。 在程序中,大家都知道有个七段码表,一般是把0123...的七段码依次排列在里面,那么第0~15个,通常就是0~F的七段码。 如果把“空白”七段码FFH,排在第16个位置,那么“空白”的代码就是16。 消除无效0的程序,应该从高位到低位(千位、百位、十位)依次判断,个位的0,是应该显示的,则不用判断。 某一位是0,就替换为16,如果不是0,不仅不用替
[单片机]
8255数码管显示线路
本内容提供了8255数码管显示电路图 8255数码管显示效果图
[电源管理]