显示有点闪烁

代码片.

// An highlighted block
#include<reg52.h>//包含51单片机内部寄存器头文件
#define uchar unsigned char// 自定义uchar为unsigned char(即无符号字符型数据,数据范围:0到255。)
#define uint unsigned int//自定义uint为unsigned int(即无符号字符整数型数据,数据范围:0到6355。)
uchar code table0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; //共阴数码管字码表
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};  //个位带数点字码表
uchar code Wei[]={0xfe,0xfd,0xfb,0xf7};//数码管位数码表
//uchar Display_data[4];//显示数据数组
unsigned int  Temperature_value;//温度值uint bai,shi,ge,xiaoshu;//温度值
unsigned char Temperature_flag;//温度负标志
sbit DQ = P2^3;//DS18B20数据信号端口
sbit Buzzer = P2^4;//蜂鸣器报警端口
sbit KEY1 = P2^0; //
sbit KEY2 = P2^1; //
sbit KEY3 = P2^2; //
int Key_Flag = 0;
char Buzzer_Flag = 0;
unsigned int High_TEMP_SET = 40;//温度上限
unsigned int Low_TEMP_SET = 20;//温度下限
unsigned int Temp_Buffer = 0;
int bai,shi,ge,xiaoshu;
char TEM_Flag = 0;
void Display(unsigned int Temperature_value);
/*DS18B20的延时函数*/
void DS18B20_Delay(uint i)
{ while(i--); }
/*DS18B20的初始化函数*/
void DS18B20_Init()
{ unsigned char x=0; DQ = 1;//DS18B20数据信号端口DQ复位 DS18B20_Delay(4);             DQ = 0;//DS18B20数据信号端口DQ拉低 DS18B20_Delay(100);//精确延于480us DQ = 1;//DS18B20数据信号端口拉高 DS18B20_Delay(40);}
/*DS18B20读一个字节函数*/
uchar DS18B20_ReadOneByte()
{ unsigned char i=0; unsigned char j=0; for (i=8;i>0;i--){DQ = 0;//给脉冲信号     j>>=1;DQ = 1;//给脉冲信号     if(DQ)  j|=0x80;     DS18B20_Delay(10); } return(j);}
/*DS18B20写一个字节函数*/
void DS18B20_WriteOneByte(uchar k)
{unsigned char i=0;     for (i=8; i>0; i--)//向DS18B20数据信号端口DQ写入数据8次{DQ = 0;//DS18B20数据信号端口DQ置低电平DQ = k&0x01;//按从低位到高位的顺序向DS18B20数据信号端口DQ发送字节(一次只发送一位)DS18B20_Delay(10);      DQ = 1;//DS18B20数据信号端口DQ置高电平k>>=1;//重复以上的操作,直到所有的字节全部发送完为止。}}  /*单片机读取DS18B20当前温度的函数*/
void DS18B20_ReadTemperature()
{unsigned char a,b; DS18B20_Init();//DS18B20初始化DS18B20_WriteOneByte(0xcc);//跳读序列号DS18B20_WriteOneByte(0x44);//启温度转换 DS18B20_Init();//DS18B20初始化DS18B20_WriteOneByte(0xcc);//跳读序列号 DS18B20_WriteOneByte(0xbe);//读取温度a=DS18B20_ReadOneByte();//读取到的第一个字节为温度LS BYTEb=DS18B20_ReadOneByte();//读取到的第一个字节为温度MS BYTETemperature_value=b;//先把高八位有效数据赋于TemperatureTemperature_value<<=8; Temperature_value=Temperature_value|a;if(Temperature_value<0x0fff)Temperature_flag=0;else{Temperature_value=~Temperature_value+2; Temperature_flag=1;//负温度  }Temperature_value=Temperature_value*(0.625);//温度值扩大10倍,并精确到1位数。   }
/*DS18B20所测温度值显示函数*/
void Display(unsigned int value)
{unsigned char i;int bai,shi,ge,xiaoshu;      bai=value/1000;//百位数   shi=value%1000/100;//十位数 ge=value%100/10;//个位数xiaoshu=value%10;//小数位if(Temperature_flag==0){if(bai==0x00){bai=0x00;//百位数的0显示    if(shi==0x00)  shi=0x00;//十位数的0显示    }}else //负温度 {   bai=0x0b;//负温度百位显示负号:-if(shi==0x00)  shi=0x00;//十位数的0显示    }for(i=0;i<20;i++){P3=Wei[0];P0=table0[bai];//百位DS18B20_Delay(30); P3=Wei[1];P0=table0[shi];//十位  DS18B20_Delay(20);   P3=Wei[2];P0=table1[ge];//个位DS18B20_Delay(30);  P3=Wei[3];     P0=table0[xiaoshu];//小数位  DS18B20_Delay(30);      }
}
/*蜂鸣器程序*/
void Buzzer_Di()
{unsigned char i;for(i = 0;i<20;i++){DS18B20_Delay(50);Buzzer = !Buzzer; }   Buzzer = 0;
}
/*按键扫描程序*/
void Scan_Key()
{   if( KEY1 == 0 )                       //按键1扫描{DS18B20_Delay(10);                  //延时去抖if( KEY1 == 0 ){            Key_Flag = 1;High_TEMP_SET = High_TEMP_SET + 1;          while(KEY1 == 0);         //等待松手}}if( KEY2 == 0 )                       //按键2扫描{DS18B20_Delay(10);                  //延时去抖if( KEY2 == 0 ){Key_Flag = 2;Low_TEMP_SET = Low_TEMP_SET - 1;         while(KEY2 == 0);         //等待松手}}if( KEY3 == 0 )                       //按键2扫描{DS18B20_Delay(10);                  //延时去抖if( KEY3 == 0 ){TEM_Flag = ~TEM_Flag;          while(KEY3 == 0);         //等待松手}}
}
/*主函数*/
void main()
{int value;DS18B20_Init();//DS18B20初始化显示while(1){   DS18B20_ReadTemperature();//单片机读取DS18B20当前温度       Scan_Key();//按键扫描        value = Temperature_value*0.1;if(Key_Flag == 0||TEM_Flag == 0)Display(Temperature_value);  if(TEM_Flag){if( value >= High_TEMP_SET || value <= Low_TEMP_SET)Buzzer_Di();                           //报警    if(Key_Flag == 1)Display(High_TEMP_SET*10);       if(Key_Flag == 2)Display(Low_TEMP_SET*10);            }}
}

DS18B20+数码管显示相关推荐

  1. 51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真

    51单片机+DS18B20+数码管显示+串口通讯+Proteus仿真 本实验通过51单片机读取DS18B20温度传感器的温度,然后通过数码管显示,并通过串口,将读取到的温度数据发送出去. 本案例需要使 ...

  2. DS18B20读取温度并显示在数码管上

    下面是我的函数 分3个文件:头文件,DS18B20系列子函数文件,主函数部分(既数据处理和显示部分) 头文件 #ifndef __TEMP_H_ #define __TEMP_H_#include&l ...

  3. 基于FPGA的DS18B20温度测量以及数码管显示

    这是我在CSDN的第一篇文章,如果文章排版不好或者存在其它的一些问题,希望大家海涵. FPGA与各器件的连接如图所示: dq为DS18B20的单总线 dtube_cs_n为数码管的4位 dtube_d ...

  4. 51单片机DS18B20测温数码管显示例程(Proteus仿真+程序)

    编号:19 51单片机DS18B20测温数码管显示例程 功能描述: 本设计由STM32单片机+DS18B20温度传感器+四段数码管显示模块组成. 1.主控制器是51单片机 2.DS18B20温度传感器 ...

  5. DS18B20测温与数码管显示

    原本要写一篇DS18B20测温LCD1602显示的实验,应关注者的要求先写了一篇DS18B20测温与数码管显示的实验.DS18B20测温与数码管显示是通过51单片机读取DS18B20的温度值,然后实时 ...

  6. Protues 基于51单片机的DS18B20温度采集:键盘输入温度上下限_超出设定温度范围报警_8数码管显示

    功能实现: 1.设计单片机与16按键的矩阵式键盘接口以及8数码管的接口电路,测试显示和按键功能. 2.设计单片机与DS18B20的接口电路,实现数字温度信息的采集,然后编程处理采集到的数据,得到温度值 ...

  7. c语言数码管显示小数点,8位数码管显示正整数和小数及解决鬼影问题

    写的不知道好不好,有什么不对的地方还请指出,谢了. 正整数显示无异常,小数显示有点异常(小数会有精度问题,后面在处理,先给大家贴出来代码). 本次,使用了数组用来存放要显示的数值. 用单独的数码管显示 ...

  8. 基于51单片机的温度控制系统数码管显示蜂鸣器报警proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统实时监测并显示当前温度,并通过四位数码管显示 2.超过设定阈值,蜂鸣器将报警,同时控制相应继电器实现降温或者加热 3.系统具备三个功能按键,可 ...

  9. 基于串口通信技术——让数码管显示的数据发送给电脑,电脑控制单片机外设——15单片机

    目录 1.使用的单片机为IAPI15F2K61S2 2.使用的外设 3.各个外设的作用 1.数码管功能 2.LED灯 3.蜂鸣器与继电器 4.按键 5.串口通信 4.利用发送单个字符函数 发送字符型的 ...

最新文章

  1. Spring MVC原理
  2. buu [BJDCTF 2nd]签到-y1ng
  3. 【编程】基本程序设计模式
  4. CVPR2019 | 弱监督图像分类建模
  5. 微信开发 Java SDK
  6. 鸽了!华米科技智能手表部分款将推迟开售 工艺太复杂了
  7. jquery背景动画插件使用
  8. 联想微型计算机设置键盘开机,联想台式机怎么样设置键盘开机
  9. Mobile-Former: Bridging MobileNet and Transformer 新的网络结构
  10. 英尺、英寸、磅和厘米的换算
  11. MySQL高级部分理论知识细讲
  12. kali2019安装netspeed教程
  13. 【109期分享】4款毕业答辩论文PPT模板免费下载
  14. python爬虫获取携程旅游景点评分和评论
  15. 最强国产开源电子表格-Luckysheet,强势登顶Github trending第一名!
  16. IDAC(电流型DAC)的参数和性能测试
  17. 占带宽测试软件,铁通网速测试
  18. Auto.JS 教程(1)
  19. LevelDB的边边角角之一
  20. 你所说的到底是哪一种

热门文章

  1. 手机保护壳让手机信号变更差?
  2. Apple iPad
  3. Win10开始菜单打不开怎么办?
  4. 软件工程----UML建模
  5. 【得物技术】如何测试概率性事件 - 二项分布置信区间
  6. 淘宝直播怎么做,主播怎么做才能引流,卖出产品
  7. android 自定义圆形进度条拖动样式,android自定义圆形进度条
  8. 【心慈喜讯】“心”启航青少年心理健康支持项目成功入选广州市海珠区“慈泉杯”社会组织公益创投活动
  9. 甘超波:NLP检定语言模式
  10. R语言基础图形元素——多边形