单片机补充案例--数字IO口呼吸灯

举报
zhangrelay 发表于 2021/07/15 00:41:34 2021/07/15
【摘要】 说明:不使用PWM口,而是使用数字口和时延函数模拟,从而实现普通IO口对LED灯的亮度控制。 设备: LED灯 这个案例用于解释常见的一种设计思想:软解码和硬解码。 软解码:需要使用CPU实现; 硬解码:需要定时器等硬件支持。 程序: 循环演示 #include <8052.h> #define LSA P1_5 #defi...

说明:不使用PWM口,而是使用数字口和时延函数模拟,从而实现普通IO口对LED灯的亮度控制。

设备:

这个案例用于解释常见的一种设计思想:软解码硬解码

软解码:需要使用CPU实现;

硬解码:需要定时器等硬件支持。

程序:

循环演示


  
  1. #include <8052.h>
  2. #define LSA P1_5
  3. #define LSB P1_6
  4. #define LSC P1_7
  5. #define Led P0
  6. int main(void)
  7. {
  8. unsigned int a;
  9. LSA = 0;
  10. LSB = 0;
  11. LSC = 0;
  12. while(1)
  13. {
  14. Led = 0x00;
  15. //a = 50000;
  16. //a = 9;
  17. //a = 1; //1000
  18. a=100;
  19. while(a--);
  20. Led = 0xff;
  21. //a = 50000;
  22. //a = 1;
  23. //a = 9;
  24. a=900;
  25. while(a--);
  26. }
  27. }

外部控制


  
  1. #include<8052.h>
  2. #define LSA P1_5
  3. #define LSB P1_6
  4. #define LSC P1_7
  5. #define Led P0
  6. char brightness=0,a=0;
  7. void EXint_Init(void);
  8. void Delayms(unsigned int);
  9. void EXINT0() __interrupt 0;
  10. void main()
  11. {
  12. EXint_Init();
  13. LSA=0;
  14. LSB=0;
  15. LSC=0;
  16. while(1)
  17. {
  18. Led = 0x00;
  19. a=brightness;
  20. while(a--);
  21. Led = 0xff;
  22. a=255;
  23. while(a--);
  24. }
  25. }
  26. void EXint_Init()
  27. {
  28. IT0=1;
  29. IT1=0;
  30. // IPH=0x40;
  31. PX1=1;
  32. EA=1;
  33. EX0=1;
  34. EX1=1;
  35. }
  36. void Delayms(unsigned int xms)
  37. {
  38. unsigned int i,j;
  39. for(i = xms;i > 0;i--)
  40. {
  41. for (j = 110;j > 0;j--);
  42. }
  43. }
  44. void EXINT0() __interrupt 0
  45. {
  46. brightness++;
  47. }

 

 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/109667001

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。