找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2496|回復(fù): 3
收起左側(cè)

想添加開(kāi)時(shí)慢到快暗到亮然后一直正常亮度,關(guān)時(shí)快到慢亮到暗關(guān)閉

[復(fù)制鏈接]
ID:1002664 發(fā)表于 2022-1-22 10:25 | 顯示全部樓層 |閱讀模式
本帖最后由 菜鳥(niǎo)一個(gè)622 于 2022-1-22 10:26 編輯

想添加開(kāi)時(shí)慢到快暗到亮然后一直正常亮度,關(guān)時(shí)快到慢亮到暗關(guān)閉,腦子有點(diǎn)寫(xiě)蒙了。。。。一直運(yùn)行不對(duì),我知道bug肯定多,只是看教學(xué)視頻有些貫不通,麻煩大佬教下
#include  <reg51.h> // <reg51.h>程序電腦實(shí)驗(yàn)  <STC8G.h>實(shí)際


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--)  //慢到快到快固定不知道對(duì)不對(duì)
       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--)  //慢到快到快固定不知道對(duì)不對(duì)
       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--)  //慢到快到快固定不知道對(duì)不對(duì)
       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;
        }   
}


回復(fù)

使用道具 舉報(bào)

ID:697723 發(fā)表于 2022-1-22 17:30 | 顯示全部樓層
一個(gè)簡(jiǎn)單思路占空比初始5然后累加百分之五直到100固定,關(guān)就是減去百分之五直到5就關(guān)閉。
回復(fù)

使用道具 舉報(bào)

ID:1002664 發(fā)表于 2022-1-23 00:23 來(lái)自觸屏版 | 顯示全部樓層
jiude 發(fā)表于 2022-1-22 17:30
一個(gè)簡(jiǎn)單思路占空比初始5然后累加百分之五直到100固定,關(guān)就是減去百分之五直到5就關(guān)閉。

大佬我就是不知道該怎么寫(xiě)。。。。占空比到100固定,和delay減少到某個(gè)值固定,怎么融入到開(kāi)關(guān)和切換模式里面,我寫(xiě)的程序都是B站看視頻學(xué)的,就是不知道對(duì)不對(duì),怎么融入到程序里面。
回復(fù)

使用道具 舉報(bào)

ID:766634 發(fā)表于 2022-1-24 13:56 | 顯示全部樓層
菜鳥(niǎo)一個(gè)622 發(fā)表于 2022-1-23 00:23
大佬我就是不知道該怎么寫(xiě)。。。。占空比到100固定,和delay減少到某個(gè)值固定,怎么融入到開(kāi)關(guān)和切換模式 ...

加個(gè)標(biāo)志位bit,漸亮?xí)r=1,漸暗時(shí)=0
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表