当前位置: 首页 > news >正文

【51单片机】【protues仿真】基于51单片机数字温度计数码管系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示温度
2、按键​设置对应上下限阈值
3、高于阈值或低于阈值声光警报

二、使用步骤

基于51单片机的数字温度计数码管显示系统设计,主要包含温度采集、数据处理和动态显示三大模块。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、温度传感器
4、蜂鸣器模块
5、LED灯模块
6、数码管显示模块

四、软件设计

# include <reg51.h>  
#define uint unsigned int 
#define uchar unsigned char   //宏定义
#define Disdata P2      //段码输出口
#define discan  P0       //扫描口
sbit p34=P0^0; 
sbit p35=P0^1;
sbit p36=P0^2; 
sbit dp=P2^7; 
sbit p37=P0^3;
sbit DQ=P1^0;    //定义DS18B20总线I/O
sbit set=P1^6;    //定义选择报调整警温度上限和下限(1为上限,0为下限)
/****P1.4和P1.4为调整温度报警增加键和减少键******/
sbit SET=P3^2; 
sbit add=P1^4;
sbit dec=P1^5;
sbit led_red=P1^2;        //超过上限温度或低于下限温度,红灯亮·
sbit led_green=P1^3;        //温度在正常范围内,绿灯亮
sbit speaker=P3^5;   //定义响铃
int temp1;  
signed char m;     //温度值全局变量
 bit sign=0;     //外部中断状态标志 
 signed char shangxian=28;  //上限报警温度,默认值为38
 signed char xiaxian=25;   //下限报警温度,默认值为5
 uchar code  LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; /*****延时子程序*****/
 uchar code dis_7[12]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
 /*共阳LED段码表 "0","1","2","3","4","5","7","8","9","不亮","-"*/
 uchar code scan_con[4]={0xf1,0xF2,0xF4,0xF8};  //列扫描控制字
 uchar data temp_data[2]={0x00,0x00}; //读出温度暂存
 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据,其中一个作为运算暂存用
 void Delay(uint i)
 {  
 while( i-- );
 }
  /******************显示扫描函数**********************/
void scan()
 {
     char k;
    for(k=0;k<4;k++)       //循环扫描4个口,并显示
    {
    Disdata=dis_7[display[k]];
    if(k==1){dp=0;}
    discan=scan_con[k];
    Delay(65);
    discan=0xff;
    }
    
 }

void Init_DS18B20(void) 
{  
  unsigned char x=0;    
    DQ=1;    Delay(8);    //稍做延时 
   DQ=0;         //单片机将DQ拉低  
 Delay(80);   //精确延时,大于480us 
  DQ=1;         //拉高总线 
  Delay(14); 
   x=DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败  
 Delay(20);
 }  
 /***************18b20读一字节函数****************/
  unsigned char ReadOneChar(void) 
{   
 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); }  

 void WriteOneChar(unsigned char dat) 
{    unsigned char i=0; 
  for (i=8; i>0; i--) 
  { 
     DQ=0;   
   DQ=dat&0x01;  
   Delay(5);     
DQ=1;     dat>>=1; 
  }
 }  
void Tmpchange(void) //发送温度转换命令
 {  
  Init_DS18B20(); 
   WriteOneChar(0xCC);  //跳过读序号列号的操作  
 WriteOneChar(0x44);  //启动温度转
   }
unsigned int ReadTemperature(void)
 {   
 unsigned char a=0; 
  unsigned char b=0; 
  unsigned int t=0;  
 float tt=0;  
 Tmpchange();
   Init_DS18B20();  
  WriteOneChar(0xCC);  //跳过读序号列号的操作 
  WriteOneChar(0xBE);  //读取温度寄存器  
 a=ReadOneChar();     //读低8位 
  b=ReadOneChar();    //读高8位 
  t=b;   t<<=8;   t=t|a;    tt=t*0.0625;    t= tt*100+0.5;     //放大10倍输出并四舍五入 
  return(t); }     /*****显示开机初始化等待画面*****/
Disp_init()     {   
 P2 = 0x80;      //显示- 
 p34=1;p35=0;p36=0;p37=0;
 Delay(200); 
 P2 = 0x80;
   p34=0;p35=1;p36=0;p37=0; 
 Delay(200); 
  P2 = 0x80; 
    p34=0;p35=0;p36=1;p37=0; 
 Delay(200); 
  P2 = 0x80; 
   p34=0;p35=0;p36=0;p37=1; 
 Delay(200); 
  P2 = 0x80; 
  }

/*****主函数*****/
 void main(void)
 {   
  uint h;
  IT0=1;  
  IT1=1; 
  EX0=1; 
  EX1=1; 
  EA=1;
  for(h=0;h<4;h++)
    {
        display[h]=8;        //开机显示8888
    } 
  ReadTemperature(); 
  speaker=0;   
 for(h=0;h<500;h++)
    {
        scan();        //开机显示“8888”2s
}
 while(1)  
 {      
  if(temp1==0)
      {
        work_temp();
        beep();             //检测是否超过上限或低于下限
        keyscan();        //按键检测
        }
        else
        {
        keyscan();       //按键检测
        }    
 }
}
 

五、实验现象

演示视频:

http://www.dtcms.com/a/491392.html

相关文章:

  • 【Redis】缓存热点数据
  • 网站建设 无法打开asp青岛有没有做网站的
  • Playwright Fixture 实战:模拟数据库、API客户端与测试数据
  • wordpress分类栏目昆明排名seo公司
  • 海南蓝碳:生态财富与科技驱动的新未来
  • 济源网站建设哪家好网站开发命名规则
  • CentOS 7上Python3.10报错 No module named ‘_ssl‘
  • h5游戏免费下载:街头篮球
  • 南京百度网站建设南充市网站建设
  • 企业营销型网站建设哪家公司好企业新网站seo推广
  • 做驾校题目用什么网站好北京市注册公司流程最新
  • 订单系统单页面网站怎么做微信网页版登陆
  • Linux 查询目录下文件大小引发的内存溢出问题
  • 网站建设公司品牌长春网站快速排名提升
  • 江协科技STM32课程笔记(四)—定时器TIM(输入捕获)
  • 山西电力建设三公司网站整站seo需要多少钱
  • Spring Boot 布隆过滤器最佳实践指南
  • spring boot框架中本地缓存@Cacheable原理与踩坑点详细解析
  • 我的远程开发革命:从环境配置噩梦到一键共享的蜕变
  • PVZ植物大战僵尸全集版分享下载 原版民间修改版含安卓手机+电脑+ios各平台
  • 网站建设公司专业公司排名wordpress 活动报名
  • 网站建设预付网站后台制作教程
  • 免费游戏网站制作化妆品做网站流程
  • 系统架构设计师备考第43天——软件架构演化和定义
  • 【Java笔记】消息队列
  • 网络监控工具:ping、traceroute、nmap、Wireshark 网络探测与分析
  • sward安装与配置,3分钟即可完成
  • 佛山网站建设方案me微擎怎么做网站
  • 影响网站访问速度网站开发所需经费
  • HTML5基础——7、CSS选择器