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

要求:

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

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

3、系统复位清零开关。

获取该 程序+protues 的方式:

1、CSDN下载:

https://download.csdn.net/download/qq_38351824/11274657

2、关注微信公众号下载:

     ① 关注微信公众号:Tech云  

     ②

3、可以关注点赞并在下方评论,我给你邮箱发过去。

一、Protues仿真图:

课程设计题四:LED彩灯控制器设计_第1张图片

课程设计题四:LED彩灯控制器设计_第2张图片

课程设计题四:LED彩灯控制器设计_第3张图片

二、程序源码:

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

/*******************************************************************************
================================================================================
【平    台】STC89C51平台
【编    写】Sumjess
【E-mail  】[email protected]
【软件版本】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);
}

 

你可能感兴趣的:(北京交通大学海滨学院单片机课设,STC51精通+项目,protues,按键扫描与调试,定时器的应用)