济南网站的优化,宿迁建站网,wordpress 搬迁,房屋建筑学课程设计图纸目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象 一、主要功能
基于51单片机#xff0c;采用DS18B20检测温度#xff0c;通过三种LED灯代表不同状态。
采用DAC0832显示信号脉冲#xff0c;通过8位数码管显示温度。
信号脉冲可以根据两个按键分别调整为正弦…目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象 一、主要功能
基于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 THHL65536-3906;
uchar data keyword,n0;
uchar data Signal_chose 0;
uchar data div 1;
sbit led1P1^0; //led1灯定义引脚sbit led2P1^1; //led2灯定义引脚sbit led3P1^2; //led3灯定义引脚sbit beep P1^6; //定义蜂鸣器的引脚sbit key1 P1^3;
sbit key2 P1^4;extern low\_temperature30;///全局变量设置低温度extern hight\_temperature50;/全局变量设置高温度static int flag0;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() //初始化 { dataout0x00;THHL65536-3906; ///初始频率为1HzTH1THHL/256;TL1THHL%256; TMOD0x11;ET11;TR11;EA1;
} void beep\_Proc(void) /蜂鸣器报警函数{ if(beep\_Tick100){beep1;} if(beep_Tick220){beep0;beep_Tick0;}}void led1\_Proc(void) /led1灯闪烁函数{ if(led1\_Tick250) {led11;} if(led1_Tick500){led10;led1_Tick0;}
}void led2\_Proc(void) /led2灯闪烁函数{ if(led2\_Tick80) {led21;} if(led2_Tick200){led20;led2_Tick0;}
}void led3\_Proc(void) /led3灯闪烁函数{ if(led3\_Tick160) {led31;} if(led3_Tick400){led30;led3_Tick0;}
}void keyscan() { if(!key1){flag 1; while(!key1);} if(!key2){flag 2; while(!key2);}div Temperature/2.0; if(div0){div 1;}THHL65536-3906/div; switch(flag){ case 62: { if(div100) THHL65536-39; else {div;THHL65536-3906/div;}//频率upfre\[0\]div/100 0;fre\[1\]div/10%10 0;fre\[2\]div%10 0;TR11; break;} case 61: { if(div1) THHL65536-3906; else {div--;THHL65536-3906/div;}//频率down} case 1: {Signal_chose0;TR10;TR11; break;} //正弦波case 2: {Signal_chose1;TR10;TR11; 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: {dataoutsin_tab\[n\]; break;} //正弦波case 1: {dataoutsqu_tab\[n\]; break;} //方波default:{break;} } if(Temperature low_temperature)///将Temperature和设置的温度来进行比较{led1\_Tick; led1\_Proc();led2 0;///led2灯灭led3 0;///led3灯灭beep0;} if(Temperaturehight\_temperatureTemperaturelow\_temperature){led3\_Tick; led3\_Proc();led2 0;///led2灯灭led1 0;///led3灯灭beep0;} if(Temperaturehight_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
{ TL1THHL%256;TH1THHL/256; n;
}
void Timer0(void) interrupt 1
{TL0 0x20; //设置定时初值TH0 0xf1; //设置定时初值if(pos 8)pos 0;从第一位数码管来进行显示Seg\_Disp(Seg\_Buf,pos);}四、实现现象
具体动态效果看B站演示视频
B站演示视频
基于单片机的信号选择与温度变化
全部资料源程序、仿真文件、安装包、演示视频
百度网盘资料下载3Apos_idimg-5prTl0IU-1733102967688)https://pan.baidu.com/s/1EBYR-K9DWYQ4wROr5oqfNg?pwdgqo9