(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按键获取流程图 代码如下所示
- uchar KeyScanf()
- {
- uchar keyvalue = 0; //第几个按键被按下的值
- if(KEY1 == 0) //判断按键有没有被按下
- {
- Delay1ms(10); //延时一段时间
- if(KEY1 == 0) //再次判断按键优美按下
- {
- keyvalue = 1;
- }
- while(!KEY1); //按键有没有松开
- }
- return keyvalue; //返回按键按下的值
- }
复制代码
(2)彩灯开启和关闭的软件设计 彩灯的IO口接在了单片机的P2^0~P2^7管脚,所以在控制彩灯的时候我们可以直接对单片机的P2口进行操作,当按键1被安下的时候彩灯开关标志置1,然后对P2口P2口写入P2=0x00;彩灯关闭操作是彩灯开关标志置0,对P2口写入P2=0xff;这样就关闭了彩灯。彩灯开启和关闭流程图如下所示 
图3.8彩灯开启和关闭流程图 代码如下所示:
- if(keyvalue == 1) //按键1控制开关灯
- LEDSwitch = !LEDSwitch; //开关灯标志位改变
- if(LEDSwitch == 1){
- P2 = 0x00; //点亮全部彩灯}
- else{
- P2 = 0xff; //熄灭全部彩灯
- }
复制代码
(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)
|