找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2254|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机学习:写了个led宏,并尝试控制led灯的亮度

[复制链接]
跳转到指定楼层
楼主
ID:161768 发表于 2017-1-14 23:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经常用led灯来观察现象,甚至调试代码,修改代码时用0和1很不方便,而且阅读性也不好,
故写了个宏,用起来方便些.
今天尝试控制灯的亮度. 先试试for循环控制,占空比调节...
源程序:
  1. //#include "my51.h"
  2. #include <reg52.h>
  3. typedef unsigned char  u8;
  4. typedef unsigned short int u16;

  5. #ifndef _51LED_
  6. #define _51LED_
  7. #define led           P1                               //P1总线连8个led灯,灯连573锁存器,P1置低电平点亮
  8. #define LED                  led
  9. #define ON(x)     P1&(~(1<<(x)))         //打开某个灯,开多个灯用 ON(m) & ON(n)
  10. #define OFF(x)    P1|(1<<(x))                  //关闭某个灯,关多个灯用 OFF(m)| OFF(n)
  11. #define on(x)          ON(x)                                 //包含大小写
  12. #define off(x)          OFF(x)

  13. #define ledon     0                                         //某个灯,打开
  14. #define ledoff    1                                         //某个灯,关闭

  15. sbit led0=P1^0;     
  16. sbit led1=P1^1;
  17. sbit led2=P1^2;
  18. sbit led3=P1^3;
  19. sbit led4=P1^4;
  20. sbit led5=P1^5;
  21. sbit led6=P1^6;
  22. sbit led7=P1^7;       
  23. sbit ledLock=P2^5;        //锁定当前8个led的状态,0锁定 ,1不锁定

  24. #endif

  25. void ledCtr(u8 ledX,u8 per)                //参数1是某个灯,参数2是亮度
  26. {
  27.         u8 i=1;
  28.         for(i=1;i<=100;i++)
  29.         {
  30.                 if(i<per)
  31.                 {
  32.                         led=on(ledX) ;                //打开灯
  33.                 }
  34.                 else
  35.                 {
  36.                         led=off(ledX);                //关闭灯
  37.                 }
  38.         }
  39. }

  40. void delayms(u16 ms)                     //毫秒级软延时函数
  41. {       
  42.         u16 i,j;
  43.         for(i=ms;i>0;i--)
  44.         {
  45.         for(j=113;j>0;j--)
  46.         {}
  47.         }
  48. }

  49. void main()                                    //测试
  50. {
  51.         led6=ledon;                            //打开6号灯,亮度100%
  52.         led=on(0);                                //打开0号灯,亮度100%
  53.         led=on(1) & on(5);          //打开1号和5号灯,亮度100%


  54.         delayms(2000);

  55.         led0=ledoff;                         //关闭0号灯
  56.         led=off(6)|off(1)|off(5);//关闭1,5,6号灯
  57.         while(1)
  58.         {               
  59.                   ledCtr(2,5);             //仅打开2号灯,亮度5%, 省电...
  60.         }
  61. }
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:66287 发表于 2018-7-31 08:43 | 只看该作者
不错,学习单片机就要有这个劲头
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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