基于89c51单片机8位数码管时间温度程序

基于89c51单片机8位数码管时间温度程序,第1张

译码用74ls138,我用了4位,显示两位小数

#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}//不带小数点uchar code table2[]= {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}//带小数点uchar id[8]sbit DQ=P1^3sbit led2=P1^1sbit led=P1^0sbit led3=P1^4sbit beep=P1^5uint tempuchar l,h,ttuchar a1,a2,a3,a4,bzvoid delay(uchar r) //2微妙延时{ uchar ifor( i=0i<ri++)}

void sjzh(){ a1=temp/1000a2=temp%1000/100a3=temp%100/10a4=temp%10}void display(){ sjzh()if(bz==5) { P0=0x40P2=0delay(5)P0=table[a2]P2=1delay(5)}else { P0=table[a1]P2=0delay(2)} P0=table2[a2]P2=1delay(2)P0=table[a3]P2=2delay(2)P0=table[a4]P2=3delay(2)

} void init() //18b20复位{ DQ=0delay(240)DQ=1 delay(20)}void write(uchar dat)//写字节 { uchar i display() for(i=0i<8i++) { DQ=0 DQ=dat&0x01delay(10) DQ=1 dat>>=1delay(10) } display()}uchar read() //读一字节{ uchar i,dat=0for(i=8i>0i--) { DQ=0 dat=dat>>1 DQ=1 if(DQ) {dat|=0x80} delay(10)} display()return dat}void wdzh() //温度转换{init()write(0xcc)write(0x44)init()write(0xcc)write(0xbe)l=read()h=read()if(h&0xf0)// 判断负温度 { bz=1 led3=0 temp=h temp=((~((temp<<8)|l))+1)*6.25+0.5} else//否则正温度 { temp=h led3=1 temp=((temp<<8)|l)*6.25+0.5 if(temp>(23000+0.5)) {led=0 } else led=1 bz=0 if(temp<(20000+0.5)) led2=0else led2=1} }

void main(){ while(1) {display() wdzh()}}

#include <REGX52.H>

#include <stdio.h>

#include "LCD1602.h"

#include "DS1302.h"

sbit DQ=P3^0//ds18b20 端口

unsigned int ReadTemperature(void)

bit Init_DS18B20(void)

unsigned char ReadOneChar(void)

void WriteOneChar(unsigned char dat)

void DelayUs2x(unsigned char)

void Delay1ms(unsigned int)

/*-----------------------------------------------

  名称:18B20温度传感器

  网站:www.doflye.net

  编写:shifang

  日期:2009.5

  修改:无

  内容:18B20单线温度检测的应用样例程序

------------------------------------------------*/

/*-----------------------------------------------

                    18b20初始化

------------------------------------------------*/

bit Init_DS18B20(void)

{

 bit dat=0

 DQ = 1    //DQ复位

 DelayUs2x(5)   //稍做延时

 DQ = 0         //单片机将DQ拉低

 DelayUs2x(200) //精确延时 大于 480us 小于960us

 DelayUs2x(200)

 DQ = 1        //拉高总线

 DelayUs2x(50) //15~60us 后 接收60-240us的存在脉冲

 dat=DQ        //如果x=0则初始化成功, x=1则初始化失败

 DelayUs2x(25) //稍作延时返回

 return dat

}

void DelayUs2x(unsigned char t)

{   

 while(--t)

}

/*------------------------------------------------

                    读取一个字节

------------------------------------------------*/

unsigned char ReadOneChar(void)

{

unsigned char i=0

unsigned char dat = 0

for (i=8i>0i--)

 {

  DQ = 0 // 给脉冲信号

  dat>>=1

  DQ = 1 // 给脉冲信号

  if(DQ)

   dat|=0x80

  DelayUs2x(25)

 }

 return(dat)

}

/*------------------------------------------------

                    写入一个字节

------------------------------------------------*/

void WriteOneChar(unsigned char dat)

{

 unsigned char i=0

 for (i=8 i>0 i--)

 {

  DQ = 0

  DQ = dat&0x01

  DelayUs2x(25)

  DQ = 1

  dat>>=1

 }

DelayUs2x(25)

}

/*------------------------------------------------

                    读取温度

------------------------------------------------*/

unsigned int ReadTemperature(void)

{

unsigned char a=0

unsigned int b=0

unsigned int t=0

Init_DS18B20()

WriteOneChar(0xCC) // 跳过读序号列号的 *** 作

WriteOneChar(0x44) // 启动温度转换

Delay1ms(10)

Init_DS18B20()

WriteOneChar(0xCC) //跳过读序号列号的 *** 作 

WriteOneChar(0xBE) //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

a=ReadOneChar()   //低位

b=ReadOneChar()   //高位

b<<=8

t=a+b

return(t)

}

void Delay1ms(unsigned int count)

{

unsigned int i,j

for(i=0i<counti++)

for(j=0j<120j++)

}

main()

{

SYSTEMTIME CurrentTime

int temp

float temperature

unsigned char dist[4]

LCD_Initial()

Initial_DS1302()

Init_DS18B20()

GotoXY(14,0)

Print(".")

GotoXY(15,1)

Print("C")

while(1)

{

DS1302_GetTime(&CurrentTime)

TimeToStr(&CurrentTime)

DateToStr(&CurrentTime)

GotoXY(0,0)Print("20")

GotoXY(2,0)

Print(CurrentTime.DateString)

GotoXY(0,1)

Print(CurrentTime.TimeString)

temp=ReadTemperature()

temperature=(float)temp*0.0625

sprintf(dist,"%4f",temperature)

GotoXY(9,1)

Print(dist)

Delay1ms(400)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11463381.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存