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