要求:
1、至少10个发光管4种花样自动变换,循环往复。
2、彩灯花样变换的快慢节拍可以手动和自动方式控制,手动控制按钮按一次转换一次;自动控制方式每15秒变换一次,1分钟循环一遍。
3、系统复位清零开关。
1、CSDN下载:
2、关注微信公众号下载:
① 关注微信公众号:Tech云
②
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);
}