資源簡介
本論文著重闡述了LED彩燈控制器的設計方法,以AT89C51單片機作為主控核心,按鍵、數碼管等較少的輔助硬件電路相結合,采用模塊設計,利用軟件實現對LED彩燈進行控制。本系統具有體積小、硬件少、電路結構簡單、軟件功能完善,控制系統可靠,性價比較高等優點。
論文主要論述了基于單片機的LED彩燈控制器的設計過程。主要工作如下:重點論證了系統方案的選擇及其實現方法;全文詳細論述了系統的軟、硬件電路,其中硬件部分重點介紹了單片機的基本結構和各引腳以及晶振電路、復位電路的工作原理,軟件部分重點敘述主程序和子程序的C語言實現;硬件、軟件電路調試過程;所有源程序均采用C語言編譯,并在Keil uVision2軟件里編譯、調試;在Proteus環境下實現軟、硬件電路仿真。實驗結果證明了設計方案的正確性與可行性,以此為理論基礎,對我們設計彩燈電路具有很強的使用和參考價值。

代碼片段和文件信息
#include?
unsigned?char?RunMode;
//**********************************System?Fuction*************************************************
void?Delay1ms(unsigned?int?count)
{
unsigned?int?ij;
for(i=0;i for(j=0;j<120;j++);
}
unsigned?char?code?LEDDisplayCode[]?=?{?0xC00xF90xA40xB00x990x920x820xF8 //0~7
?????????????????????????? 0x800x900x880x830xC60xA10x860x8E0xFF};
void?Display(unsigned?char?Value)
{
P3?=?LEDDisplayCode[Value];
}
void?LEDFlash(unsigned?char?Count)
{
unsigned?char?i;
bit?Flag;
for(i?=?0;?i {
Flag?=?!Flag;
if(Flag)
Display(RunMode);
else
Display(0x10);
Delay1ms(100);
}
Display(RunMode);
}
unsigned?char?GetKey(void)
{
unsigned?char?KeyTempCheckValueKey?=?0x00;
CheckValue?=?P2&0x32;
if(CheckValue==0x32)
return?0x00;
Delay1ms(10);
KeyTemp?=?P2&0x32;
if(KeyTemp==CheckValue)
return?0x00;
if(!(CheckValue&0x02))
Key|=0x01;
if(!(CheckValue&0x10))
Key|=0x02;
if(!(CheckValue&0x20))
Key|=0x04;
return?Key;
}
unsigned?int?TimerCountSystemSpeedSystemSpeedIndex;
void?InitialTimer2(void)
{
TMOD??=?0x01; //16?Bit?Auto-Reload?Mode
? TH2?=?RCAP2H?=?0xFC;//重裝值初始值 TL2?=?RCAP2L?=?0x18;
????????TL2?=?RCAP2L?=?0x18;
ET2=1; //定時器?2?中斷允許
TR2?=?1; //定時器?2?啟動
EA=1;
}
unsigned?int?code?SpeedCode[]={???1???2???3???5???8??10??14??17??20??30
?????40??50??60??70??80??90?100?120?140?160
180?200?300?400?500?600?700?800?9001000};//30
void?SetSpeed(unsigned?char?Speed)
{
SystemSpeed?=SpeedCode[Speed];
}
void?LEDShow(unsigned?int?LEDStatus)
{
P1?=?~(LEDStatus&0x00FF);
P0?=?~((LEDStatus>>8)&0x00FF);
}
void?InitialCPU(void)
{
RunMode?=?0x00;
TimerCount?=?0;
SystemSpeedIndex?=?10;
P1?=?0x00;
P0?=?0x00;
P2?=?0xFF;
P3?=?0x00;
Delay1ms(500);
P1?=?0xFF;
P0?=?0xFF;
P2?=?0xFF;
P3?=?0xFF;
SetSpeed(SystemSpeedIndex);
Display(RunMode);
}
//Mode?0
unsigned?int?LEDIndex?=?0;
bit?LEDDirection?=?1LEDFlag?=?1;
void?Mode_0(void)
{
LEDShow(0x0001< LEDIndex?=?(LEDIndex+1)%16;
}
//Mode?1
void?Mode_1(void)
{
LEDShow(0x8000>>LEDIndex);
LEDIndex?=?(LEDIndex+1)%16;
}
//Mode?2
void?Mode_2(void)
{
if(LEDDirection)
LEDShow(0x0001< else
LEDShow(0x8000>>LEDIndex);
if(LEDIndex==15)
LEDDirection?=?!LEDDirection;
???LEDIndex?=?(LEDIndex+1)%16;
}
//Mode?3
void?Mode_3(void)
{
if(LEDDirection)
LEDShow(~(0x0001< else
LEDShow(~(0x8000>>LEDIndex));
if(LEDIndex==15)
LEDDirection?=?!LEDDirection;
???LEDIndex?=?(LEDIndex+1)%16;
}
//Mode?4
void?Mode_4(void)
{
if(LEDDirection)
{
if(LEDFlag)
LEDShow(0xFFFE< ??? else
LEDShow(~(0x7FFF>>LEDIndex));
}
else
{
if(LEDFlag)
LEDShow(0x7FFF>>LEDIndex);
else
LEDShow(~(0xFFFE< }
if(LEDIndex==15)
{
LEDDirection?=?!LEDDirection;
if(L
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.???????162??2010-06-10?17:13??畢業設計\~$畢業論文.doc
?????文件?????158833??2010-06-06?01:32??畢業設計\仿真\Last?Loaded?單片機彩燈.DBK
?????文件???????5160??2010-05-30?17:37??畢業設計\仿真\單片機彩燈.c
?????文件?????158822??2010-06-09?18:06??畢業設計\仿真\單片機彩燈.DSN
?????文件???????3990??2010-05-30?18:45??畢業設計\仿真\單片機彩燈.hex
?????文件????????742??2010-06-10?11:52??畢業設計\仿真\單片機彩燈.PWI
?????文件?????748544??2010-06-10?10:49??畢業設計\答辯.ppt
?????文件?????111104??2010-06-09?19:04??畢業設計\英文翻譯.doc
?????目錄??????????0??2010-06-10?11:52??畢業設計\仿真
?????目錄??????????0??2010-06-10?17:14??畢業設計
?????文件?????516608??2010-06-09?18:21??畢業設計\畢業論文.doc
-----------?---------??----------?-----??----
??????????????1703965????????????????????11
評論
共有 條評論