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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機16led心形燈閃爍程序

[復制鏈接]
ID:619899 發表于 2021-12-19 14:53 | 顯示全部樓層 |閱讀模式
控制要求:                                                      
    1. 用16盞小燈實現燈光變換,若有需要可另添加;              
    2.可以用輸入按鈕在幾種燈光效果間切換;                     
    3. 可以通過暫停按鈕暫停彩燈效果,使小燈全亮,再按下后繼續之前效果;                                                                                                            
    4.自動、手動兩種模式,并通過按鈕可以在這兩個模式之間切換。模式說明:順時針逐一點亮、逆時針逐一點亮、奇偶交替點亮閃爍、順時針逐一點亮、順時針逐一熄滅、逆時針逐一點亮、逆時針逐一熄滅 、對角順序點亮、對角倒序點亮、二進制加法點亮。                                                                                                                                                                                                           
    設計要求:                                                  
    本設計由16個發光二極管組成燈光電路,并且呈現心形樣式,設計其中工作模式不少五種并由定時中斷控制自由變化,并顯示第幾種燈光效果。

硬件電路設計

LED燈顯示模塊(如圖2-1)

圖3-1LED燈顯示模塊

類型顯示模塊(如圖2-2)

圖3-2類型顯示模塊


按鍵顯示模塊(如圖2-3)

圖3-3按鍵顯示模塊


時鐘控制模塊(如圖2-4)

圖3-4時鐘控制模塊


總體電路(如圖2-5)

圖3-5總體電路


4軟件設計4.1軟件設計思路

流水燈采用的是發光二極管(Light-Emitting Diode),簡稱LED,是一種將電能轉換為光能的半導體器件,具有體積小、耗電低的優點,常被用作微型計算機與數字電路的輸出裝置。當LED兩端加上一定的正向電壓,使之流過一定的工作電流就會發光,其亮度隨流過的電流增加而增加,但電流過大LED的壽命也將縮短。普通LED正向電流一般為5~20mA。由于51的I/0是弱上拉的方式,在輸出高電平時,只能輸出幾十微安的電流,而在輸出低電平時,I/0最大可以輸入幾十毫安的電流。所以,通常采用灌電流的方式,即電流從電源經LED流向I/0口。為了不讓流過LED的電流太大而把它燒壞,還得串上限流電阻R,當P0和P2口輸出高電平(+5V)時,LED兩端沒有電壓降,所以熄滅:當P0和P2口輸出低電平(即P0/P2=0)時,LED正向導通發光。此時LED兩端電壓VD約為1.7V.則限流電阻R兩端將存在3.3V(即5-1.7=3.3V)。查閱AT89C5l技術手冊后發現,單個I/0口的輸入電流不能超過10mA:P0口的輸入電流總和不能超過26mA;P1、P2、P3的輸入電流總和不能超過15mA;所有I/0口的輸入電流總和不能超過71mA。                                             

4.2軟件設計流程

燈光控制設計:

  • 用16盞小燈實現燈光變換,若有需要可另添加。
  • 可以用輸入按鈕在幾種燈光效果間切換。
  • 可以通過暫停按鈕暫停彩燈效果,使小燈全亮,再次按下后繼續之前效果。
  • 自動、手動兩種模式,并通過按鈕可以在這兩個模式之間切換。
  • 至少有九種燈光模式,閃爍時顯示種類。

主程序框圖

圖4-1

4.3軟件程序

#include <reg51.h>
#define false 0
#define true 1
#define uchar unsigned char
#define uint unsigned int
sbit pause_key=P3^0;
sbit auto_key= P3^1;
sbit change_key=P3^2;
sbit pauseLed=P3^6;
sbit autoLed = P3^7;
uint ledCode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uint ledCode2[8]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
void displayLed (void);
void keyScan(void);
void Delay10ms(unsigned int n);
bit isPause = false;
bit isAuto  = true;
bit isChange= false;
uchar time;
uchar a,flag,types;
uint counts;
//函數名稱:定時中斷函數
//函數功能:在時間判定后,更新數碼管顯示
void T0_INT(void) interrupt 1
{
TL0=(65536-50000)/256;
TH0=(65536-50000)%256;
time ++;
if (time>=10)
              {
                            time=0;
if(isChange==true)
    {
                        counts=0;
            types++;
if(types>9)types=0;
P0=disCode[types];
isChange=false;
    }
displayLed();
counts ++;
}
}
void main(void)
{
//函數名稱:主函數
TMOD=0x61;//0110 0001//方式一
TL0=(65536-50000)/256;//50ms
TH0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
time=0;
counts=0;
types=0;
pauseLed=0;
P0=disCode[types];
while(1)
{
              keyScan();
}
}
函數名稱:displayLed
函數功能:LED燈的顯示,共有十種變化,分別為順時針逐一點亮、逆時針逐一點亮、奇偶交替點亮閃爍、順時針逐一點亮、順時針逐一熄滅、逆時針逐一點亮、逆時針逐一熄滅 、對角順序點亮、對角倒序點亮、二進制加法點亮。                                                                                                                                 
void displayLed(void)
{
switch(types)
{
   case 0:
   {
   if(counts>=16)counts=0;
     if(counts>=15)
      {
        if(isAuto==true) isChange=true;
      }
if(counts <8)
{
P1=0xff;
P2=ledCode[7-counts];
}
else
{
P1=ledCode[15-counts];
P2=0xff;
}
break;
}
case 1:
{
if(counts >=16)counts=0;
if(counts >=15)
if(isAuto==true)isChange=true;
}
if(counts<8)
{
P1=ledCode[counts];
P2=0xff;
}
else
{
P1=0xff;
              P2=ledCode[counts-8];
}
break;
case 2:
{
if(counts>=16)counts=0;
if(counts>=15)
              {
if(isAuto==true) isChange=true;
}
if(counts%2==0)
{
P1=0xaa;
P2=0xaa;
}
else
{
P1=0x55;
P2=0x55;
}
break;
case 3:
{
if (counts>=17) counts=0;
if(counts<8)
{
P1=~ledCode2[7-counts];
              P2=0xff;
}
else if(counts <16)
{
P1=0x00;
P2=~ledCode2[15-counts];
}
else//全亮
{
P1=0x00;
P2=0x00;
if(isAuto==true)isChange=true;
}
break;
}
case 4:
{
if(counts>=17)counts=0;
if(counts<8)
{
P1=ledCode2[7-counts];
              P2=0x00;
}
else if(counts<16)
{
P1=0xff;
P2=ledCode2[15-counts];
}
else//全滅
{
P1=0xff;
P2=0xff;
if(isAuto==true) isChange=true;
}
break;
}
case 5:
{
if(counts>=17)counts=0;
if(counts <8)
{
P1=0xff;
P2=ledCode2[counts];}
else if(counts<16)
{
P1= ledCode2[counts-7];
P2=0x00;
}
else
{
P1=0x00;
P2=0x00;
if(isAuto==true)isChange=true;
}
break;}
case 6:
{
if(counts>=17)counts=0;
if(counts<8)
{
P1=0x00;
P2=~ledCode2[counts];
}
else if(counts <16)
{
P1=~ledCode2[counts-7];
              P2=0xff;
}
else
{
P1=0xff;
P2=0xff;
if(isAuto==true) isChange=true;
}
break;
}
case 7:
{
if(counts>=8)counts=0;
if(counts>=7){
if(isAuto==true)isChange=true;}
P1=ledCode[7-counts];
P2=ledCode[7-counts];
break;
}
case 8:
{
if(counts>=8)counts=0;
if(counts>=7)
{
if(isAuto==true)isChange=true;
}
P1=ledCode[counts];
P2=ledCode[counts];
break;
}
case 9:
{
if(counts>=255)counts=0;
if(counts==254&& isAuto==true)isChange=true;
P1=~counts;
P2=~counts;
break;
}
default:types=0;
P0=disCode[types];
}
}
}
void Delay10ms(uint n)
{
uchar a, b;
for(;n>0;n--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}
}

5電路仿真調試

      

5-1  燈光控制設計

5-2  燈光控制設計仿真圖


結論

1、對于該設計是以AT-89C51單片機為主控芯片,通過程序控制彩燈流水花樣。本文所給程序實現的功能比較簡單,旨在拋磚引玉,可以在此基礎上擴展成更復雜的彩燈控制,比如鍵盤控制流水花樣、控制流水燈顯示數字或圖案等等。通過花樣彩燈的制作,給我最大的體會是對一個程序整體的把握和控制,只有將子程序有效的結合起來,才能完成設計的目的。另外,在程序的調試過程中,我也遇到了很多意想不到的困難


本人初學,僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便大家保存,切勿照搬):
燈光控制設計.docx (255.76 KB, 下載次數: 11)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.色五月.com | 黄色在线免费播放 | 精品成人 | 亚欧洲精品在线视频免费观看 | 国产美女一区二区 | 91精品国产91久久久久游泳池 | 国产乱人伦精品一区二区 | 日韩国产中文字幕 | www..99re| 日韩高清一区 | 色天天综合| 黄色国产大片 | 一区二区在线 | 超碰国产在线 | www.com久久久 | 欧美一区二区在线看 | 日韩精品成人在线 | 国产精品夜夜春夜夜爽久久电影 | 亚洲一区二区三区四区五区午夜 | 一区二区三区四区国产 | 国产成人av电影 | av网站观看| 久久精品99久久 | 久久精品国产免费高清 | 黄色片视频免费 | 久久成人一区二区三区 | 亚洲一区二区三区在线播放 | 国产精品国产成人国产三级 | 日韩中文字幕久久 | 国产亚洲精品久久久久久牛牛 | 欧美日韩成人一区二区 | 日韩中文字幕在线播放 | 色中文在线 | 午夜合集| 99这里只有精品视频 | 99久久夜色精品国产亚洲96 | 黄色一级片aaa | 欧美精品片 | 91精品国产乱码麻豆白嫩 | 国产情侣在线看 | 日韩电影中文字幕 |