资源简介
本论文着重阐述了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
评论
共有 条评论