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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5329|回復: 0
收起左側

基于Proteus仿真的51單片機彩燈控制器源程序與詳細的實驗文檔

[復制鏈接]
ID:432059 發表于 2020-6-14 17:37 | 顯示全部樓層 |閱讀模式
Y@LK}O7PJK2]14B_7I9FW22.png

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

代碼如下所示


  1. uchar KeyScanf()
  2. {
  3. uchar keyvalue = 0;   //第幾個按鍵被按下的值
  4. if(KEY1 == 0)       //判斷按鍵有沒有被按下
  5. {
  6. Delay1ms(10);    //延時一段時間
  7. if(KEY1 == 0)    //再次判斷按鍵優美按下
  8. {
  9. keyvalue = 1;
  10. }
  11. while(!KEY1);  //按鍵有沒有松開
  12. }
  13. return keyvalue;   //返回按鍵按下的值
  14. }
復制代碼


(2)彩燈開啟和關閉的軟件設計

彩燈的IO口接在了單片機的P2^0~P2^7管腳,所以在控制彩燈的時候我們可以直接對單片機的P2口進行操作,當按鍵1被安下的時候彩燈開關標志置1,然后對P2口P2口寫入P2=0x00;彩燈關閉操作是彩燈開關標志置0,對P2口寫入P2=0xff;這樣就關閉了彩燈。彩燈開啟和關閉流程圖如下所示

圖3.8彩燈開啟和關閉流程圖

代碼如下所示:


  1. if(keyvalue == 1)            //按鍵1控制開關燈
  2. LEDSwitch = !LEDSwitch;  //開關燈標志位改變
  3. if(LEDSwitch == 1){
  4. P2 = 0x00;   //點亮全部彩燈}
  5. else{
  6. P2 = 0xff;  //熄滅全部彩燈
  7. }
復制代碼


(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)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 成人 在线 | 精品欧美一区二区精品久久 | 精品日韩一区 | 日韩手机在线视频 | 中文字幕精品一区久久久久 | 日韩电影免费观看中文字幕 | 色吧综合网 | 91精品国产综合久久久动漫日韩 | 国产精品欧美一区喷水 | 一级片片 | 一区二区三区视频播放 | 日本黄色一级片视频 | 99re99| 综合久久99 | 日韩色图在线观看 | 亚洲精品一区中文字幕乱码 | 国产伦精品一区二区三区照片91 | 亚洲第一女人av | 亚洲一区二区网站 | 国产精品一区二区三区在线 | 国产精品日日摸夜夜添夜夜av | 国产精品av久久久久久久久久 | 91精品国产91久久久久久密臀 | 国产精品一区久久久 | 欧美高清视频一区 | 日韩av黄色| 国产精品久久久久久久久图文区 | 亚洲人的av | 国产一区二区精品在线观看 | 欧美在线小视频 | 日韩久久久久 | 国产色婷婷精品综合在线手机播放 | 日产久久 | 第四色狠狠 | 日韩精品免费在线 | 久久久久久高潮国产精品视 | 97精品超碰一区二区三区 | 欧美一区二区三区在线看 | 亚洲精品久久久久久国产精华液 | 国产美女在线精品免费 | 国产偷录视频叫床高潮对白 |