2024-09-01
售卖作品
00

目录

风扇模拟控制系统设计实验报告
背景介绍
硬件介绍
器件连接
设计原理
电路原理
程序原理
程序设计
按键扫描
定时器初始化
风速调节
定时器中断服务程序
过热保护和报警提示
总结
代码资源

1

课程设计题三十五:风扇模拟控制系统设计

设计内容:1、3个独立按键分别控制“自然风”、“睡眠风”、“常风”,(三者的区别是直流电机的停歇时间不同),并在数显管上显示出区别

2、每种类型风可以根据按下独立按键次数分为4个档的风力调节。

3、设计风扇的过热保护,用继电器实现。即当风扇运行一段时间后,暂停10秒。

4、其他创新内容(如报警提示)

按键1

1234档位

按键2 5678档位

按键3 9 10 11 12档位

在这里插入图片描述

在这里插入图片描述

风扇模拟控制系统设计实验报告

背景介绍

本实验旨在设计一个模拟风扇控制系统,该系统通过三个独立按键来控制不同类型的风(自然风、睡眠风和常风),并且能够在数码管上显示风速档位。每种类型的风可以根据按键次数调节为四个档位。此外,还设计了风扇的过热保护功能,通过继电器实现,当风扇运行一段时间后暂停10秒。系统还增加了报警提示功能,当风扇运行时间过长时会发出报警。

硬件介绍

  • 单片机: 使用51单片机(AT89S51)。

  • 继电器: 用于控制风扇的通断,实现过热保护功能。

  • 数码管: 用于显示当前风速档位。

  • 按键: 三个独立按键用于选择不同的风类型,并调节风速档位。

  • 蜂鸣器: 用于在风扇运行时间过长时发出报警。

器件连接

  • 按键连接: 按键1、2、3分别连接到P1.5、P1.6、P1.7。

  • 继电器: 继电器控制引脚连接到P3.6。

  • 数码管: 段选引脚连接到P0,位选引脚连接到P2。

  • 蜂鸣器: 蜂鸣器控制引脚连接到P3.7。

设计原理

电路原理

风扇控制系统的电路设计中,主要部分包括按键输入、数码管显示、继电器控制和蜂鸣器报警。

  • 按键输入: 三个按键用于选择不同的风类型,并通过短按多次实现风速档位的调节。

  • 数码管显示: 数码管用于显示当前的风速档位。通过定时器中断刷新显示内容。

  • 继电器控制: 通过继电器实现风扇的开关控制,定时器中断用于实现过热保护功能,即风扇运行一段时间后暂停10秒。

  • 蜂鸣器报警: 当风扇连续运行时间超过设定值时,蜂鸣器发出报警提示用户。

程序原理

程序主要包括以下几个模块:

  1. 按键扫描: 检测按键状态,根据按键次数调节风速档位。

  2. 定时器中断: 通过定时器中断实现PWM控制风扇速度、刷新数码管显示和过热保护功能。

  3. 风速调节: 根据按键选择和档位调整PWM占空比,实现不同风速控制。

  4. 过热保护: 通过定时器中断计时,控制继电器实现风扇的定时暂停功能。

  5. 报警提示: 通过定时器中断计时,当风扇连续运行时间过长时触发蜂鸣器报警。

程序设计

按键扫描

按键扫描函数 KeySscan 用于检测按键状态,返回相应的按键编号。

c
unsigned char KeySscan(void) { if (key_01 == 0) { delay_ms_key(10); if (key_01 == 0) { while (key_01 == 0); return 1; } } if (key_02 == 0) { delay_ms_key(10); if (key_02 == 0) { while (key_02 == 0); return 2; } } if (key_03 == 0) { delay_ms_key(10); if (key_03 == 0) { while (key_03 == 0); return 3; } } return 0; }

定时器初始化

定时器1和定时器0的初始化设置用于生成PWM波形和计时。

c
void init_timer1(void) { TMOD |= 0x10; // 定时器1为工作方式1 16bit TH1 = (65536 - 500) / 256; TL1 = (65536 - 500) % 256; ET1 = 1; // 开定时器1中断 TR1 = 1; // 开定时器 EA = 1; // 开总开关 TMOD |= 0x01; TH0 = (65536 - 4000) / 256; TL0 = (65536 - 4000) % 256; EA = 1; ET0 = 1; TR0 = 1; }

风速调节

根据按键选择和档位调整PWM占空比,实现不同风速控制。

c
void main() { u8 key; u8 fengli = 1; RELAY = 1; // 打开风扇 BEEP = 1; // 关闭蜂鸣器 init_timer1(); ENA_PWM_data = fengli * 7; seg_disp[2] = fengli / 10; seg_disp[3] = fengli % 10; while (1) { key = KeySscan(); if (key != 0) { if (key == 1) { if (fengli <= 4) { fengli++; if (fengli > 4) { fengli = 1; } } else { fengli = 1; } } else if (key == 2) { if ((fengli <= 8) && (fengli >= 5)) { fengli++; if (fengli > 8) { fengli = 5; } } else { fengli = 5; } } else if (key == 3) { if (fengli >= 9) { fengli++; if (fengli > 12) { fengli = 9; } } else { fengli = 9; } } ENA_PWM_data = fengli * 7; seg_disp[2] = fengli / 10; seg_disp[3] = fengli % 10; } } }

定时器中断服务程序

定时器1的中断服务程序用于生成PWM波形控制风速。

c
void timer1_server(void) interrupt 3 { TH1 = (65536 - 500) / 256; TL1 = (65536 - 500) % 256; pwm_count++; if (pwm_count == 100) { pwm_count = 0; ENA = 1; } if (ENA_PWM_data == pwm_count) { ENA = 0; } }

过热保护和报警提示

通过定时器中断实现过热保护功能和报警提示。

c
void T1_time() interrupt 1 { TH0 = (65536 - 4000) / 256; TL0 = (65536 - 4000) % 256; jishi++; if (jishi == 250) { jishi = 0; if (ifg == 1) { guanbi_time++; if (guanbi_time == 10) { ifg = 0; RELAY = 1; guanbi_time = 0; } } else { time_sec++; if (time_sec == 15) { ifg = 1; RELAY = 0; time_sec = 0; } } all_time_sec++; if (all_time_sec > 30) { BEEP = 0; } } jishua = (jishua + 1) % 12; P0 = ~0x00; if (jishua == 0) { P2 = 0x01; P0 = ~LEDData[seg_disp[0]]; } else if (jishua == 1) { P2 = 0x02; P0 = ~LEDData[seg_disp[1]]; } else if (jishua == 2) { P2 = 0x04; P0 = ~LEDData[seg_disp[2]]; } else if (jishua == 3) { P2 = 0x08; P0 = ~LEDData[seg_disp[3]]; } }

总结

本实验通过设计风扇模拟控制系统,学习了51单片机的基本操作,掌握了按键扫描、PWM控制、定时器中断、数码管显示和继电器控制等技术。通过实现不同类型的风速控制、过热保护和报警提示功能,增强了对单片机应用开发的理解和实践

代码资源

bash
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!