標題: 想添加開時慢到快暗到亮然后一直正常亮度,關時快到慢亮到暗關閉 [打印本頁]

作者: 菜鳥一個622    時間: 2022-1-22 10:25
標題: 想添加開時慢到快暗到亮然后一直正常亮度,關時快到慢亮到暗關閉
本帖最后由 菜鳥一個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;
        }   
}



作者: jiude    時間: 2022-1-22 17:30
一個簡單思路占空比初始5然后累加百分之五直到100固定,關就是減去百分之五直到5就關閉。
作者: 菜鳥一個622    時間: 2022-1-23 00:23
jiude 發(fā)表于 2022-1-22 17:30
一個簡單思路占空比初始5然后累加百分之五直到100固定,關就是減去百分之五直到5就關閉。

大佬我就是不知道該怎么寫。。。。占空比到100固定,和delay減少到某個值固定,怎么融入到開關和切換模式里面,我寫的程序都是B站看視頻學的,就是不知道對不對,怎么融入到程序里面。
作者: trouble123456    時間: 2022-1-24 13:56
菜鳥一個622 發(fā)表于 2022-1-23 00:23
大佬我就是不知道該怎么寫。。。。占空比到100固定,和delay減少到某個值固定,怎么融入到開關和切換模式 ...

加個標志位bit,漸亮時=1,漸暗時=0




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1