51单片机实现电脑散热器仿真

news/2025/1/15 23:59:54/

源代码:

#include"reg51.h"#define uchar unsigned char 
#define uint unsigned intsbit DQ=P3^6;        //温度数据口
sbit wx1=P1^0;       //位选1
sbit wx2=P1^1;       //位选2
sbit wx3=P1^2;       //位选3
sbit wx4=P1^3;       //位选4
sbit start=P3^0;
sbit increase=P3^1;
sbit decrease=P3^2;
sbit  motor=P1^5;
uchar wflag;
uchar stopflag;
uchar count=26;unsigned int temp, temp1,temp2, xs;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,                //共阳数码管0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};/******延时程序*******/ 
void delay1(unsigned int m){unsigned int i,j;for(i=m;i>0;i--)for(j=50;j>0;j--);}void delay(unsigned int m)     //温度延时程序{while(m--);}void Init_DS18B20()  
{
unsigned char x=0;
DQ = 1;          //DQ复位 ds18b20通信端口 
delay(8); //稍做延时
DQ = 0;          //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1;          //拉高总线   
delay(4);
x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(20);
}/* ds18b20读一个字节*/
uchar ReadOneChar()
{
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);
}//ds18b20写一个字节 
void WriteOneChar(unsigned char dat)
{unsigned char i=0;for (i=8; i>0; i--){DQ = 0; //从高电平拉至低电平时,写周期的开始DQ = dat&0x01;   //数据的最低位先写入delay(5); //60us到120us延时DQ = 1;        dat>>=1; //从最低位到最高位传入
}
}// 读取ds18b20当前温度 
void ReadTemperature(){unsigned char a=0;unsigned  b=0;unsigned  t=0;Init_DS18B20();WriteOneChar(0xCC);    // 跳过读序号列号的操作/WriteOneChar(0x44); // 启动温度转换 delay(5);       // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度/ delay(5);a=ReadOneChar();    //读取温度值低位  /b=ReadOneChar();      //读取温度值高位    / temp1=b<<4;            //高8位中后三位数的值 temp1+=(a&0xf0)>>4;      //低8位中的高4位值加上高8位中后三位数的值   temp1室温整数值temp2=a&0x0f;             //小数的值temp=((b*256+a)>>4);    //当前采集温度值除16得 实际温度值    zhenshu    xs=temp2*0.0625*10; //小数位,若为0.5则算为5来显示   xs小数    xiaoshu}void tempreature_display(){wx1=1;P2=table[temp/10];             //显示百位delay1(5);wx1=0;wx2=1;P2=table[temp%10]+0x80;      //显示十位        加上0x80就显示小数点了。delay1(5);wx2=0;wx3=1;P2=table[xs%10];      //显示个位   delay1(5);wx3=0;wx4=1;P2=table[12];          //显示 C 字符delay1(5);wx4=0;}void setdisplay(){wx1=1;P2=table[count/10];             //显示百位delay1(5);wx1=0;wx2=1;P2=table[count%10]+0x80;      //显示十位        加上0x80就显示小数点了。delay1(5);wx2=0;wx3=1;P2=table[0];      //显示个位   delay1(5);wx3=0;wx4=1;P2=table[12];          //显示 C 字符delay1(5);wx4=0;}void temperatureset()
{ uchar a=1;if(start==0){delay(4);if(start==0)a=0;while(!start);}delay(4);while(!a){ if(increase==0){  delay(4);if(increase==0)count++;while(!increase);}if(decrease==0){delay(4);if(decrease==0)
count--;
while(!decrease);}setdisplay();if(start==0){delay(4);if(start==0)a=1;while(!start);}}}void motor_contorl(){ /*if(temp<18){wflag=1;stopflag=0 ;}
else if(temp>28){wflag=0;
stopflag=0 ;
}
*///else if(temp<count)if(temp<count){wflag=1;
stopflag=0 ;
}
else  if(temp>count){wflag=0;
stopflag=0 ;
}else  if(temp==count)stopflag=1;if(stopflag==1)
{motor=0;
}else if(wflag!=1){motor=1;
}}void main(){ while(1){    temperatureset();motor_contorl();ReadTemperature();tempreature_display();}
}

代码说明:

DS18B20的温度采集和温度显示是两个重要的部分。

第一部分:DS18B20温度传感器温度采集。具体介绍看相关资料,比较简单,这里就不详细说明。相关的功能函数:

void Init_DS18B20()   //初始化DS18B20

uchar ReadOneChar() //读一个字节

void WriteOneChar(unsigned char dat) //写一个字节

void ReadTemperature() //读取当前的温度

第二部分:

 void setdisplay() //设置风扇开始散热的温度值

void tempreature_display() //相应的温度在数码管上显示

Protues仿真图:

 

 


http://www.ppmy.cn/news/170531.html

相关文章

台式电脑散热器的计算机选择,老司机教你电脑散热器怎么选择

大家在选择电脑硬件的时候&#xff0c;都会选择投入大量的金钱精力花在CPU、显卡、内存条等这上面。往往将散热器给忽略掉了&#xff0c;小伙伴们&#xff0c;如果你们认为散热器不重要的话&#xff0c;那么你们就错了&#xff0c;散热器不仅能降低电脑的温度&#xff0c;而且还…

【P1115 最大子段和+Kadane算法】

最大子段和 题目描述 给出一个长度为 n n n 的序列 a a a&#xff0c;选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数&#xff0c;表示序列的长度 n n n。 第二行有 n n n 个整数&#xff0c;第 i i i 个整数表示序列的第 i i i 个数字 a i …

IBM X3500 M4服务器网卡驱动

今天公司安排IBM的x3650M4老服务器装系统&#xff0c;系统安装&#xff0c;比较简单&#xff0c;装完了&#xff0c;结果网卡装了半天装不上&#xff0c;后来借别人的号下载这个机器的网卡驱动&#xff0c;提取码&#xff1a;w5b6&#xff0c;顺利上网。 转载于:https://www.cn…

windows server 2008小结-无线网卡

因为要安装Dynamics AX,需要使用Windows server 2008。 之前对windows server 2003有一点点了解。本以为差别不算太大&#xff0c;没想到安装的过程让我郁闷。 在自己的笔记本上&#xff08;联想V450&#xff09;上装双系统。win7和server08.server08安装完成后&#xff0c;一看…

Intel Realsense D435iL515 驱动安装

Intel Realsense D435i&L515 驱动安装 0.引言1.D435i&L515固件更新1.1.D435i固件更新1.2.L515固件更新 2.Intel Realsense驱动安装3.ROS Wrapper Install 0.引言 由于以前装过驱动&#xff0c;再次安装可能涉及到一些固件与驱动的更新&#xff0c;以此文记录。 1.D43…

Visual Studio 2015配置OpenCV4.5.3(c++版)

学习目标 学会在Visual Studio 2015部署Opencv 一个简单的C Opencv实例 一、 Visual Studio 2015配置Opencv4.5.3 1.1 Visual Studio 2015 网上关于Visual Studio 2015的下载&#xff0c;也有很多介绍。大家自行搜索安装。 1.2 OpenCV OpenCV大家根据需求下载相应版本&#xff…

eclipse安装maven、创建web工程

1、安装maven http://maven.apache.org/download.html 下载3.0.4版本tar.gz&#xff0c;并按照该页的安装说明安装。 2、安装eclipse maven插件 在eclipse for jee中安装maven插件 在Window->Preferences->Install/Update->Available Software Sites中添加Mave…

nginx报错400

当Nginx返回400错误时&#xff0c;通常是因为客户端发送的请求不符合服务器的要求或不完整&#xff0c;因此服务器无法正确处理请求。 要解决这个问题&#xff0c;你可以采取以下步骤&#xff1a; 检查请求的URL是否正确&#xff1a;确保请求的URL与服务器上的配置匹配。 检查请…