【TB作品】智能台灯控制器,基于ATMEGA128单片机设计,Proteus仿真演示

题目 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显示部分的代码示例如下:

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,其实现如下:

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

PWM控制

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

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

按键输入

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

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

主控制逻辑

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

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

作者:XD742971636

物联沃分享整理
物联沃-IOTWORD物联网 » 【TB作品】智能台灯控制器,基于ATMEGA128单片机设计,Proteus仿真演示

发表回复