思路1:

根据流水灯实现原理,即 IO 口由低往高或者由高往低逐个输出低电平特点,那么我们可以将移位操作以及循环结合进来。

进入 main 函数后首先定义一个变量 i,然后进入 while 循环,由于要实现 8个 LED 从 D1->D8 循环点亮,因此可以使用 for 循环语句循环 8 次,每循环一次,点亮的小灯向右移动一个,而 D1-D8 是连接到 P2.0-P2.7 的,因此输出的低电平要左移一位,因此可以使用 LED_PORT=~(0x01<<i);语句实现。0X01<<i 表示 i增加 1 次,0x01 中的 1 就移动多少位,因为 1(高电平)不会让 LED 点亮,需要取反后变为低电平 0 才能点亮,所以最后的结果需要取反后给 LED_PORT 口,并且每次循环都要延时一段时间,这样才能分辨出来 LED 在实现流水灯。

代码如下:

原始代码如下:

#include"reg52.h"

typedef unsigned char u8;

typedef unsigned int u16;

#define LED_PORT P2

void delay_time(u16 ten_us)

{

while(ten_us--);

}

void time()

{

while(1)

{

u8 i=0;

for(i=1;i<=8;i++)

{

LED_PORT=(~0x01<<1);//循环亮灯

delay_time(50000);//延时

}

}

}

 思路2:

使用左移_crol_、右移_cror_函数

除了使用 for 循环语句实现移位,KEIL C51 软件内还有对应的移位库函数,

左移函数是_crol_(),右移函数是_cror_(),要使用这两个函数在我们的程序中

必须包含 intrins.h 头文件。这两个移位函数大家可以百度了解下,其内部实现

过程是看不到的,该移位函数实现的移位功能就相当于一个队列内循环移动,如

果是左移,那么最高位就被移到最低位了,次高位变为最高位,依次类推。

代码如下:

原始代码如下:

#include"reg52.h"

#include"intrins.h"

//使用corl和cror函数需要头文件

typedef unsigned char u8;

typedef unsigned int u16;

#define PORT_LED P2

u8 delay_time(u16 ten_us)

{

while(ten_us--);

}

void main()

{

while(1)

{

u8 i=0;

for(i=0;i<=8;i++)//左移

{

PORT_LED=(_crol_(PORT_LED,1));

//crol是左移操作函数,需要传参

//第一个参数是目标值,第二个是移动几个

delay_time(50000);

}

for(i=0;i<7;i++)//右移

{

PORT_LED=(_cror_(PORT_LED,1));

//crol是右移操作函数,需要传参

//第一个参数是目标值,第二个是移动几个

delay_time(50000);

}

}

}

复习单片机:流水灯(内含2种方法(左移操作符法+crol法)+设计思路+原始代码)相关推荐

  1. 简单51单片机c语言编程流水灯,51单片机如何实现流水灯?51单片机实现流水灯的三种方法详细分析...

    描述 首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平 ...

  2. 51单片机流水灯的三种实现方法

    首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可. ...

  3. 单片机流水灯三种实现

    单片机流水灯的三种实现方式(由上至下,再重下到上) 原理图 一般使用单片机的P1口 输出,不需要加上拉电阻: 由原理图可以看出这里采用低电平输出. 一.采用数组方式进行字节定义,最好理解的方式 #in ...

  4. 51单片机(二)流水灯的几种实现方法

    流水灯的几种实现方法 一.暴力法 二.数组法 三.循环左移法 一.暴力法 直接对P1寄存器的每一位进行重命名,然后点亮第一个-->延时-->熄灭第一个.点亮第二个-->延时--> ...

  5. 【单片机基础】stc89c52单片机实现流水灯的三种编程方式

    效果图 实现流水灯的第一种方式 /* 来回点亮LED的第一种方法 */ #include <reg52.h>//包含51一些特殊功能寄存器 #define uchar unsigned c ...

  6. 51单片机制作花式流水灯的三种方式总结与仿真运行

    制作流水灯,一共有三种方式,分别是左右移位,延时,与定时器(计数器)方式 其中移位方式较为简便,常与简单的延时一同使用在各类工程中.除此之外,也可以直接操作寄存器改变灯的亮度. 延时方式通过改变占空比 ...

  7. 51单片机流水灯制作

    文章目录 51单片机流水灯制作 初试与复试 初试 复试 制作 分工 制作之硬件 制作之软件 总结 51单片机流水灯制作 我不得不承认自己的毅力实在是太差了,原先准备一星期写一篇博客的目标一致没有实现, ...

  8. 51单片机流水灯现象1

    **` 51单片机流水灯程序 `** 初学者小白,分享上课时写的小程序和普中科技程序,感兴趣的可以瞧瞧. 程序如有相同冒犯了. /*********************************** ...

  9. c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解

    用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...

  10. AT89C51单片机流水灯c语言程序及详解(扫盲教程)

    AT89C51单片机是我们学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法适合初学者 首先先在proteus画出仿真图,方便仿真程序 下面来编写程序,先来写入头函数 ...

最新文章

  1. Ubuntu下Sublime Text 3解决无法输入中文的方法
  2. 如何解决Linux操作系统找不到网卡的问题
  3. java定时器返回future_java 定时器线程池(ScheduledThreadPoolExecutor)的实现
  4. 串联矩阵matlab代码,Matlab串联矩阵函数【horzcat】详细解析
  5. 给选择模型的子模型添加COL
  6. (原创) 对饱和状态NPN晶体管内部机制的理解分析
  7. mysql table fetching_MySQL死锁分析一例
  8. 网络安全管理实践(第2版)
  9. ExtJs页面布局总结(转载)
  10. 关于QT报C:\Program Files (x86)\sogoupinyin\Components\的错误
  11. wps excel日历_Excel处理日历
  12. python前缀_【python刷题】前缀和
  13. 星际争霸、魔兽争霸3、红色警戒之完全对比
  14. Web前端-Vue中给input框赋值
  15. iSCSI引入FC/SAN
  16. 梦回大明湖畔遇见情窦初开的数据库,寻梦的开始,大明湖畔的夏雨荷-你在哪呢?
  17. 谷物大脑(来自樊登读书会)
  18. k8s教程(pod篇)-容器获取pod信息(Downward API)
  19. 计算机辅助设计中图元单位,CAD图形单位快捷键
  20. Python Network(一)基础入门(节点和边基本概念,网络统计量)

热门文章

  1. 教你如何购买阿里云香港服务器(教程)
  2. 有关vista系统的激活工具
  3. python大数据书籍推荐-清华大学出版社-图书详情-《从零开始学Python大数据与量化交易》...
  4. 相片打印机原理_【视界网】什么是便携式打印机以及工作原理有哪些呢?
  5. Docker 运行stress
  6. Excel如何冻结多行多列
  7. 什么是IPv6,IPv6有什么优势
  8. 在ADS仿真或者查看S参数的方法
  9. GSM网络结构及主要接口标注(附中英翻译)
  10. 信息学奥赛一本通 1293:买书 | OpenJudge NOI 2.6 6049:买书