找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1484|回复: 1
收起左侧

2.1单片机学习的第二课—简易的流水灯

[复制链接]
ID:665144 发表于 2020-6-21 17:28 | 显示全部楼层 |阅读模式
学习了学单片机必会学到的流水灯设计,分享给大家:
一个为普通的,一个为个人小创意;
普通的:
2.jpg
普通版:
  1. #include <reg51.h>                                                   
  2. void delay1s()                                                    //延时函数(利用空循环延时1s)
  3. {                                                                                         
  4.     int i ,j;                                                
  5.                 //定义循环变量  
  6.            for(i = 0;i<110; ++i)                                        //循环1
  7.         {
  8.           for(j = 0;j<1000;++j)                                        //循环2
  9.           {
  10.             ;
  11.           }
  12.         }
  13. }
  14. void main()                                                                        //主函数
  15. {
  16.         unsigned char a = 0x01;                                        //0000 0001的十六进制形式
  17.     while(1)                                                                //无限循环
  18.         {
  19.           if(a == 0x00)                         //如果高位溢出(逻辑移位结果为0000 0000)
  20.           {
  21.             a = 0x01;                           //则恢复
  22.           }
  23.           P2 = a;                                                                //循环点亮led灯
  24.           a = a<<1;                                                                //逻辑移位语句
  25.           delay1s();
  26.         }
  27. }

  28. 通过数组实现版:
  29. #include<reg51.h>
  30. char LEDChar[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  31. void delay_ms(unsigned int time)
  32. {
  33.         unsigned int j=0;
  34.         for(;time>0;time--)
  35.                 for(j=0;j<125;j++);
  36. }
  37. void main()
  38. {
  39.         char i=0;
  40.         while(1)
  41.         {
  42.                 for(i=0;i<8;i++)
  43.                 {
  44.                         P0=LEDChar[ i];
  45.                         delay_ms(1000);
  46.                 }
  47.         }
  48. }
复制代码



个人创意的(提供两种实现方式,通过有无“//”来转换):
15.png
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char          //定义无符号字符型变量uchar
  4. #define uint unsigned int          //定义无符号整型变量uint
  5. void DelayMs(uint x)
  6. {        uchar t        ;
  7.         while(x--)
  8.         {         for(t=0;t<120;t++);        
  9.         }
  10. }
  11. void main()
  12. {
  13.         uchar i;
  14.     P0=0xfe;
  15.         while(1)
  16.         {
  17. //                 P0=0xf7;
  18. //                 DelayMs(500);
  19. //                 P0=0xfd;
  20. //                 DelayMs(500);
  21. //                 P0=0x7f;
  22. //                 DelayMs(500);
  23. //                 P0=0xfb;
  24. //                 DelayMs(500);
  25. //                 P0=0xfe;
  26. //                 DelayMs(500);
  27. //                 P0=0xbf;
  28. //                 DelayMs(500);
  29. //                 P0=0xef;
  30. //                 DelayMs(500);
  31. //                 P0=0xdf;
  32. //                 DelayMs(500);
  33. //                 P0=0xf7;
  34.          
  35.                 for(i=0;i<7;i++)
  36.           {
  37.                         P0=_crol_(P0,1);                //P0端口向左循环移动一位
  38.                     DelayMs(150);
  39.           }
  40.                
  41.                 for(i=0;i<7;i++)
  42.                 {
  43.                         P0=_cror_(P0,1);                //P0端口向右循环移动一位
  44.                     DelayMs(150);
  45.                 }
  46.         }
  47. }
复制代码




回复

使用道具 举报

ID:787517 发表于 2020-6-24 08:44 | 显示全部楼层
谢谢楼主分享,学习一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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