基于AVR128单片机智能电风扇控制系统

一、系统方案
模拟的电风扇的工作状态有3种:自然风、常风及睡眠风。使用三个按键S1-S3设置自然风、常风及睡眠风。
再使用两个按键S4和S5,S4用于定时电风扇定时时间长短的设置,每按一次S4键,定时时间增加10秒,最长60秒,超过60秒回到0秒重新开始。按下S5键表示定时倒计时开始。
按下相应的风类键,使用处理器ATmega128定时/计数器的PWM功能生成不同占空比的1KHz的PWM信号来驱动直流电动机MOTOR-DC(模拟电风扇电机)。“自然风”:生成占空比为30%的PWM信号,“睡眠风”: 生成占空比为20%的PWM信号,“常风”:生成占空比为70%的PWM信号.
使用8LED数码管或液晶显示屏显示电风扇的工作状态、动态显示使用电风扇的定时功能时的剩余定时时间。使用8LED数码管和液晶显示屏LGM12641BS1R时,“自然风”显示“1”、“常风”显示“2”及“睡眠风”显示“3”,使用12864液晶显示屏LGM12641BS1R LM3228时使用中文显示。
在这里插入图片描述

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

三、单片机软件设计
1、首先是系统初始化
//*************************************************************************
// 初始化子程序
//*************************************************************************
void system_init()
{
DDRA=0XFF;
PORTA=0xff;
DDRC=0x00; //PC口上拉电阻使能
PORTC=0xf0; //系统初始化,设置IO口属性
PORTF = 0xFF; //电平设置
DDRF = 0xFF; //方向输出
PORTD=0xFF;
DDRD=0xFF;
PORTB=0xFF;
DDRB=0xFF;
PORTE=0xFF; //PSB对应于PE2
DDRE=0xFF;
}
2、液晶显示程序
//延时函数
void delay()
{
unsigned int i ,j ;
for(i=0;i<10000;i++);
}
//判断总线忙
void LCD_wait_ready()
{
check_busy:
lcd_ddr =0X00; lcd_port=0Xff;
RW1();asm (“nop”);DI0();
E1(); _delay_us(10); E0();
if (lcd_pin & 0x80) goto check_busy;
}
//写入命令
void LCD_write_command(uchar dat)
{
LCD_wait_ready();
lcd_ddr =0XFF; lcd_port=0XFF;
RW0();asm (“nop”);DI0();
lcd_port=dat;
E1();_delay_us(10);E0();
}
//写入数据
void LCD_write_data(uchar data)
{
LCD_wait_ready();
lcd_ddr =0XFF; lcd_port=0XFF;
RW0();asm (“nop”);DI1();
if(!fxshow) lcd_port=data;else lcd_port=~data;
E1();_delay_us(10);E0();
}
//初始化
void LCDchushihua()
{
LCD_write_command(0x3f);_delay_ms(15);
}
//读取数据线
uchar LCD_read()
{
uchar dat;
lcd_ddr =0X00; lcd_port=0Xff;
RW1();asm (“nop”); DI0();
E1(); _delay_us(10); E0();
dat=lcd_pin;
return dat;
}
3、按键程序
//按键扫描函数
void scan_key()
{
if(key1) //按键1.自然风
{
mode = 0 ;
update = 1 ;
SetDuty(1); //设置占空比
}else if(key2) //按键2,常风
{
mode = 1 ;
update = 1 ;
SetDuty(2); //设置占空比
}else if(key3) //按键3,睡眠风
{
mode = 2 ;
update = 1 ;
SetDuty(0); //设置占空比
}
if(key4) //按键4按下
{
if(key_delay1<10) //按键消抖计数
{
key_delay1++;
}
}else
{
if(key_delay1>5)
{
update = 1 ; //显示更新标志位置位
if(time<60) //如果定时时间小于60
{
time = time + 10 ; //每次按下按键后时间会累加
}else
{
time = 0 ;
}
}
key_delay1 = 0 ;
}
if(key5) //按键5按下
{
if(key_delay2<10) //消抖计数
{
key_delay2++;
}
}else
{
if(key_delay2>5)
{
Start(); //开始工作
flag = 1 ;
}
key_delay2 = 0 ;
}
}
4、核心算法程序
//***********************************************************************
// 主程序
//***********************************************************************
void main(void)
{
uint key_store=0x01;
system_init(); //系统初始化
LCDchushihua(); //液晶初始化
LCDQingPing(); //液晶显示清屏
Display(); //设置显示屏初始内容
timer1_init(); //定时器1初始化
timer3_init(); //定时器3初始化
ETIMSK=0x04; //设置定时器中断
SEI(); //开中断
ledoff();
beer0();
Display_MSG(0); //显示内容初始化
Display_Number(10);
SetDuty(0);
while(1)
{
scan_key(); //按键扫描
if(update == 1 ) //如果显示更新标志位为1
{
update = 0 ; //标志位清0
Display_MSG(mode); //显示模式
Display_Number(time); //显示工作时间
}
}
}

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

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

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

相关文章

mysql优化之索引

索引官方定义&#xff1a;索引是帮助mysql高效获取数据的数据结构。 索引的目的在于提高查询效率&#xff0c;可以类比字典。 可以简单理解为&#xff1a;排好序的快速查找数据结构 在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这种数据…

html和css相关操作

html第一个网页 <!DOCTYPE html> <!--html文档声明&#xff0c;声明此文档是一个html5的文档--> <html> <!--html文档开头标签--><head><!--html文档的设置标签&#xff0c;文档的设置及资源的引用都写在这个标签中--><meta charset&q…

如何快速走出网站沙盒期(关于优化百度SEO提升排名)

网站沙盒期是指新建立的网站在百度搜索引擎中无法获得好的排名&#xff0c;甚至被完全忽略的现象。这个现象往往发生在新建立的网站上&#xff0c;因为百度需要时间来评估网站的质量和内容。蘑菇号www.mooogu.cn 为了快速走出网站沙盒期&#xff0c;需要优化百度SEO。以下是5个…

3D成像技术概述

工业4.0时代,三维机器视觉备受关注,目前,三维机器视觉成像方法主要分为光学成像法和非光学成像法,这之中,光学成像法是市场主流。 飞行时间3D成像 飞行时间成像(Time of Flight),简称TOF,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉…

力扣刷题-链表理论基础

什么是链表 什么是链表&#xff0c;链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针的意思&a…

毫米波雷达 TI IWR1443 在 ROS 中进行 octomap 建图

个人实验记录 /mmwave_ti_ros/ros_driver/src/ti_mmwave_rospkg/launch/1443_multi_3d_0.launch <launch><!-- Input arguments --><arg name"device" value"1443" doc"TI mmWave sensor device type [1443, 1642]"/><arg…

minio文件上传

1.代码 大佬仓库&#xff1a;https://gitee.com/Gary2016/minio-upload?_fromgitee_search 关于这个代码的讲解&#xff1a;来自b站 2.准备minio 参考&#xff1a;[1]、[2] 2.1 下载 官网&#xff1a;https://min.io/download#/windows 2.2 启动 ①准备一个data文件夹…

Android开发笔记 :理解Fragment

Android开发笔记&#xff1a;理解Fragment 导言 本篇文章产生的原因很简单&#xff0c;就是我在了解Android Jetpack中的Lifecycle框架时发现Lifecycle具体时间和状态的更新都是由一个名为ReportFragment的Fragment来跟踪的&#xff0c;为了更好的了解Fragment是如何追踪Activ…

以太网协议

以太网 以太网协议格式&#x1f3a8;目的地址,源地址mac地址格式 以太网协议格式&#x1f3a8; 目的地址,源地址 此处的地址,叫做mac地址(物理地址),长度是6个字节 mac地址的作用也是用来区分不同的主机 IP地址的长度是4字节 IP地址负责网络层(整体)转发,mac地址负责数据链路层…

pytest框架运行时的参数,以及多线程分布式运行用例、运行指定模块用例

一、运行时的参数 在上一篇博客中写了pytest最为核心的运行时前后置如何设置&#xff0c;细心的朋友可能也会发现其实我们当时就加过运行时的参数-vs。 pytest.main([‘-s’])&#xff1a;能打印出调试信息&#xff0c;print()或者日志都可以直接打印在控制台上。 pytest.ma…

基于微信小程序的房屋租赁系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境说明用户微信小程序端的主要功能有&#xff1a;户主微信小程序端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文…

CSRF攻击(跨站请求伪造)

1.CSRF原理 程序员开发的时候&#xff0c;未对相关页面进行token和referer判断&#xff0c;造成攻击者可构造自己的URL地址欺骗用户进行点击 漏洞分析&#xff08;低级可绕过&#xff09; 通过这个可以更改密码 改为了password 中级多了referer头可以绕过 源代码 多了一个refer…

MVC设计思想理解和ASP.NET MVC理解

三层模式 三层模式包括:UI层,业务逻辑层,数据访问层,模型层 MVC设计思想和ASP.NET MVC理解 MVC设计思想: MVC的思想就是把我们的程序分为三个核心的模块,这三个模块的详细介绍如下: 模型(Model) :负责封装与引用程序的业务逻辑相关的数据以及对数据的处理方法。模型层有对…

Xcode15+iOS17适配以及遇到的问题

今天更新了 Xcode15&#xff0c;遇到了一些问题&#xff0c;做下记录希望大家少走点坑。 1.iOS17 SDK 安装失败 Xcode更新完成后&#xff0c;打开项目一直显示 no fund iOS17 sdk&#xff0c;根据项目不同提示可能有区别&#xff0c;根据提示下载后提示安装失败&#xff0c;…

什么是单点登录?什么又是 OAuth2.0?

对于刚开始接触身份认证的朋友对于单点登录&#xff0c;OAuth2.0&#xff0c;JWT 等等会有诸多疑惑&#xff0c;甚至还会问既然有了 JWT 还拿 单点登录做什么&#xff1f;还拿 OAuth2.0 做什么&#xff1f; 不知做过身份认证的 xdm 看到这里是不是感觉这句话有点迷&#xff1f…

简单好用的Python装饰器详解

装饰器&#xff08;Decorators&#xff09;是Python中一种强大而灵活的功能&#xff0c;用于修改或增强函数或类的行为。装饰器本质上是一个函数&#xff0c;它接受另一个函数或类作为参数&#xff0c;并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的…

LaTex打出上大下小的公式

想要在latex中打出如下word公式 首先使用 \atop符号 使用如下语句 d_{H(A,B)} max\{{sup\, inf \atop {a \in A\,b \in B}}\,d(a,b), {sup\, inf\,\atop {b\in B\,a\in\,A}}d(b,a)\}. ![在这里插入图片描述](https://img-blog.csdnimg.cn/0c842594716a4693b1124523d53bfcad…

java框架-Spring-IOC

文章目录 一、组件注册包扫描组件注解0&#xff09;、 ComponentScans1&#xff09;、 RestController2&#xff09;、 Srevice3&#xff09;、 Rerpository4&#xff09;、Component 导入第三方包里的组件1&#xff09;、Configuration1&#xff09;、Bean1&#xff09;、Cond…

JavaScript 期约 Promise 总结

同步与异步的概念 JavaScript 是一门单线程的语言&#xff0c;这意味着它在任何给定的时间只能执行一个任务。 然而&#xff0c;JavaScript 通过异步编程技术来处理并发操作&#xff0c;以避免阻塞主线程的情况。 在上图中&#xff0c;同步行为的进程 A 因为等待进程 B 执行完…

elsarticle class not displaying email addresses

See https://tex.stackexchange.com/questions/84573/elsarticle-class-not-displaying-email-addresses