(1)按下KEY1按鍵的時候,節日彩燈開啟(默認從上到下)并且數碼管顯示當前的模式和流轉時間間隔,再次按下的時候彩燈關閉。 (2)KEY2按鍵的功能實進行彩燈流轉模式的設置,彩燈總共有四種模式。模式一是從上到下移動著依次點亮,模式二是從下到到移動著依次點亮,模式三是先全部點亮,然后依次從上到下移動著依次熄滅,模式四是先全部點亮,然后依次從下到上移動著依次熄滅。 (3)當節日彩燈亮著的時候按下KEY3進行彩燈流轉的時間間隔增加。初始值是0.5秒, 按一下增加0.5秒,加到最大值3秒就不能增加了。 (4)當節日彩燈亮著的時候按下KEY4進行彩燈流轉的時間間隔減小。按一下KEY4減少0.5秒,減小到最小值0.5秒就不能減少了。 (5)數碼管第一位顯示當前的模式,第二位是符號“-”,第三位和第四位表示當前的流轉時間間隔,單位是秒。 三、總體設計方案 1.硬件設計說明 節日彩燈控制器的硬件模塊主要有四大部分組成:AT89C51單片機主控模塊,LED燈模塊,數碼管模塊、按鍵模塊。 AT89C51單片機主控模塊主要作用是通過控制小彩燈的點亮和熄滅,控制數碼管的顯示,采集按鍵的輸入情況。利用單片機自帶的定時器功能控制彩燈亮滅的時間。LED燈的作用就是亮和滅,各種顏色的小LED的亮滅就形成美麗的彩燈。按鍵的作用主要是控制小彩燈的流動的方向和流動的時間間隔。數碼管的作用是為了顯示當前流轉的方向和流轉的時間間隔。 
圖3.1仿真的電路圖 (1)AT89C51單片機主控的設計 AT89C51是一種功能強、靈活性高且價格合理的單片機,可方便的應用于各種控制領域,并且它的設計也是比較簡單的,只需要一個晶振電路和一個復位電路便就可以使AT89C51單片機工作了。單片機這里使用的晶振電路頻率是12MHZ。單片機在這個頻率下工作比較穩定、不容易出錯誤,下圖是單片機的設計電路圖。 
圖3.2單片機主控芯片設計仿真圖 (2)LED燈的硬件設計 LED燈是一種低功耗、使用壽命高、亮度好,在生活中很多地方都能用到。 LED的本質是發光二極管,我們只要正負極接上電源便能夠發光。單片機實現彩燈控制需要將LED的一端接到VCC5V電源,另一端接到單片機的管腳上面,單片機管腳是低電平的時候就能夠點亮。為了控制電流我們還需要再加一個限流電阻,電阻大小為1000Ω。LED彩燈部分電路圖如下所示: 
圖3.3LED彩燈設計仿真圖 (3)按鍵的硬件設計 按鍵模塊在生活中也很常見,它是一種機械結構,當按鍵按下的時候按鍵上方的金屬片就會和下方的金屬片接觸,這樣電路就形成了一種通路的狀態。我們將按鍵電路和單片機管腳連到一起,并在另一端接負極,當按下按鍵的時候就會導通單片機管腳就會拉低。我們就判斷單片機的管腳的高低電平就能夠獲取按鍵的按下。按鍵部分電路如下圖所示: 
圖3.4獨立按鍵彩燈設計仿真圖 (4)數碼管的硬件設計 數碼管的也是生活中用的比較多的模塊,它的設計電路也比較簡單。數碼管分為共陰和共陽兩種,共陰的就是對應LED燈在低電平的時候會點亮,共陽的就是對應LED燈在高電平的時候會點亮。數碼管分為段選控制和位選控制,段選就是控制LED的亮和滅組合出數字的圖形,位選控制是控制那一個數碼管點亮。數碼管的設計電路如下所示: .
圖3.5數碼管設計仿真圖 2.軟件設計說明 軟件設計的功能主要有:按鍵1控制彩燈開啟和關閉,按鍵2控制彩燈的流轉模式,按鍵3是增加彩燈的流轉時間間隔的,按鍵4是減少彩燈的流轉時間間隔的。彩燈開啟的時候數碼管第一位顯示當前的流轉模式,第三位和第四位顯示當前彩燈的流轉時間間隔。彩燈控制器軟件功能總流程圖如下所示: 
圖3.6軟件功能總流程圖 (1)按鍵獲取的實現 按鍵的IO 接在單片機的P1^0~P1^4上,我們實時的掃描這四個端口,當有一個端口電平被拉低了就延時10ms,再次判斷這個端口有沒有被拉低,如果還被拉低就可以確定按鍵按下了。按鍵獲取的流程圖如下: 
圖3.7按鍵獲取流程圖 代碼如下所示
- uchar KeyScanf()
- {
- uchar keyvalue = 0; //第幾個按鍵被按下的值
- if(KEY1 == 0) //判斷按鍵有沒有被按下
- {
- Delay1ms(10); //延時一段時間
- if(KEY1 == 0) //再次判斷按鍵優美按下
- {
- keyvalue = 1;
- }
- while(!KEY1); //按鍵有沒有松開
- }
- return keyvalue; //返回按鍵按下的值
- }
復制代碼
(2)彩燈開啟和關閉的軟件設計 彩燈的IO口接在了單片機的P2^0~P2^7管腳,所以在控制彩燈的時候我們可以直接對單片機的P2口進行操作,當按鍵1被安下的時候彩燈開關標志置1,然后對P2口P2口寫入P2=0x00;彩燈關閉操作是彩燈開關標志置0,對P2口寫入P2=0xff;這樣就關閉了彩燈。彩燈開啟和關閉流程圖如下所示 
圖3.8彩燈開啟和關閉流程圖 代碼如下所示:
- if(keyvalue == 1) //按鍵1控制開關燈
- LEDSwitch = !LEDSwitch; //開關燈標志位改變
- if(LEDSwitch == 1){
- P2 = 0x00; //點亮全部彩燈}
- else{
- P2 = 0xff; //熄滅全部彩燈
- }
復制代碼
(3)彩燈模式控制軟件設計 彩燈有四種模式進行變化,我設計的時候定義了一個彩燈流轉方式的標志位LEDMode有0到3四種模式,當燈開啟并且按鍵2被按下那LEDMode就加1,加到4重新置為0。彩燈實現從上到下,從下到上的步驟是通過對0x01進行右移實現的,從上到下就右移0位,1位,2位然后取反對應的位置就是0其他位置上都是1就實現了從上到下依次點亮,從下到上實現是和這一樣的,不過順序變成了7位,6位等等。彩燈模式控制流程圖如下所示: 
圖3.9彩燈模式變化流程圖 實現代碼如下所示: temp = 0x01; //用于右移控制LED燈
if(LEDSwitch == 1)
{
if(LEDMode == 0) //模式0 從上到下依次點亮
{
LED = ~(temp<<i); //點亮LED燈
i++;
if(i>8) i=0; //控制移動的位數
}
if(LEDMode == 1) //模式1 從下到上依次點亮
{
LED = ~(temp<<i); //點亮LED燈
i--;
if(i<0) i=8; //控制移動的位數
}
if(LEDMode == 2) //模式2 從上到下依次熄滅
{
LED = (temp<<i);
i++;
if(i>8) i=0;
}
if(LEDMode == 3) //模式2 從下到上依次熄滅
{
LED = (temp<<i);
i--;
if(i<0) i=8;
}
}
(4)彩燈間隔時間設置 間隔時間是設置了一個全局變量LEDTime,然后通過控制定時器來控制流轉時間的間隔。時間流轉默認是0.5秒,按一下按鍵3加0.5秒,按一下按鍵4減0.5秒。最小時間間隔是0.5秒,最大是3秒。彩燈間隔時間設置流程圖如下圖所示: 
圖3.10彩燈間隔時間設置流程圖 代碼如下所示: //定時器是 10ms的定時器,一次10ms,加0.5s需要50次
if(keyvalue == 3) //增加時間按鍵
{
LEDTime += 50; //增加0.5秒
if(LEDTime >= 300); //最大3秒
LEDTime = 300;
}
else if(keyvalue == 4) // 減時間按鍵
{
LEDTime -= 50; //減少0.5秒
if(LEDTime <=50) //最小0.5秒
LEDTime = 50;
} (4)數碼管顯示的軟件實現
本文中的數碼管采用的是4位把段LED數碼管,數碼管第一位顯示的是當前的模式,第二位顯示的是分隔符“-”,第三位和第四位一起組成當前的彩燈流轉的間隔時間,流轉的間隔時間是以秒為單位最小是0.5秒。當彩燈的模式和流轉時間改變了,數碼管的顯示也會隨著改變。數碼管的顯示原理是通過逐位掃描的方式,從第一位到第四位依次延時2ms,通過一個視覺的暫留,實現四個數碼管全部都亮的效果。數碼管顯示代碼如下所示:
if(LEDSwitch == 1) //小彩燈打開
{
display(0,LEDMode); //第一位顯示模式
display(1,13); //顯示 -
display(2,LEDTime/100); //顯示小點數 整數位
display(3,LEDTime/10%10); //顯示小點數小數位
}
#define seg P3
//0-9 全亮 全滅 C
unsigned char code seg_wei[] = {0x01,0x02,0x04,0x08};//位選表
//段選表
unsigned char code seg_duan[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00,0xff,0xc6,0xbf};
/*數碼管顯示函數*/
//flag:表示顯示的是哪一位
void display(uchar flag,uchar number)
{
seg = seg_wei[flag];
if(flag == 2) //第三位顯示 出小點數
P0 = (seg_duan[number]&0x7f);
else
P0 = seg_duan[number]; //其他正常正常顯示
Delay1ms(2); //延時2ms
}
四、成果展示圖 (1)彩燈的開啟和關閉 點擊按鍵1LED燈開始流轉,數碼管顯示當前的模式和流動的時間。
圖4.1彩燈開啟LED燈變化 
圖4.2彩燈開啟數碼管的變化 (2)彩燈流轉模式的改變 彩燈有四個模式,模式1是從上到下依次移動點亮,模式2是從下到上依次移動點亮,模式3是從上到下依次移動熄滅,模式4是從下到上依次移動熄滅。 
圖4.3彩燈模式0變化 
圖4.4彩燈模式1變化 
圖4.5彩燈模式2的變化 
圖4.6彩燈模式3的變化 (3)彩燈時間間隔 時間間隔的調整,按鍵3增加時間間隔一次0.5秒,按鍵4減少時間間隔一次0.5秒。最大時間間隔3秒,最小時間間隔0.5秒。 
圖4.7流轉時間間隔變化 五、總結 在不斷學習中,終于完成了設計任務。通過本設計鍛煉了我們的實踐能力,也是對以后我們實際工作能力的訓練和考察過程。現在是一個高科技的時代,單片機的應用無處不在,這更堅定了我要學好單片機的決心。 本設計本身就比較簡單,整個設計的過程中每一步都是自己親自做過的,在經過遇到問題,思索問題到解決問題的過程中,就連向別人請教的過程也是一種收獲,收獲是最多的。以往沒有注意到的問題,都在這一次的設計中得以體現,這培養了我的細心,耐心和專心。我覺得能夠在這次的設計中學到很多的東西,以往不注意的細節,在這一次中是必須讓自己去注意的。也是我這所學到知識的一個體現。我深深知道,每一次的學習實踐環節都是那么的來之不易,都是通過老師的深思熟慮后,才給我們定下目標。然后讓我們在知識的海洋里翱翔,讓我們隨著年齡的增長不斷的擴充自己的知識領域,也逐漸成熟
全部資料51hei下載地址:
基于單片機的彩燈控制器.zip
(1.59 MB, 下載次數: 73)
2020-6-14 17:36 上傳
點擊文件名下載附件
附件
|