标题: 51单片机学习:写了个led宏,并尝试控制led灯的亮度 [打印本页]

作者: 51黑电子迷    时间: 2017-1-14 23:21
标题: 51单片机学习:写了个led宏,并尝试控制led灯的亮度
经常用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. }
复制代码





作者: bhjyqjs    时间: 2018-7-31 08:43
不错,学习单片机就要有这个劲头




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