題目 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控制和按鍵輸入功能。下面我將對其主要功能和實現方法進行詳細介紹。
項目簡介
該項目的核心功能包括:
- LCD顯示:用于顯示當前時間、模式和相關參數。
- ADC0832數據采集:通過ADC0832芯片采集模擬信號。
- PWM控制:用于調節輸出PWM信號的占空比。
- 按鍵輸入:實現多種模式切換和參數設置。
LCD顯示功能
LCD顯示模塊用于顯示各種信息,包括當前時間、模式狀態和傳感器數據。代碼中通過SetCurPosition
函數設置LCD光標位置,LCD_write_com
和LCD_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(); // 控制輸出}
}
具體功能實現
- 時間顯示和設置:通過定時器中斷更新當前時間,并通過按鍵設置定時時間。
- 自動模式:根據預設時間范圍控制輸出狀態。
- 手動模式:用戶通過按鍵手動設置輸出狀態。
- 光強模式:通過ADC0832采集光強信號,根據設定閾值控制輸出狀態。
通過這種模塊化的設計,該項目能夠實現多種模式下的靈活控制和顯示功能,適用于需要多種輸入輸出控制的嵌入式系統應用。
資源:
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2