?
由于運算放大器的輸入阻抗很大,所以Ch2上的電壓能夠保持一段時間,在數模轉換器輸出電壓控制其它發光二極管期間,該運算放大器的輸出電壓能夠保持不變。
裝置硬件原理圖如圖5。
?
2 軟件設計
軟件主要完成兩個功能, 第一, 完成各個LED的循環點亮; 第二,通過程序控制各個LED亮度的變化。本例中要實現燈光旋轉的效果,所以每個LED都按三角波的型式亮度變化,先逐漸變亮,達到最亮時再由最亮逐漸變暗,如此反復進行;三個LED的亮度變化要有一個時差,如果一個LED從暗到亮再到暗作為一個周期的話,則D2比D1 滯后1/3 周期, D3 比D2 滯后1/3 個周期。
2.1 主程序設計
使各個LED循環點亮通過主程序循環實現,將表示三個LED亮度的三個數據放到連續的三個RAM單元30H、31H、32H中,主程序中循環讀取這三個單元的數據送到DAC0832 轉換,根據30H、31H、32H中數值的不同,轉換輸出的模擬電壓也不同,單片機控制多路電子開關將不同的模擬電壓送給不同的LED,從而實現各個LED具有不同的亮度。由于本例中用P2口控制ADC0832的選通和電子開關的選通,根據原理圖接線可知,點亮發光二極管D0、D1、D2對應的P2口數據分別為00H、01H、02H。
2.2 中斷程序設計
控制LED亮度變化通過定時器T0定時中斷程序實現, T0中斷改變30H、31H和32H的數值就可以改變LED 亮度了,若實現燈光旋轉的效果,則三個LED的亮度應按圖6曲線變化。
?
圖中橫坐標表示時間,在一個周期內發光二極管的亮度會按三角形規律變化,設每個變化周期為T,第二個發光二極管D1的變化滯后第一個發光二極管D0三分之一周期,同樣D2滯后D1三分之一周期。
圖6中的橫坐標表示亮度,也就是對應的要轉換成模擬量的數字量的數值。在主程序中三個字節30H、31H、32H中數值對應三個發光二極管的亮度,設定三個字節33H、34H和35H 的值控制三個二極管亮度增加還是減弱( 1 增強, 0 減弱) 。假設開始時D1對應亮度為0,D0、D2對應亮度均為170,則三個二極管的亮度變化應該是D0和D2亮度增加,D2亮度減弱,則三個亮度控制字節的值分別為33H、35H中為1, 35H中為0。
采用T0中斷實現三個發光二極管亮度的改變,則每到一次定時中斷將完成如下功能:
1) 根據三個字節33H、34H和35H的值,分別對30H、31H和32H的值進行增1或減1操作。
2) 當亮度字節的數值增加到255時對應控制字節數值清零,亮度字節數值減到0時,對應控制字節數值置1。
由于在主程序中和中斷子程序同時使用工作寄存器R0,所以在中斷程序的開始和結束有一個保存和恢復R0中數值的過程。