2024-09-01
售卖作品
00

目录

项目简介
LCD显示功能
ADC0832数据采集
PWM控制
按键输入
主控制逻辑
具体功能实现

题目 8 :智能台灯控制器

基于单片机设计智能台灯控制器,要求可以调节 LED 灯的亮度,实现定时开启与关闭,

根据光照自动开启与关闭功能。

具体要求如下:

(1)通过 PWM 功能调节 LED 灯亮度,亮度由高到低可分为 3 档,通过按键进行调节

并对当前档位进行指示。

(2)具有手动开启和关闭功能。

(3)能够显示并修改当前时间(如时分显示)

(4)可设置自动开启和关闭的时间,当到达开启时间时,LED 自动开启;当到达关闭

时间时,LED 自动关闭。

(5)通过光敏电阻感知外界光照条件,在光照模式开启的情况下,光照较低则 LED 自

动点亮,光照较高,LED 自动熄灭。(LED 开启和关闭的光照阈值尽量能够由用户定义)

可添加符合题目背景的其它功能。

智能台灯控制器

1 分为 定时开关机的自动模式、手动模式、光敏电阻控制模式,使用按键1切换模式,每个模式都有对应显示,可以方便看出当前是什么模式。三种模式平行存在,无包含关系。还有一个修改当前时间模式平行。

2 单片机采用定时器走时,有时分秒的时间显示,可以按键修改时分秒,设置当前的时间。

3 定时开关机的自动模式功能解释:按键设置开机时间点和关机时间点,当当前的时间处于时间段内小灯点亮,否则小灯熄灭。

4 手动模式功能解释:按键可以调节档位,也有相对应显示。

5 光敏电阻控制模式功能解释:光敏电阻检测到的电压来控制台灯亮度。

光照较低则 LED 自动点亮,光照较高,LED 自动熄灭

6 LED 开启和关闭的光照阈值能够由用户定义

7 按键规划

K1 切换模式:自动模式 手动模式 光敏电阻控制模式

K5 进入或者退出修改当前时间模式

定时开关机的自动模式下按键功能:

K2 切换选项

K3 加法

K4 减法

手动模式下按键功能:

K2 无作用

K3加档位

K4 减档位

光敏电阻控制模式下按键功能:

K2 无作用

K3 加光照阈值

K4 减光照阈值

修改当前时间模式下按键功能:

K2 切换选项

K3 加法

K4 减法

在这里插入图片描述

这段代码是一个基于AVR单片机的项目,用于实现LCD显示、ADC0832数据采集、PWM控制和按键输入功能。下面我将对其主要功能和实现方法进行详细介绍。

项目简介

该项目的核心功能包括:

  1. LCD显示:用于显示当前时间、模式和相关参数。

  2. ADC0832数据采集:通过ADC0832芯片采集模拟信号。

  3. PWM控制:用于调节输出PWM信号的占空比。

  4. 按键输入:实现多种模式切换和参数设置。

LCD显示功能

LCD显示模块用于显示各种信息,包括当前时间、模式状态和传感器数据。代码中通过SetCurPosition函数设置LCD光标位置,LCD_write_comLCD_write_str函数用于发送指令和字符串到LCD。LCD显示部分的代码示例如下:

c
void display(void) { // 省略部分代码... if (mode == 0) { // 显示当前时间 // 省略部分代码... } else if (mode == 1) { // 显示手动模式 // 省略部分代码... } else if (mode == 2) { // 显示光强模式 // 省略部分代码... } else if (mode == 3) { // 显示时间设置模式 // 省略部分代码... } }

ADC0832数据采集

ADC0832是一个8位模数转换器,用于将模拟信号转换为数字信号。通过SPI协议与单片机进行通信。数据采集的核心函数是Get_AD_Result,其实现如下:

c
unsigned char Get_AD_Result(unsigned char ch) { // 省略部分代码... return dat1; // 返回转换结果 }

PWM控制

PWM控制部分用于调节输出信号的占空比,从而控制连接设备的工作状态。通过设置OCR1A寄存器来调整占空比。设置PWM占空比的函数如下:

c
void setPWM(unsigned int zhankongbi) { OCR1A = zhankongbi; // 设置占空比 }

按键输入

按键输入部分用于实现模式切换和参数设置。通过读取PINF寄存器的值来检测按键状态,并根据按键的不同执行相应操作。按键检测的核心函数如下:

c
unsigned char getkey(void) { // 省略部分代码... return 0; // 返回按键值 }

主控制逻辑

主控制逻辑位于main函数中,通过无限循环不断检测按键输入,更新显示和控制输出。其主要逻辑如下:

c
void main(void) { system_init(); // 系统初始化 while (1) { unsigned char key = getkey(); // 根据按键值更新模式和参数 if (key) { // 省略部分代码... } display(); // 更新显示 contorl(); // 控制输出 } }

具体功能实现

  1. 时间显示和设置:通过定时器中断更新当前时间,并通过按键设置定时时间。

  2. 自动模式:根据预设时间范围控制输出状态。

  3. 手动模式:用户通过按键手动设置输出状态。

  4. 光强模式:通过ADC0832采集光强信号,根据设定阈值控制输出状态。

通过这种模块化的设计,该项目能够实现多种模式下的灵活控制和显示功能,适用于需要多种输入输出控制的嵌入式系统应用。

资源:

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

本文作者:Dong

本文链接:

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