基于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.hqwc.cn/news/116240.html

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

相关文章

iOS——present相关属性以及dismiss多级的方法

push和present 两者的区别 push: push由视图栈控制&#xff0c;每一个视图都入栈&#xff0c;调用之前的视图则需要出栈&#xff0c;可返回任意一层&#xff0c;一般用于同一业务不同界面之间的切换。 push是由UINavigationController管理的视图控制器堆栈&#xff0c;在wind…

vue项目打包优化

首先第一步通过浏览器看首次加载的问题大小&#xff0c;时间跨度等方面入手 1. Coverage观察 Coverage是chrome开发者工具的一个新功能&#xff0c;从字面意思上可以知道它是可以用来检测代码在网站运行时有哪些js和css是已经在运行&#xff0c;而哪些js和css是还没有用到的&a…

PID之Simulink仿真

昨天&#xff0c;在中南大学面试的老师&#xff0c;老师突然问到如何调PID&#xff0c;关于PID&#xff0c;我只知道一些基本概念&#xff0c;实际中并没有做过相关PID的项目&#xff0c;就连仿真也没搞过&#xff0c;所以今天就照着网上的教程做了PID的仿真&#xff0c;调PID的…

实现人工智能的去中心化,权力下放是最佳途径!

Web3和人工智能&#xff08;AI&#xff09;的交集&#xff0c;已成为加密社区中最热门的争论话题之一。毕竟&#xff0c;生成式AI正在彻底改变传统软件堆栈的所有领域&#xff0c;Web3也不例外。鉴于去中心化是Web3的核心价值主张&#xff0c;许多新兴的Web3生成AI项目和场景都…

KT142C语音芯片flash型用户如何更新固件的说明_V2

目录 一、简介 2.1 让芯片进入PC模式 2.2 双击提供的exe程序即可 一、简介 正常的情况下&#xff0c;用户肯定是不需要更新固件的&#xff0c;因为芯片出厂默认就烧录了对应的程序固件&#xff0c;但是有客户可能需要小修小改&#xff0c;或者订制一下某些功能&#xff0c…

全国职业技能大赛云计算--高职组赛题卷②(容器云)

全国职业技能大赛云计算--高职组赛题卷②&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…

浅谈SpringMVC的请求流程

目录标题 浅谈SpringMVC的请求流程SpringMVC的介绍SpringMVC的逻辑概念运行图解知识总结 浅谈SpringMVC的请求流程 对于SpringMVC而言重点是了解它的底层运行逻辑&#xff0c;从而可以根据其逻辑来进行实际业务的操作或者是利用原理增强业务的功能性&#xff0c;最终达到项目预…

FPGA:卷积编码及维特比译码仿真

FPGA&#xff1a;卷积编码及维特比译码仿真 本篇记录一下在FPGA中完成卷积编码和维特比译码的过程&#xff0c;通过代码解释编码的过程和译码的过程&#xff0c;便于理解&#xff0c;同时也方便移植到其他工程中。 1. 准备工作 卷积编译码IP核—convolutionIP核和viterbiIP核…

以太网协议

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

CHATGPT中国免费网页版有哪些-CHATGPT中文版网页

CHATGPT中国免费网页版&#xff0c;一个强大的人工智能聊天机器人。如果你曾经感到困惑、寻求答案&#xff0c;或者需要一些灵感&#xff0c;那么CHATGPT国内网页版可能会成为你的好朋友。 CHATGPT国内免费网页版&#xff1a;你的多面“好朋友” 随着人工智能技术的不断发展&a…

消息队列 记录

https://www.bilibili.com/video/BV1ia411k7oo/?p3&vd_source088e0f60c1207e991fcf231a9f1a0274