标题: 如果你自认为高手就来试试这个! [打印本页]

作者: wjw0532    时间: 2008-8-25 21:18
标题: 如果你自认为高手就来试试这个!
最简单的流水肯定难不倒自认为高手的您啦,题目也是非常的简单,8个流水灯,要求第一个1/8亮,第二个2/8亮,第三个3/8亮第四个4/8亮,一直到第八个8/8亮也就是全亮!也许您说了,单片机是数字电路,没有模拟的信号,不可能作到半亮半不亮的状态,其实也不完全是这个样子的.好好想办法还是有的!
作者: xiaoyi    时间: 2008-8-25 23:43
我不是什么高手,但感觉该题不是很难,
可以使用2 个不同的变量,一个控制8个流水灯的公共线电源,另一个变量控制相应部分的另一端就可以了吧
就象动态控制LED显示一样。
  
作者: haikuan    时间: 2008-8-27 14:37

可不可以用串电阻限流的方法啊!就好像电气工程里电动机串电阻降压启动那样? 有时间试试!楼主应该给点提示啊!


作者: zn123717885    时间: 2008-8-28 10:28
用方波占空比来控制LED亮度  LED视频大屏幕就是这样控制的
作者: a13758777532    时间: 2008-8-28 12:36
PWM技术
作者: wangguiqing2008    时间: 2008-8-29 19:28
看看
作者: fdsa    时间: 2008-9-8 16:55
其实我觉得用动态扫描就OK,
控制好亮灯的时间长度和灭灯的时间长度,
就应该可以控制亮度
作者: yangyi153    时间: 2008-9-10 10:52
看不懂  不过 过几天就会了
作者: 美琴的备胎    时间: 2021-4-9 11:22
pwm正解

作者: 3486635230    时间: 2021-4-10 07:59
PWM脉宽调制
作者: koboman    时间: 2021-4-11 20:59
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int

sbit light1=P1^7;
sbit light2=P1^6;
sbit light3=P1^5;
sbit light4=P1^4;
sbit light5=P1^3;
sbit light6=P1^2;
sbit light7=P1^1;
sbit light8=P1^0;
                                                                                                                                                                                                                                                                                                                                                                               

void Timer0 () interrupt 1
{
    static uchar count;
        TH0=(65536-4500)/256; //装初值12M晶振定时50ms数为5000
        TL0=(65536-4500)%256;
        count++;

        if(count==1){light1=1;light2=1;light3=1;light4=1;light5=1;light6=1;light7=1;light8=0;}         
        if(count==2){light1=1;light2=0;light3=0;light4=0;light5=0;light6=0;light7=0;light8=0;}  
        if(count==3){light1=1;light2=1;light3=1;light4=1;light5=1;light6=0;light7=0;light8=0;}  
        if(count==4){light1=0;light2=1;light3=0;light4=0;light5=0;light6=0;light7=0;light8=0;}  
        if(count==5){light1=1;light2=0;light3=1;light4=1;light5=1;light6=1;light7=0;light8=0;}  
        if(count==6){light1=1;light2=1;light3=0;light4=0;light5=0;light6=0;light7=0;light8=0;}  
        if(count==7){light1=1;light2=1;light3=1;light4=1;light5=0;light6=0;light7=0;light8=0;}  
        if(count==8){light1=1;light2=1;light3=1;light4=0;light5=0;light6=0;light7=0;light8=0;count=0;}  
}


void main()
{
        TMOD=0x11;        //将定时器0设置成工作方式1
        TH0=(65536-4500)/256; //装初值12M晶振定时50ms数为5000
        TL0=(65536-4500)%256;


        EA=1; //开总中断
        ET0=1; //开中断
        TR0=1;//开关计时器0

        while(1)
   {

    }
}

作者: xiexugang    时间: 2021-4-12 00:34
用PWM方法,8级分辨率就行了.
koboman 的PWM写的不错.




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