找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3829|回复: 0
收起左侧

单片机流水灯三种不同方法源程序(位运算+库函数+字符型数组)

[复制链接]
ID:416551 发表于 2018-10-28 08:08 | 显示全部楼层 |阅读模式
流水灯程序(位运算):
  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. unsigned char i;
  5. unsigned char temp;
  6. void Delayms(unsigned int ms)
  7. {
  8.    unsigned int i,j;
  9.    for(i=0;i<ms;i++)
  10.    for(j=0;j<120;j++);
  11. }
  12. void main(void)
  13. {
  14.    while(1)
  15.    {
  16.       temp = 0x01;           //0x01=0000 0001
  17.           for(i=1;i<8;i++)
  18.           {
  19.                   P2=~temp;           //P2=1111 1110  对temp取反,保证每次循环只亮一个灯
  20.                   temp=temp<<1;                //按位左移,高位丢弃,低位补0
  21.                   Delayms(200);
  22.           }
  23.           for(i=1;i<8;i++)
  24.           {
  25.                   P2=~temp;        
  26.                   temp=temp>>1;  //按位右移,高位补0,低位丢弃
  27.                   Delayms(200);
  28.           }
  29.    }
  30. }
复制代码


流水灯代码(库函数):
  1. #include <REGX51.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void Delayms(uint ms)
  6. {
  7.    uchar t;
  8.    while(ms--)
  9.    {
  10.       for(t=0;t<120;t++);
  11.    }
  12. }

  13. void main()
  14. {
  15.    uchar i,j;
  16.    P2 = 0xfe;
  17.    while(1)
  18.    {
  19.       for(i=0;i<7;i++)
  20.           {
  21.                  P2 = _crol_(P2,1);         //P1端口向左循环移动一位
  22.                  Delayms(300);
  23.           }
  24.           for(j=0;j<7;j++)
  25.           {
  26.             P2 = _cror_(P2,1);        //P1端口向右循环移动一位
  27.                 Delayms(300);
  28.           }
  29.    }
  30. }
复制代码


流水灯(字符型数组):

  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code Pattern_P2[] =
  5. {
  6.    0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
  7. };
  8. void Delayms(uint ms)
  9. {
  10.    uchar t;
  11.    while(ms--)
  12.    {
  13.       for(t=0;t<120;t++);
  14.    }
  15. }
  16. int main()
  17. {
  18.    uchar i;
  19.    while(1)
  20.    {
  21.       for(i=0;i<8;i++)
  22.           {
  23.              P2=Pattern_P2[i];
  24.                  Delayms(200);
  25.           }
  26.           for(i=8;i--;i>0)
  27.           {
  28.              P2=Pattern_P2[i];
  29.                  Delayms(200);
  30.           }
  31.    }
  32. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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