#include
#define dutymax 50
#define uchar unsigned char
#define uint unsigned int
//sbit led1 = P1^0;
//sbit led2 = P1^1;
//sbit led3 = P1^2;
//sbit led4 = P1^3;
//sbit led5 = P1^4;
//sbit led6 = P1^5;
//sbit led7 = P1^6;
//sbit led8 = P1^7;
sbit key = P3^0;//S2按键位定义
//sbit key_s3 = P3^1;
int state = 1;
void delay_ms (uint t)
{
uint i , j;
for(i = 0;i < t;i ++)
{
for (j = 0;j < 124;j ++);
}
}
void main()
{
while (1)
{
uchar n;
if(key == 0)//判断S2是否按键
{
delay_ms(5);//软件延时
if(key == 0)
{
state = 1 - state;
}
while(!key); //松手检测
}
if (key == 1 && state == 1)
{
if (n == 0x00)
{
n = 0x01;
P1 = ~n;
}
delay_ms (1000);
n = n << 1;
P1 = ~n;
}
else if (key == 1 && state == 0)
{
if (n == 0x00)
{
n = 0x80;
P1 = ~n;
}
delay_ms (1000);
n = n >> 1;
P1 = ~n;
}
}
}
这段代码已经可以实现流水灯并且按键使流水灯方向改变的操作,但是如何加入代码使灯同时具有呼吸效果呢,尝试多次均现只呼吸不流水的情况,需要代码解答
呼吸灯代码:
#include "reg52.h"
sbit LedHuxi1=P1^0;
#define time (65536-1000) // 单次定时1ms
unsigned char T_High, T, ti, dir;
void InitTimer0(void)
{
TMOD=0x01;
TL0 = time; //initial timer1 low byte
TH0 = time >> 8; //initial timer1 high byte
TR0 = 1; //timer1 start running
ET0 = 1; //enable timer1 interrupt
EA = 1; //open global interrupt switch
}
void Delay(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<255;j++)
;
}
void main(void)
{
T_High=0; //高电平
T=30; //周期
ti=0;
dir=0;
InitTimer0();
while(1){
Delay();
if((T_High<T)&&(dir==0))
T_High++;
else if(T_High==T) {
dir=1;
T_High--;
}
else if((T_High>0)&&(dir==1))
T_High--;
else
dir=0;
}
}
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1
{
TL0 = time;
TH0 = time >> 8;
if(ti<T_High){
LedHuxi1=1;
ti++;
}else if(ti<T){
LedHuxi1=0;
ti++;
}else{
ti=0;
}
}
融合你的while (1)就能达到要求
呼吸控制的是灯的亮度变换,流水控制的是灯亮与否,就看你的流水灯是想所有灯一个节奏呼吸还是各个灯独立控制,只要在流水的基础上加上对应的PWM亮度控制就ok了。