本帖最后由 菜鳥一個622 于 2022-1-22 10:26 編輯
想添加開時慢到快暗到亮然后一直正常亮度,關時快到慢亮到暗關閉,腦子有點寫蒙了。。。。一直運行不對,我知道bug肯定多,只是看教學視頻有些貫不通,麻煩大佬教下
#include <reg51.h> // <reg51.h>程序電腦實驗 <STC8G.h>實際
sbit key1=P3^0;
sbit PWM_out_pin=P0;
unsigned char dat1[4]={0xf1,0xf2,0xf4,0xf8};
unsigned char dat2[4]={0xfc,0xf9,0xf3,0xf6};
unsigned char dat3[4]={0xfe,0xfd,0xfb,0xf7};
//unsigned char duty_cut;
unsigned char MODE;
unsigned int count;
unsigned char slow;
unsigned int cnt;
unsigned char sec,min,hour,PWM_duty=50;
bit sign;
void delay (unsigned int x);
void mode1(void);
void mode2(void);
void mode3(void);
void keyscan(void);
void Init_T0(void);
void T0_IRQ(void);
void Init_T0(void)
{
TMOD &=0Xf0;
TMOD |=0x02;
TR0=1;
TL0=56;
TH0=56;
TF0=0;
ET0=1;
EA=1;
PT0=1;
}
void T0_IRQ(void) interrupt 1
{
cnt++;
if(cnt==0)
{
cnt=0;
// P0=0xff;
}
if(cnt<PWM_duty)
{
PWM_out_pin=1;
}
else
{
PWM_out_pin=0;
}
}
void main(void)
{
while(1)
{
keyscan();
switch(MODE)
{
case 0: P0=0xff;break;
case 1: mode1();break;
case 2: mode2();break;
case 3: mode3();break;
}
delay(1);
}
Init_T0();
PWM_duty=0;
P0=0xff;
while(2)
{
for(PWM_duty=0;PWM_duty<100;PWM_duty++)//暗到亮
{
delay(100);
}
{
for(PWM_duty=100;PWM_duty>0;PWM_duty--)//亮到暗
{
delay(100);
}
}
}
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<120;j++);//12T
// for(j=0;j<1200;j++);//1T STC8G
}
}
void mode1(void)
{
static unsigned char i;
static unsigned int j;
P0=dat1;
for(j=500;j>50;j--) //慢到快到快固定不知道對不對
if(++j>=50)
{
j=0
i=++i%4;
}
}
void mode2(void)
{
static unsigned char i;
static unsigned int j;
P0=dat2;
for(j=500;j>50;j--) //慢到快到快固定不知道對不對
if(++j>=50)
{
j=0;
i=++i%4;
}
}
void mode3(void)
{
static unsigned char i;
static unsigned int j;
P0=dat3;
for(j=500;j>50;j--) //慢到快到快固定不知道對不對
if(++j>=50)
{
j=0;
i=++i%4;
}
}
void keyscan(void)
{
if(key1==0)
{
if(count<501)count++;
if(count==500)//??
{
sign=~sign;
if(sign)
{
slow=MODE;
MODE=0;
}
else MODE=slow;
}
}
else
{
if(count>20 && count<500
{
++MODE;
if(MODE>3)
MODE=1;
}
count=0;
}
}
|