我们学了点亮一个 LED 小灯,然后又学了 LED 小灯闪烁,现在我们要进一步学习如何让 8 个小灯依次一个接一个的点亮,流动起来,也就是常说的流水灯。先来看 8 个 LED的核心电路图,如图 4-12。

采用字节操作方式点亮LED灯

P0,代表了 P0.0到 P0.7 的全部 8 个位。比如我们写 P0 = 0xFE;转换成二进制就是 11111110B,所以点亮 LED字节操作为:

#include <reg52.h>sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;void main()
{ENLED = 0;ADDR3 = 1;ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;P0 = 0xFE;    //向P0写入数据来控制LED小灯while (1);    //程序停止在这里
}

流水灯程序

我们下边要进行依次亮和灭,怎么办呢?从这里就可以得到方法了,如果想让单片机流水灯流动起来,依次要赋给 P0 的数值就是:0xFE、0xFD、0xFB、0xF7、0xEF、0xDF、0xBF、0x7F。

在我们的 C 语言当中,有移位操作和取反操作,其中<<代表的是左移,>>代表的是右移,~ 表示按位取反。

  • 左移运算:
    x<<k:x左移k位,并在右端补零。

左移:无论是有符号数,还是无符号数,左移动都是向左移动,高位丢弃,低位补0.
例如:
unsigned char x = 0x34; ----->二进制数:0011 0100
内存中的形式为:0011 0100
X<<1 ==> 移位前:0011 0100
移位后:0110 1000 ----->0x68 ----->十进制数:104

  • 右移运算:
    逻辑右移:
    x>>k:x右移k位,并在左端补零。

右移:右移分为以下两类
逻辑右移(针对无符号数): 向右移动,高位补0,低位舍弃。
例如:
unsigned char x = 0x34;==》二进制数:0011 0100
内存中的形式为:0011 0100
X >> 1 移位前:0011 0100
移位后:0001 1010 ------>0x1a ------>十进制数:26

  • 取反(~)
    它是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。比如 a = ~(0x01); 0x01 的二进制是 00000001B,按位取反后就是 11111110B,那么a 的值就是 0xFE 了。
#include <reg52.h>sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;void main()
{unsigned int i = 0;     //定义循环变量i,用于软件延时unsigned char cnt = 0;  //定义计数变量cnt,用于移位控制ENLED = 0;ADDR3 = 1;ADDR2 = 1;ADDR1 = 1;ADDR0 = 0;while (1)  //主循环,程序无限循环执行该循环体语句{for(cnt=0;cnt<8;cnt++){P0 = ~(0x01 << cnt);      //P0等于1左移cnt位,控制8个LEDfor (i=0; i<20000; i++);  //软件延时}}
}

金沙滩51单片机LED 流水灯程序相关推荐

  1. pic单片机流水灯循环右移c语言,PIC单片机LED流水灯程序

    PIC 单片机 LED流水灯程序 ;************************************************************* include ;*********** ...

  2. 流水灯c语言程序tm,51单片机LED流水灯课程设计任务书+论文

    郑州工程技术学院课程设计 设计题目:LED流水灯设计 学    院:机电与车辆工程学院 专    业:16电气自动化技术专业班 级普招二班 姓    名:王*&刘* 指导教师:李* 日    ...

  3. 51单片机LED流水灯、走马灯的实现

    目录 1. 硬件设计 2. 软件设计 流水灯: 跑马灯: 1. 硬件设计 流水灯的原理: 图中主要包括51单片机芯片和流水灯模块,流水灯模块接在了单片机的P2口,500欧电阻是用来保护电路的.由原理图 ...

  4. 51单片机 花样流水灯程序

    /**采用T0定时器进行延时,每次延时的时间为1ms LED小灯的闪烁变化为500ms LED的样式有三种: 1.从右往左.在从左往右 2.从边缘向中间靠拢 3.从右边依次点亮,在从左边依次写灭 ** ...

  5. 51单片机LED流水灯

    目录 1.如何点亮LED 2.方案1 1.想法的提出 2.程序编写 3.方案二(改善后) 4.注意事项: 1.如何点亮LED LED正极接正电,负极接负极则点亮:cup通过程序直接访问寄存器(8位一组 ...

  6. led流水灯c语言数组程序,LED流水灯程序 一维数组写法

    LED流水灯程序 一维数组写法 /*********** (C) COPYRIGHT 201 2************ * 程序作者: 蓝雨(QQ:983931459 ,Email:chenheng ...

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

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

  8. 【制作】基于金沙滩51单片机的电子密码锁程序

    基于金沙滩51单片机的电子密码锁程序 很久之前做的一个课设,在B站发了效果视频,发现忘记分享代码了,现在整理分享一下. 零.设计报告 1.设计要求 这部分是讲的整个系统实现了什么功能. 1.1.密码的 ...

  9. 用寄存器HAL库完成LED流水灯程序

    重庆交通大学信息科学与工程学院 <嵌入式系统开发>课程 作业报告(第4周) 班 级: 通信工程2001 姓名-学号 : 阎桂董-632007030622 实验项目名称: 作业题目 实验项目 ...

最新文章

  1. java判断回文字符串几种简单的实现
  2. python 日期_python日期操作
  3. ubuntu16.04输入密码后返回登录界面(反复登录问题+.Xauthority无法删除无法改权限问题)
  4. 深入理解kestrel的应用
  5. 16.IDA-列出函数中存在的全部call(函数调用窗口,查看函数内调用了哪些call)
  6. python输入正整数n、求n以内能被17整除的最大正整数_求100之内自然数中最大的能被17整除的数资料...
  7. 每日linux命令学习-历史指令查询(history、fc、alias)
  8. python ----元组方法以及修改细节
  9. 流水账一周小记[2009-9-20]
  10. jsp用下拉框代替文本框_PPT封面太丑?教你三个高手都在用的美化技巧
  11. win、linux下tomcat内存的修改
  12. # 二极管的种类(1)-稳压二极管的参数与应用
  13. 破天服务器的系统,《新破天一剑》束缚系统
  14. python 学生编程--3 多彩同心圆
  15. Jieba中文分词 (二) ——词性标注与关键词提取
  16. New Year Garland
  17. [原创]Java Web——外卖配送系统/在线点餐系统
  18. 共享店铺靠谱么?共享店铺哪家好?全方位测评企雀共享店铺,黑谷共享店铺!
  19. Cg学习之01_vertex_program
  20. StarCraft开发的荆棘之路

热门文章

  1. 集成无线收发器和8位RISC MCU的SOC芯片
  2. Anaconda 添加镜像源
  3. [-UI设计-] UI设计文档
  4. 7.纯 CSS 创作一个 3D 文字跑马灯特效
  5. WinAPI-函数OpenProcess/ReadProcessMemory/WriteProcessMemory
  6. 请求 转发(forword)和重定向(redirect)
  7. Placeholder 传入值
  8. python的unittest面试题_unittest 知识问答题-也许面试会有用-欢迎补充
  9. linux x11 错误,oracle安装报cannot connect X11错误
  10. 基于Python3+Scapy的数据包流量特征批量分析工具