标题: 单片机pwm按键调光不起作用,是哪里有错误啊? [打印本页]

作者: 125844584    时间: 2020-4-4 15:04
标题: 单片机pwm按键调光不起作用,是哪里有错误啊?

#include <REG51.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char
//******************adc0832****************************//
sbit CLK=        P2^2;//时钟,初始状态为0
sbit DI=        P2^3;//数据输入
sbit DO=        P2^1; // 数据输出
sbit CS=        P2^0;
//******************按钮****************************//
sbit start =P2^4;
sbit end=P2^5;
sbit led=P3^5;
sbit down = P3^0;
sbit up = P3^1;

uchar start_flag;//开始标志
//延时
void delay(uchar i)
{
        while(i--)
        {
                if(!end)                         //end按钮按下
                        start_flag=0;
        }
}
/*******************亮灯函数***************/
void led_red(uchar i)//占空比i/13
{
        led=0;
        delay(i/10);
        if(i/10<12)
        {
                led=1;
                delay(12-i/10);
        }
}
/*********************************************
读取ADC
**********************************************/
uchar ADC()//通道ch0
{
        uchar temp0,temp1,i;
        CS=0;
        temp0=0;
        temp1=0;
        _nop_();
        _nop_();
        DI=1;//开始位
        _nop_();
        _nop_();
        CLK=1;
        _nop_();
        _nop_();
        CLK=0;
        _nop_();
        _nop_();
        DI=0;
        _nop_();
        _nop_();
//选择通道0
                DI=1;
                _nop_();
                CLK=1;//上升沿DI=1
                _nop_();
                CLK=0;//1个下降沿DI=1
                _nop_();
                DI=0;
                _nop_();
                CLK=1;
                _nop_();
                CLK=0;//第3个上升沿DI=0
                _nop_();
                   DI=1;
//********通道选择结束开始读取转换后的二进制数****
//下降沿读数,一下进行判断和处理,共8次
for(i=0;i<8;i++)
   {
        temp0=temp0<<1;
        CLK=1;
    if(DO)
           temp0++;
           _nop_();
           CLK=0;
   }
for(i=0;i<8;i++)
   {
        temp1=temp1>>1;
        CLK=1;
    if(DO)
           temp1=temp1 +0x80;
           _nop_();
           CLK=0;
   }
         CS=1;
   return temp0;
}
//*********************************************
void main()
{
        uchar num,i,t;
        CLK=0;//ADC时钟初始化
        start_flag=0;
while(1)
        {
//按键检测
        if(!start)                         //start按钮按下
                {
                start_flag=1;
                }
        if(!end)                         //end按钮按下
                {
                start_flag=0;
                }
               
        if(start_flag)
        {
     if(!up)
                         {
                                if(t<i)
                                        {
                                          t++;
                                        }
                                
                                delay(100);
                        }
                 if(!down)
                         {
                                if(t>0)
                                        {
                                          t--;
                                        }
                                
                        delay(100);
                        }

                num=ADC();
                P1=num;
                for(i=0;i<100;i++)
                        led_red(num);
        }
        }
}



pwm调光.zip

46.75 KB, 下载次数: 7


作者: wulin    时间: 2020-4-5 06:58
仿真软件无法观察到PWM驱动LED调光效果。只能通过虚拟示波器观察占空比来确认。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1