登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看2471|回3|收藏
楼主 ID:1002664 只看他
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;
        }   
}


沙发 ID:697723 只看他
2022-1-22 17:30
一个简单思路占空比初始5然后累加百分之五直到100固定,关就是减去百分之五直到5就关闭。
板凳 ID:1002664 只看他
2022-1-23 00:23

引用:

jiude 发表于 2022-1-22 17:30
一个简单思路占空比初始5然后累加百分之五直到100固定,关就是减去百分之五直到5就关闭。

大佬我就是不知道该怎么写。。。。占空比到100固定,和delay减少到某个值固定,怎么融入到开关和切换模式里面,我写的程序都是B站看视频学的,就是不知道对不对,怎么融入到程序里面。
地板 ID:766634 只看他
2022-1-24 13:56

引用:

菜鸟一个622 发表于 2022-1-23 00:23
大佬我就是不知道该怎么写。。。。占空比到100固定,和delay减少到某个值固定,怎么融入到开关和切换模式 ...

加个标志位bit,渐亮时=1,渐暗时=0

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版