登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] LED灯的那些事儿

[复制链接]
发表于 2019-1-20 21:12:10 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机以及单片机c语言编程
学习安排: 利用寒假时间尽快掌握单片机的有关知识
重点是单片机的编程
开始时间: 2019-01-20
结束时间: 2019-02-20
看一下原理图   程序不难,主要是思想,还请各位高手斧正
#include<reg52.h> XUL5~T(DASJEP~W@%9G$O.png
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
sbit LED0 = P0^0;
void delay(unsigned int t);//声明一个delay延时函数
void main()
{
        unsigned char i;
        while(1)
        {
                for(i=0;i<10;i++)//第一个for循环以一种频率闪烁
                {
                        LED0 = 0;
                        delay(6000);
                        LED0 = 1;
                        delay(6000);
                }
                for(i=0;i<10;i++)//第二个for循环以另一种频率闪烁
                {
                        LED0 = 0;
                        delay(50000);
                        LED0 = 1;
                        delay(50000);
                }
        }       
}       
void delay(unsigned int t)//定义的延时函数内容
{
        while(--t);
}       

直接来代码吧  图片不知道咋回事  上传不了这是一段用PWM(脉宽调制)方式调节LED亮度的程序,原理看最下面
#include<reg52.h>
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
sbit LED0 = P0^0;
void delay(unsigned int t);//定义一个延时函数delay
void main()
{
        unsigned int T1=1500,T2=0;//定义2个无符号整形变量T1,T2;T1为LED的发光周期的时间值,T2为LED的点亮时间值。
        ADDR0 = 0;
        ADDR1 = 1;
        ADDR2 = 1;
        ENLED = 0;
        while(1)//无限循环
        {
                for(T2=1;T2<T1;T2++)//第一个for循环,如果把呼吸灯比喻为人的呼吸的话,定义吸气阶段LED越来越亮,呼气阶段LED越来越暗,则此阶段就是吸气阶段
                {
                        LED0 = 0;
                        delay(T2);
                        LED0 = 1;
                        delay(T1-T2);
                }
                for(T2=T1-1;T2>0;T2--)第二个for循环  此阶段是呼气阶段
                {
                        LED0 = 0;
                        delay(T2);
                        LED0 = 1;
                        delay(T1-T2);
                }
        }       
}       
void delay(unsigned int t)//自定义的延时函数
{
        while(--t);
}       
调节LED亮度可以用2种方式:一是改变LED的流过的电流大小来调节亮度,二是改变LED通电时间长短来调节LED的亮度,LED通电时间越长亮度越高。由于单片机的P端口只能输出5V和0V的电压,无法使用前者,因此,只能采用后 改变LED的通电时间长短来调节亮度。



  如果让单片机的P0^0引脚输出脉冲信号,在脉冲信号的第一个周期内,LED0=0使LED亮,但持续时间很短,所以亮度暗,LED0=1使LED无电流通过,但余晖效应会使LED具有一定的亮度,改时间持续越长,LED越暗;在脉冲信号的第二个周期内,LED0=0的时间略有变长,LED0=1的持续时间略有变短,LED稍微变亮,当脉冲信号的第499个周期来时,LED0=0的持续时间最长,LED0=1的持续时间最短,此时LED最亮,也就是说,当单片机输出的脉冲宽度越来越窄时,LED会逐渐变亮。
  如果让单片机输出脉冲宽度逐渐变宽的脉冲信号时,脉冲信号的第一个周期内LED0=0的持续时间最长,LED0=1的持续时间最短,LED最亮,在后面的周期内,LED0=0的持续时间越来越短,LED0=1的持续时间越来越长,LED越来越暗,在脉冲信号第499个周期到来时,LED0=0的持续时间最短,LED0=1 的持续时间最长,LED最暗,如果脉冲信号的宽度不变,LED的亮度不变。

评分

参与人数 1铜板 +4 收起 理由
如果让他嘎斯 + 4 赞一个!

查看全部评分

好懒~~不想说~~~
发表于 2019-1-21 01:41:26 | 显示全部楼层
pwm推荐放在中断里,放在while循环,总担心会出现奇奇怪怪的状况( &#8226; &#768;ω&#8226;&#769; )&#10023;
Carpe.Diem.
发表于 2019-1-20 21:45:36 | 显示全部楼层
include后是不是要有一个头文件呀
知行合一
 楼主| 发表于 2019-1-21 20:55:12 | 显示全部楼层
1727980547 发表于 2019-1-20 21:45
include后是不是要有一个头文件呀

~~~~对的呀~~~~
好懒~~不想说~~~
 楼主| 发表于 2019-1-21 20:57:40 | 显示全部楼层
如果让他嘎斯 发表于 2019-1-21 01:41
pwm推荐放在中断里,放在while循环,总担心会出现奇奇怪怪的状况( &#8226; &#768;ω&#8226;&#769; )&#10023 ...

~~~~有道理,我要试试
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表