久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5267|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于Proteus仿真的51單片機(jī)彩燈控制器源程序與詳細(xì)的實(shí)驗(yàn)文檔

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


(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按鍵獲取流程圖

代碼如下所示


  1. uchar KeyScanf()
  2. {
  3. uchar keyvalue = 0;   //第幾個(gè)按鍵被按下的值
  4. if(KEY1 == 0)       //判斷按鍵有沒有被按下
  5. {
  6. Delay1ms(10);    //延時(shí)一段時(shí)間
  7. if(KEY1 == 0)    //再次判斷按鍵優(yōu)美按下
  8. {
  9. keyvalue = 1;
  10. }
  11. while(!KEY1);  //按鍵有沒有松開
  12. }
  13. return keyvalue;   //返回按鍵按下的值
  14. }
復(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)閉流程圖

代碼如下所示:


  1. if(keyvalue == 1)            //按鍵1控制開關(guān)燈
  2. LEDSwitch = !LEDSwitch;  //開關(guān)燈標(biāo)志位改變
  3. if(LEDSwitch == 1){
  4. P2 = 0x00;   //點(diǎn)亮全部彩燈}
  5. else{
  6. P2 = 0xff;  //熄滅全部彩燈
  7. }
復(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)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费久久精品视频 | 成人小视频在线观看 | 亚洲综合精品 | 国产亚洲一区二区精品 | 亚洲精品久久久久久久久久吃药 | 日本不卡一区二区三区 | 淫片专区| 亚洲天堂一区二区 | 久久久青草婷婷精品综合日韩 | 九九热国产视频 | 天堂网avav | 性一交一乱一透一a级 | 亚洲社区在线 | 国内自拍视频在线观看 | 午夜精品久久久久久久星辰影院 | 久久在线 | 91色在线 | 中文字幕在线播放不卡 | 国产精品日日做人人爱 | 久久久久久国产精品免费免费男同 | 亚洲欧美国产精品久久 | 91精品国产综合久久福利软件 | 日韩国产在线 | 青春草91 | 国产日产精品一区二区三区四区 | 一区二区在线 | www国产精品 | 日日摸日日碰夜夜爽2015电影 | www.99re| 成人免费在线视频 | 久久久久无码国产精品一区 | 草久在线视频 | 国产成人精品a视频一区www | 国产精品爱久久久久久久 | 日韩精品 | 99国产精品视频免费观看一公开 | av无遮挡| 国产一区不卡 | 精品在线观看入口 | 精品国产一区二区三区av片 | 成人免费视频网站在线看 |