基于51单片机车载空调系统设计proteus仿真+源程序)

一、系统方案
1、本设计采用这51单片机作为主控器。
2、DS18B20采集温度值送到液晶1602显示。
3、按键设置报警值。
4、温度控制风扇档位。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
/T0初始化*/
void init_t0()
{
//TMOD=0x01;//定时器0工作方式1
TH0=(65536-100)/256;//赋初值定时
TL0=(65536-100)%256;//0.01ms
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0

SCON = 0X50;  //UART方式1;8位UART
REN  = 1;     //允许串行口接收数据
PCON = 0x00;  //SMOD=0;波特率不加倍
TMOD = 0x21;  //T1方式2,用于产生波特率
TH1  = 0xFD;  //装初值
TL1  = 0xFD;
TR1  = 1;     //启动定时器1
EA   = 1;     //打开全局中断控制
ES   = 1;     //打开串行口中断	

}
2、液晶显示程序
/*******************************************************************
写命令
*****/
void xiemingling(unsigned char mingling)
{
en=0;
rs=0;
rw=0;
P0=mingling;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
/

写数据
*****/
void xieshuju(unsigned char shuju)
{
en=0;
rs=1;
rw=0;
P0=shuju;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
/

液晶初始化
******************************/
void chushihua()
{
en=0;
xiemingling(0x38);//设置16
2显示,5
7点阵,8位数据接口
delayxms(20);
xiemingling(0x0c);//设置开显示,不显示光标
delayxms(20);
xiemingling(0x06);//写一个字符后地址指针加1
delayxms(20);
xiemingling(0x01);//显示清零,数据指针清零
delayxms(20);
xiemingling(0x80);//指定字符显示的实际地址,,,显示位置的确定方法规定为"80H+地址码x"
delayxms(20);
}
/lcd1602上显示这字符函数
/
void write_string(uchar hang,uchar add,uchar p)
{
if(hang1)
xiemingling(0x80+add);
else
xiemingling(0x80+0x40+add);
while(1)
{
if(*p == ‘\0’) break;
xieshuju(p);
p++;
}
}
/lcd1602上显示2位十进制数
/
void write_num2(uchar hang,uchar add,uint date)
{
if(hang
1)
xiemingling(0x80+add);
else
xiemingling(0x80+0x40+add);
xieshuju(0x30+date/10);
xieshuju(0x30+date%10);
}
/lcd1602上显示1位十进制数
/
void write_num1(uchar hang,uchar add,uint date)
{
if(hang==1)
xiemingling(0x80+add);
else
xiemingling(0x80+0x40+add);
xieshuju(0x30+date%10);
}
3、DS18B20程序
/初始化
/
Init_DS18B20(void)
{
DQ = 1; //DQ复位
Delay(8); //稍做延时
DQ = 0; //将DQ拉低
Delay(90); //精确延时 大于 480us
DQ = 1; //拉高总线
Delay(8);
presence = DQ; //读取存在信号
Delay(100);
DQ = 1;
return(presence); //返回信号,0=presence,1= no presence
}
/读一位
/
uchar read_bit(void)
{
uchar i;
DQ = 0; //将DQ 拉低开始读时间隙
DQ = 1; // then return high
for (i=0; i<3; i++); // 延时15μs
return(DQ); // 返回 DQ 线上的电平值
}
/读一个字节
/
uchar ReadOneChar(void)
{
uchar i = 0;
uchar dat = 0;

for (i=0;i<8;i++)
{ // 读取字节,每次读取一个字节
if(read_bit())
dat|=0x01<<i; // 然后将其左移

Delay(4);

}
return (dat);
}
/写一位*************/
void write_bit(uchar bitval)
{
DQ = 0; // 将DQ 拉低开始写时间隙
if(bitval==1) DQ =1; // 如果写1,DQ 返回高电平
Delay(5); // 在时间隙内保持电平值,
DQ = 1; // Delay函数每次循环延时16μs,因此delay(5) = 104μs
}
/写一个字节*************/
void WriteOneChar(uchar dat)
{
uchar i = 0;
uchar temp;

for (i=0; i<8; i++) // 写入字节, 每次写入一位
{
temp = dat>>i;
temp &= 0x01;
write_bit(temp);
}
Delay(5);
}
/------------------------------------------------
单个DS18B20 读取温度
------------------------------------------------
/
int ReadTemperature()
{
uchar a;
uchar b;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delayxms(10);
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a = ReadOneChar(); //低位
b = ReadOneChar(); //高位
t = b;
t <<= 8;
t |= a;

	if(t < 0)		   //温度为负数{flag_temp = 1;t -= 1;t = ~t;t = t * 0.0625;//温度值扩大-倍,精确到-位小数}else{flag_temp = 0;  t = t * 0.0625;//温度值扩大-倍,精确到-位小数}return(t);

}
4、核心算法程序
if(number==0)
{
/根据温度控制档位/
if(t<alarm)
{
dangwei = 0;

				 PWM1=0;TR0=0;pwm(0); //控制PWM输出,进而控制电机的速度}else if(t<alarm+5) { dangwei = 1;TR0=1;pwm(20); //控制PWM输出,进而控制电机的速度} else if(t<alarm+10) {dangwei = 2;TR0=1;pwm(50); //控制PWM输出,进而控制电机的速度} else { dangwei = 3;TR0=1;pwm(99); //控制PWM输出,进而控制电机的速度}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库实验三 Sql多表查询和视图

数据库实验三 Sql多表查询和视图 一、Sql表二、在线练习 一、Sql表 www.db-book.com 二、在线练习 对所有表执行查询语句&#xff0c;查看有哪些数据。 select * from tableName; 一、执行以下查询语句&#xff0c;写出查询意图。 (1) select * from student,takes whe…

经典滑动窗口试题(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、将x减到0的最小操作数1、题目讲解2、讲解算法原理3、代码实现 二、无重复的最长子串1、题…

OpenCV数据类型及CV_16UC1深度图ros订阅

最近用到深度图,对其数据类型及显示有些迷惑,记笔记于此: 目录 一、cv::Mat 的数据类型及转换方式1. cv::Mat 数据类型2. cv::Mat 数据类型互转2.1 OpenCV数据类型转换的函数2.2 可视化深度图像(CV_16UC1)二、cv::Mat 与 sensor_msgs::msg::Image 互转(基于cv_bridge)1.…

黑臭水体的“黑”和“臭”形成的机理

水体“黑”和“臭”即呈现令人不悦的颜色和(或)散发令人不适气味的水体。由于水环境遭受超过其自净能力的有机污染&#xff0c;有机物的好氧分解使水体中耗氧速率大于复氧速率&#xff0c;造成水体缺氧&#xff0c;致使有机物降解不完全、速度减缓&#xff0c;厌氧生物降解过程…

mybatis 语法使用各种踩坑(持续更新中。。。)

1、大小写命名&#xff1a;这个别说了&#xff0c;都是泪。 2、联表查询查询&#xff0c;多条合成一条&#xff0c;不生效的原因 博主各种检查关联关系和字段大小写&#xff0c;本来是4条数据最后合成一条数据&#xff0c;死活给你直接返回了4条数据&#xff0c;而且每个类似p…

leetcode刷题之用栈实现队列(C语言版)

leetcode刷题之用栈实现队列&#xff08;C语言版&#xff09; 一、题目描述二、题目要求三、题目解析Ⅰ、typedef structⅡ、MyQueue* myQueueCreateⅢ、void myQueuePush(MyQueue* obj, int x)Ⅳ、int myQueuePeek(MyQueue* obj)Ⅴ、int myQueuePop(MyQueue* obj)Ⅶ、bool myQ…

邦芒忠告:求职者面试时绝不能说的8件事

求职者在面试时应该注意言行举止&#xff0c;避免提及一些敏感或不合适的话题&#xff0c;以下是一些绝不能说的事情&#xff1a; 1、攻击性言辞&#xff1a;不要使用攻击性言辞&#xff0c;如贬低、批评或攻击公司、同事或竞争对手等&#xff0c;这会给人留下不成熟、不尊重他…

新手必看!!附源码!!STM32通用定时器-比较输出PWM

一、什么是PWM? PWM&#xff08;脉冲宽度调制&#xff09;是一种用于控制电子设备的技术。它通过调整信号的脉冲宽度来控制电压的平均值。PWM常用于调节电机速度、控制LED亮度、产生模拟信号等应用。 二、PWM的原理 PWM的基本原理是通过以一定频率产生的脉冲信号&#xff0…

SPSS多元对应分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

红队攻防实战之钉钉RCE

我这一生如履薄冰&#xff0c;你说我能走到对岸吗&#xff1f; 本文首发于SecIN社区&#xff0c;原创作者即是本人 前言 网络安全技术学习&#xff0c;承认⾃⼰的弱点不是丑事。只有对原理了然于⼼&#xff0c;才能突破更多的限制。拥有快速学习能力的白帽子&#xff0c;是不…

vue3 教程(中)

侦听器 用于侦听指定变量&#xff0c;当其响应式状态变化时触发回调函数。 watch() watch() 需明确指定侦听的数据源&#xff0c;并且仅当数据源变化时&#xff0c;才会执行回调&#xff0c;在创建侦听器时&#xff0c;不会执行回调&#xff0c;可以获取到数据源变化前后的值…

Flutter 父子组件通信

在Flutter 中父组件调用子组件的方法可以通过GlobalKey实现&#xff0c;而子组件调用父组件方法可以通过回调函数实现。 父组件 class _MyHomePageState extends State<MyHomePage> {final GlobalKey<LoadPencilState> loadPencilKey GlobalKey<LoadPencilSt…

react中虚拟dom,diff,fiber - 初级了解

借鉴&#xff1a; 「React深入」一文吃透虚拟DOM和diff算法 - 掘金 (juejin.cn) 虚拟dom、fiber、渲染dom、dom-diff - 掘金 (juejin.cn) 未阅读源码&#xff0c;了解层面&#xff0c;后续可以深入了解 1.虚拟DOM ①.结构上&#xff1a;虚拟DOM比真实DOM轻很多 ②.操作上&…

主流的低代码平台有哪些?程序员应该如何与低代码相处?

本文主要阐述低代码的概念&#xff0c;介绍目前主流的低代码平台&#xff0c;总结低代码平台的典型特征、存在优势以及未来发展趋势。并站在程序员的角度&#xff0c;分析如何在已经到来的低代码战争中&#xff0c;找到自己的定位&#xff0c;一展所长。 什么是低代码&#xff…

脉冲宽度基础知识简介

脉冲宽度是指脉冲所能达到的最大值所持续的周期时间。脉冲宽度是电子领域中一个重要的概念&#xff0c;它与脉冲重复间隔和占空比等参数密切相关。 脉冲宽度通常用于电信号的测量&#xff0c;可以用来描述脉冲的形状、幅度和宽度等特性。在雷达和电源领域中&#xff0c;脉冲宽度…

Flink 替换 Logstash 解决日志收集丢失问题

在某客户日志数据迁移到火山引擎使用 ELK 生态的案例中&#xff0c;由于客户反馈之前 Logstash 经常发生数据丢失和收集性能较差的使用痛点&#xff0c;我们尝试使用 Flink 替代了传统的 Logstash 来作为日志数据解析、转换以及写入 ElasticSearch 的组件&#xff0c;得到了该客…

实现一个计算机

图片&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body {padding: 20px;font-family: Arial;}.calc-wrap {width: 300px;bor…

VL06O报表添加增强字段

业务描述 用户需要在VL06O事务代码下进行批量交货过账&#xff0c;现有的筛选条件不太适用当前公司的业务&#xff0c;需要在报表中新增三个交货单增强字段&#xff0c;方便其筛选&#xff08;选择屏幕没有加&#xff0c;用户在报表里用标准按钮功能自己筛选&#xff09; 效果…

十一 动手学深度学习v2计算机视觉 ——微调

一、网络架构 一个神经网络一般可以分成两块 特征抽取&#xff0c;将原始像素变成容易线性分割的特征。线性分类器来做分类。 二、训练 是一个目标数据集上的正常训练任务&#xff0c; 但使用更强的正则化 使用更小的学习率使用更少的数据迭代 源数据集远远复杂于目标数据集…

蓝桥杯算法双周赛心得——迷宫逃脱(dp)

大家好&#xff0c;我是晴天学长&#xff0c;dp版的来啦&#xff0c;可以是受益匪浅啊&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .迷宫逃脱 迷官逃脱[算法赛] 问题描述 在数学王国中&#xff0c;存…