课程设计题四:LED彩灯控制器设计

2019-09-29来源: eefocus关键字:LED彩灯  控制器  STC89C51

要求:


1、至少10个发光管4种花样自动变换,循环往复。


2、彩灯花样变换的快慢节拍可以手动和自动方式控制,手动控制按钮按一次转换一次;自动控制方式每15秒变换一次,1分钟循环一遍。


3、系统复位清零开关。


一、Protues仿真图:

二、程序源码:

因为注释非常的全,这里就不再进行讲解了。

/*******************************************************************************

================================================================================

【平    台】STC89C51平台

【编    写】Sumjess

【E-mail  】1371129880@qq.com

【软件版本】V2.0

【最后更新】2018年09月06日

【相关信息参考下列地址】

【网    站】

  Sumejss博客  https://blog.csdn.net/qq_38351824

  电子发烧友  http://bbs.elecfans.com/zhuti_mcu_1.html

  中国电子网  http://bbs.21ic.com/icfilter-typeid-11-214.html

---------------------------------------------------------------------------------

【dev.env.】MDK4.14及以上版本

【Target  】STC89C51

第一次修订:2019/05/23

第二次修订:2018/05/24

第三次修订:2018/05/26

================================================================================

********************************************************************************/

#include          //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义 变量范围0~255

#define uint  unsigned int //无符号整型 宏定义 变量范围0~65535

 

sbit led0 = P0^0;   //led定义

sbit led1 = P0^1;   //led定义

sbit led2 = P0^2;   //led定义

sbit led3 = P0^3;   //led定义

sbit led4 = P0^4;   //led定义

sbit led5 = P0^5;   //led定义

sbit led6 = P0^6;   //led定义

sbit led7 = P0^7;   //led定义

sbit led8 = P2^0;   //led定义

sbit led9 = P2^1;   //led定义

 

sbit key0 = P3^2;   //定义手动控制按键

sbit key1 = P3^3;   //定义自动控制按键

 

uchar x =50;      //调节LED闪烁速率

uint js = 0,flag_auto=0;//定义计数15秒,自动变花样标志位

 

void delayms(uint z) //毫秒

{

uint x,y;

    for(x=z;x>0;x--)

      for(y=110;y>0;y--);   

}

 

void Timer0_init()       //定时器0初始化

{

TMOD=0x01; //设置定时器0为工作方式1(M1M0为01)

TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872

TL0=(65536-45872)%256;

ET0=1; //开定时器0中断

EA=1; //开总中断

}

 

void timer0() interrupt 1 using 1 //定时器0中断服务函数

{

TH0=(65536-45872)/256; //装初值11.0592M晶振定时50ms数为45872

TL0=(65536-45872)%256;

js++; //叠加20次 是一秒

if(js==300) 

  js=0; //清空

  flag_auto=flag_auto+1; //产生15s的倒计时

  if(flag_auto>3)  flag_auto=1; //限幅,最多4个花样

}

}

 

void LED0();  //花样1

void LED1();  //花样2

void LED2();  //花样3

void LED3();  //花样4

 

void main()

{

   Timer0_init(); //定时器初始化

   while(1)

   {

 

    if(key1==0)   //自动控制按键

    {  

      delayms(3); //去除按键抖动

      if(key1==0)

      { 

        while(!key1);     //以上表示按下开始按键

flag_auto=0;   //清零

        TR0=1;            //开启定时器

while(1)

{

  if(key0==0)    //调节到手动模式

  {

  TR0=0;      //关闭定时器

  js=0; flag_auto=0;//计数、自动换花样变量清零

  break;   //跳出

}

  switch(flag_auto)//花样自动变化

  {

  case 0:  LED0(); break;

  case 1:  LED1(); break;

  case 2:  LED2(); break;

  case 3:  LED3(); break;

  }

  }

      }

    }

    if(key0==0)   //手动控制按键

    {  

      delayms(3); //去除按键抖动

      if(key0==0)

      { 

while(1)

{

  if(key1==0)  //调节到自动模式

  {

  TR0=0;            //关闭定时器

  js=0; flag_auto=0;//计数、自动换花样变量清零

  break; //跳出

}

  if(key0==0)  ++flag_auto;//换花样

  if(flag_auto>3)  flag_auto=1; //限幅,最多4个花样

  switch(flag_auto) //花样手动变化

  {

  case 0:  LED0(); break;

  case 1:  LED1(); break;

  case 2:  LED2(); break;

  case 3:  LED3(); break;

  }

  }

}

     }

 

     }

  }

 

void LED0(){

led0 = 1;   //led赋值

delayms(x);

led1 = 1;   //led赋值

delayms(x);

led2 = 1;   //led赋值

delayms(x);

led3 = 1;   //led赋值

delayms(x);

led4 = 1;   //led赋值

delayms(x);

led5 = 1;   //led赋值

delayms(x);

led6 = 1;   //led赋值

delayms(x);

led7 = 1;   //led赋值

delayms(x);

led8 = 1;   //led赋值

delayms(x);

led9 = 1;   //led赋值

delayms(x);

led0 = 0;   //led赋值

delayms(x);

led1 = 0;   //led赋值

delayms(x);

led2 = 0;   //led赋值

delayms(x);

led3 = 0;   //led赋值

delayms(x);

led4 = 0;   //led赋值

delayms(x);

led5 = 0;   //led赋值

delayms(x);

led6 = 0;   //led赋值

delayms(x);

led7 = 0;   //led赋值

delayms(x);

led8 = 0;   //led赋值

delayms(x);

led9 = 0;   //led赋值

delayms(x);

}

void LED1(){

led0 = 1;   //led赋值

led1 = 1;   //led赋值

delayms(x);

led2 = 1;   //led赋值

led3 = 1;   //led赋值

delayms(x);

led4 = 1;   //led赋值

led5 = 1;   //led赋值

delayms(x);

led6 = 1;   //led赋值

led7 = 1;   //led赋值

delayms(x);

led8 = 1;   //led赋值

led9 = 1;   //led赋值

delayms(x);

led0 = 0;   //led赋值

led1 = 0;   //led赋值

delayms(x);

led2 = 0;   //led赋值

led3 = 0;   //led赋值

delayms(x);

led4 = 0;   //led赋值

led5 = 0;   //led赋值

delayms(x);

led6 = 0;   //led赋值

led7 = 0;   //led赋值

delayms(x);

led8 = 0;   //led赋值

led9 = 0;   //led赋值

delayms(x);

}

void LED2(){

led0 = 1;   //led赋值

led1 = 1;   //led赋值

led2 = 1;   //led赋值

delayms(x);

led3 = 1;   //led赋值

led4 = 1;   //led赋值

led5 = 1;   //led赋值

delayms(x);

led6 = 1;   //led赋值

led7 = 1;   //led赋值

led8 = 1;   //led赋值

led9 = 1;   //led赋值

delayms(x);

led0 = 0;   //led赋值

led1 = 0;   //led赋值

led2 = 0;   //led赋值

delayms(x);

led3 = 0;   //led赋值

led4 = 0;   //led赋值

led5 = 0;   //led赋值

delayms(x);

led6 = 0;   //led赋值

led7 = 0;   //led赋值

led8 = 0;   //led赋值

led9 = 0;   //led赋值

delayms(x);

}

void LED3(){

led0 = 1;   //led赋值

delayms(x);

led0 = 0;   //led赋值

delayms(x);

led1 = 1;   //led赋值

delayms(x);

led1 = 0;   //led赋值

delayms(x);

led2 = 1;   //led赋值

delayms(x);

led2 = 0;   //led赋值

delayms(x);

led3 = 1;   //led赋值

delayms(x);

led3 = 0;   //led赋值

delayms(x);

led4 = 1;   //led赋值

delayms(x);

led4 = 0;   //led赋值

delayms(x);

led5 = 1;   //led赋值

delayms(x);

led5 = 0;   //led赋值

delayms(x);

led6 = 1;   //led赋值

delayms(x);

led6 = 0;   //led赋值

delayms(x);

led7 = 1;   //led赋值

delayms(x);

led7 = 0;   //led赋值

delayms(x);

led8 = 1;   //led赋值

delayms(x);

led8 = 0;   //led赋值

delayms(x);

led9 = 1;   //led赋值

delayms(x);

led9 = 0;   //led赋值

delayms(x);

}

关键字:LED彩灯  控制器  STC89C51 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476091.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:课程设计题六:秒表
下一篇:课程设计题三:日历和数字钟

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

教你使用一个单片机IO口控制RGB彩灯,单总线LED灯使用教程
相信大家学习单片机的第一课就是点亮第一盏LED灯了吧,初次点亮LED的时候的心情肯定是很激动的,可以操控眼前这个小小的芯片完成自己编写的指令,顿时感觉到很奇妙。初次了解之后便会激发我们的探索精神,当学习了PWM之后,控制RGB彩灯随意调出千变万化的颜色肯定不再是难事,用在各种项目上,RGB灯会让作品更加鲜艳动人。在这美丽的背后,其实隐藏了很多的科学道理,RGB灯的颜色能千变万化的原因是因为其内部集成了3个独立的3原色灯珠,然后使用PWM波控制每个灯珠处在不同的亮度,便可以得到不同的色彩。但是一个RGB灯可能会占用多个端口,想控制很多个RGB灯便是有些难度,好在随着集成工艺的发展,这一切不再是问题,如今的工艺促使了一种新型灯珠的出现
发表于 2019-11-12
教你使用一个单片机IO口控制RGB彩灯,单总线LED灯使用教程
89C51的LED彩灯控制器设计
1引言  随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。LED彩灯由于其丰 富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用 彩灯来装饰街道和城市建筑物已经成为一种时尚。但目前市场上各式样的LED彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一,这样一旦制作成品只能按照固定的模式闪亮,不能根据不同场合、不同时间段的需要来调节亮灯时间、模式、闪烁频率等动态 参数。这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。因此有必要对现有的彩灯控制器进行改进。  本文提出了一种基于AT89C51 单片机 的彩灯控制
发表于 2018-01-16
89C51的LED彩灯控制器设计
STM8S103F---RGB LED彩灯条
; */ /*功能描述:控制RGB LED PWM调光                   */ /*作者:    ClimberWin                         
发表于 2016-09-06
STM8S103F---RGB LED彩灯条
用AVR单片机设计LED彩灯控制器
8个LED灯直接连接到Vcc 上,不需要限流电阻。本制作利用到同步定时器,及使用睡眠的方式节省电力。 如果你想改变LED接的管脚,请修改hardware.h文件。如果想修改LED的亮度,请修改globals.h 中的Timings 段定义。本设计外接了两个按钮,一个是选择工作模式,另一个是电源的开关。当你按下模式按钮1.5秒以上时,进入自动模式,会自动演示所有的预设模式。 实物图: 电路图:(点击可以放大) PCB图:(点击可以放大)
发表于 2014-12-08
用AVR单片机设计LED彩灯控制器
基于ATMEGA8的LED彩灯控制器设计
如果你想改变LED接的管脚,请修改hardware.h文件。如果想修改LED的亮度,请修改globals.h 中的Timings 段定义。本设计外接了两个按钮,一个是选择工作模式,另一个是电源的开关。当你按下模式按钮1.5秒以上时,进入自动模式,会自动演示所有的预设模式。8个LED灯直接连接到Vcc 上,不需要限流电阻。本制作利用到同步定时器,及使用睡眠的方式节省电力。实物图:电路图:PCB图:
发表于 2013-09-12
基于ATMEGA8的LED彩灯控制器设计
使用LabVIEW和CompactRIO设计并实现了动态输出反馈控制器
  麻省理工学院(MIT)的反馈控制系统课程专注于使用经典的控制和状态空间技术设计和分析控制系统。 此门课程向本科生和研究生开放,每年秋季大约招收20名学生。 课程的一部分内容要求学生设计并实现一系列实验室模块中物理系统的翻转、俯冲和偏航控制器。 学生使用根轨迹、Bode图和其他技术来设计经典的控制器,采用线性二次调节器(LQR)、线性二次型高斯(LQG)和动态输出反馈(DOFB)设计开发状态空间控制器。 学生使用LabVIEW控制设计与仿真模块 和LabVIEW MathScript RT模块实现状态反馈、状态估计和动态控制定律设计。 学生通过模拟验证他们的控制器之后,使用CompactRIO、LabVIEW 
发表于 2019-11-14
使用LabVIEW和CompactRIO设计并实现了动态输出反馈控制器
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved