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

基于单片机的信号选择与温度变化

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,采用DS18B20检测温度,通过三种LED灯代表不同状态。

采用DAC0832显示信号脉冲,通过8位数码管显示温度。

信号脉冲可以根据两个按键分别调整为正弦或者方波。

频率与温度成正比。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程


#include <reg51.h>  //定义头文件
#include "DS18B20.h"
#include "stdio.h"
#include "Seg.h"
#include <data.h>
#define dataout P3  #define uchar unsigned char   
#define uint unsigned int   unsigned char pos = 0;//用于数码管显示第几位
unsigned char Seg_Buf[8] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};数码管段码显示
unsigned char Seg_String[8];/数码管位码显示
unsigned int  ms_Tick;
unsigned int Temperature;//设置温度变量
unsigned int  led1_Tick = 0;//led1计数
unsigned int  led2_Tick = 0;//led2计数
unsigned int  led3_Tick = 0;//led3计数
unsigned int  beep_Tick = 0;//beep计数uchar fre[5] ="001Hz";
uint data THHL=65536-3906;
uchar data keyword,n=0;   
uchar data Signal_chose = 0; 
uchar data div = 1;
sbit led1=P1^0;   //led1灯定义引脚
sbit led2=P1^1;   //led2灯定义引脚
sbit led3=P1^2;   //led3灯定义引脚sbit beep = P1^6;	 //定义蜂鸣器的引脚
sbit key1 = P1^3;
sbit key2 = P1^4;extern low_temperature=30;///全局变量设置低温度
extern hight_temperature=50;/全局变量设置高温度static int flag=0;void Timer0Init(void)		//5微秒@12.000MHz
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0x88;		//设置定时初值TH0 = 0xFF;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0 =1;EA = 1;
}
void init()	//初始化 
{   dataout=0x00;THHL=65536-3906;  ///初始频率为1HzTH1=THHL/256;TL1=THHL%256;   TMOD=0x11;ET1=1;TR1=1;EA=1;   
}   void beep_Proc(void) /蜂鸣器报警函数
{if(beep_Tick==100){beep=1;}if(beep_Tick==220){beep=0;beep_Tick=0;}}void led1_Proc(void) /led1灯闪烁函数
{if(led1_Tick==250)	{led1=1;}if(led1_Tick==500){led1=0;led1_Tick=0;}
}void led2_Proc(void) /led2灯闪烁函数
{if(led2_Tick==80)	{led2=1;}if(led2_Tick==200){led2=0;led2_Tick=0;}
}void led3_Proc(void) /led3灯闪烁函数
{if(led3_Tick==160)	{led3=1;}if(led3_Tick==400){led3=0;led3_Tick=0;}
}void keyscan()   
{    if(!key1){flag = 1;while(!key1);}if(!key2){flag = 2;while(!key2);}div = Temperature/2.0;if(div<=0){div = 1;}THHL=65536-3906/div;switch(flag){case 62: {if(div>=100) THHL=65536-39; else {div++;THHL=65536-3906/div;}//频率upfre[0]=div/100 + '0';fre[1]=div/10%10 + '0';fre[2]=div%10 + '0';TR1=1; break;}   case 61: {if(div<=1) THHL=65536-3906; else {div--;THHL=65536-3906/div;}//频率down}   			case 1: {Signal_chose=0;TR1=0;TR1=1; break;}  	//正弦波case 2: {Signal_chose=1;TR1=0;TR1=1; break;}		//方波}}   void Key_Proc(void)   
{sprintf(Seg_String,"%2d      ",(unsigned int)Temperature);//通过printf把温度的打印到数码管显示的数组里Seg_Tran(Seg_String,Seg_Buf);数码管显示函数
}void main(void)
{Timer0Init();Temperature = (unsigned int)ReadTemperature();/DS18B20温度检测,把温度的值直接给TemperatureDelay100ms();beep =0;init();while(1){keyscan(); switch(Signal_chose)   {   case 0: {dataout=sin_tab[n]; break;}  //正弦波case 1: {dataout=squ_tab[n]; break;}  //方波default:{break;}   }   		if(Temperature < low_temperature)///将Temperature和设置的温度来进行比较{led1_Tick++;led1_Proc();led2 = 0;///led2灯灭led3 = 0;///led3灯灭beep=0;}if(Temperature<hight_temperature&&Temperature>low_temperature){led3_Tick++;led3_Proc();led2 = 0;///led2灯灭led1 = 0;///led3灯灭beep=0;}if(Temperature>hight_temperature){led2_Tick++;led2_Proc();led1 = 0;///led1灯灭led3 = 0;///led3灯灭beep_Tick++;beep_Proc();}Key_Proc();//ms_Tick++;if(((ms_Tick % 50) == 0)){EA = 0;Temperature = (unsigned int)ReadTemperature();EA = 1;}}
}void time_intt1(void) interrupt 3   
{   TL1=THHL%256;TH1=THHL/256;   n++;
}   
void Timer0(void) interrupt 1				
{TL0 = 0x20;		//设置定时初值TH0 = 0xf1;		//设置定时初值if(++pos == 8)pos = 0;从第一位数码管来进行显示Seg_Disp(Seg_Buf,pos);}

四、实现现象

具体动态效果看B站演示视频:

基于单片机的信号选择与温度变化

全部资料(源程序、仿真文件、安装包、演示视频):

百度网盘资料下载icon-default.png?t=O83Ahttps://pan.baidu.com/s/1EBYR-K9DWYQ4wROr5oqfNg?pwd=gqo9


http://www.mrgr.cn/news/44630.html

相关文章:

  • 每日一题|871. 最低加油次数|动态规划、内层逆序遍历
  • Yocto - 使用Yocto开发嵌入式Linux系统_08 掌握软件包相关功能
  • MySQL/MariaDB如何实现数据透视表
  • 基于MindSpore的恶性皮肤肿瘤识别
  • 【java】数据类型与变量以及操作符
  • ChatGLM 微调复现
  • 【大数据】Flink CDC 实时同步mysql数据
  • 【Python进阶】Python中的操作系统接口:使用os模块进行系统调用
  • 自然语言处理:第五十一章 LangChain面经
  • RGB转HDMI方案——FPGA学习笔记20
  • 运用MinIO技术服务器实现文件上传——利用程序上传图片(二 )
  • 小乐乐与欧几里得
  • 不信?这4款在线剪辑工具,让音频作品秒变专业级
  • 进程间通信——《匿名管道》
  • Nuxt.js 应用中的 link:prefetch 钩子详解
  • 医院管理智能化:Spring Boot技术革新
  • 攻防世界 告诉你个秘密
  • 黑马JavaWeb开发跟学(十二)SpringBootWeb案例
  • EventSource是什么,和axios区别,以及SSE是什么
  • C++ : STL容器之string剖析