我们前边学了点亮LED小灯,然后又学了LED小灯闪烁,下边我们要进一步了解一下如何让8个小灯依次一个一个点亮,流动起来。

图1 LED小灯电路图

通过前面的课程,我们可以了解到控制引脚P0.0通过了74HC245控制DB0,P0.1控制DB1......P0.7控制DB7。我们还学到一个字节是8位,我们如果写一个P0,就代表了P0.0到P0.7的共8个位。比如我们写P0 = 0xFE;转换成二进制就是0b11111110,所以点亮LED小灯的程序,实际上我们可以改成另外一种写法,如下所示。

#include

sbit  ADDR0 = P1^0;

sbit  ADDR1 = P1^1;

sbit  ADDR2 = P1^2;

sbit  ADDR3 = P1^3;

sbit  ENLED = P1^4;

void  main()

{

ENLED = 0;

ADDR0 = 0;

ADDR1 = 1;

ADDR2 = 1;

ADDR3 = 1;            //74HC138开启三极管

P0 = 0xFE;

while(1);             //程序停止在这里

}

通过上边这个程序我们可以看出来,可以通过P0来控制所有的8个LED小灯的亮和灭。我们下边要进行依次亮和灭,怎么办呢?从这里就可以得到方法了,如果想让单片机流水灯流动起来,依次要实现的结果是:0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F。

在我们的C语言当中,有一个移位操作,其中<>代表的是右移。比如a = 0x01 <

还要学习另外一个运算符~,这个符号是按位取反的意思,同样,按位取反也是针对二进制而言。比如a = ~(0x01),0x01的二进制是0b00000001,按位取反是0b11111110,那么a的值就是0xFE了。

学会了这两个符号后,那么我们就可以把流水灯的程序写出来,先把程序贴上。

#include

sbit  ADDR0 = P1^0;

sbit  ADDR1 = P1^1;

sbit  ADDR2 = P1^2;

sbit  ADDR3 = P1^3;

sbit  ENLED = P1^4;

void  main()

{

unsigned char j = 0;

unsigned int  i = 0;

ENLED = 0;

ADDR0 = 0;

ADDR1 = 1;

ADDR2 = 1;

ADDR3 = 1;              //74HC138开启三极管Q16

while(1)                //程序死循环

{

P0 = ~(0x01 <

for(i=0; i<20000; i++);  //延时

if(j == 8)                //如果j等于8,重新给j赋值0

{

j = 0;

}

}

}

这里我只讲两种情况,当j等于0的时候,1左移0位还是1,那么写成二进制后就是0b00000001,对这个数字按位取反就是0b11111110,亮的是最右边的小灯。当j等于7的时候,1左移7位就是0b10000000,按位取反0b01111111,亮的是最左边的小灯。中间  过程大家自己分析一下。

流水灯结束后,关于小灯的讲解,我们暂时告一段落,后边还有小灯的高级用法,我们到时候再详细讲解。

单片机 c语言 p1控制流水灯,单片机控制的流水灯程序相关推荐

  1. 单片机c语言电梯程序设计,基于51单片机的模拟电梯控制系统设计.doc

    摘要:本文介绍了一种电梯模拟控制系统,包括怎样利用对STC89C52进行编程从而对电梯实现自由控制的方式.该系统采用了STC89C52芯片进行控制,用单片机进行编程,能实现的功能非常多而且方便设计,并 ...

  2. 单片机c语言程序设计叶俊明,单片机C语言程序设计

    本书的主要内容有51单片机的芯片引脚和*小系统.Keil C51编写软件与Proteus仿真软件的使用.C51语言.51单片机的基础实践.51单片机的中断系统.51单片机常见的接口电路以及十个实验例子 ...

  3. 单片机C语言数据存储原理,介绍单片机中C语言的数据存储与程序编写

    一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区 ...

  4. 单片机C语言数据存储原理,学习单片机C语言,必知的数据存储与程序编写知识!...

    一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...

  5. 例说51单片机C语言答案,例说51单片机(C语言版)(第3版)

    章  轻松看MCS-51  1 1-1  微型计算机与单片机  2 1-2  8051基础知识  2 1-2-1  8x51的结构  2 1-2-2  89C51/89S51的封装与引脚  3 1-2 ...

  6. 单片机c语言篮球比分_基于单片机的篮球比赛计时计分器的设计

    摘 要:本系统是采用单片机AT89C51作为本设计的核心原件.利用7段共阴LED作为显示器件.在此设计中共接入了2个7段共阴LED显示器,用于记录得分和比赛时间,显示范围可以达到0到99分,基本满足赛 ...

  7. 单片机c语言数码显示实验报告,单片机c语言版数码动态显示实验报告.doc

    单片机c语言版数码动态显示实验报告 数码管动态显示实验一.实验要求在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输 ...

  8. 单片机C语言中的位运算符,单片机c语言教程第八课 运算符和表达式(位运算符)...

    学过汇编的朋友都知道汇编对位的处理能力是很强的,但是单片机C语言也能对运算对象进行按位操作,从而使单片机C语言也能具有一定的对硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不改变参 ...

  9. 51单片机c语言延时计算软件,51单片机精确延时程序大集合+初值计算工具

    在论坛上看到不少不错的延时程序,整理如下共同分享: 精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 ;延时5秒左右 DELAY5S:PUSH   04H;2个 ...

最新文章

  1. 整合框架过程记录日志
  2. 基于java语言轻量级实时风控引擎
  3. php mysql 到表最后_如何在PHP中获取MySQL表的最后插入ID?
  4. bzoj4569 [Scoi2016]萌萌哒 并查集+st表
  5. 在32位windows 7下安装PyLucene
  6. OC-内存管理的一些要点
  7. mongoDB - 插入数据
  8. react 遍历渲染
  9. 在Android中实现一个简易的Http服务器
  10. 蓝湖+Vue.js+SosoApi+Spring Cloud+Rancher——项目架构总结介绍
  11. 开源)嗨,Java,你可以生成金山词霸的二维码分享海报吗?
  12. 前端实现数据base64解码
  13. Beamer简易教学 | 4 文本盒子
  14. CJOJ 1659 【中学高级本】倒酒
  15. Shodan Hacking
  16. 用虚拟机写java程序_JAVA是什么?java是狗屁!写java程序说穿了就是在对java虚拟机这个软件进行应用。...
  17. 深度学习框架之争:TensorFlow退守工业界,PyTorch主导学术界?
  18. MySQL 8.0 新特性之检查约束(CHECK)
  19. 调用pyspark.ml库对信用卡逾期进行预测
  20. 什么是wind量化平台接口?

热门文章

  1. RTL-8201以太网芯片外围电路
  2. IEEE 802.15.4协议完整中文版 - 4.2 IEEE 802.15.4 WPAN 的组件
  3. “燕云十六将”之Lion李哲
  4. acer台式电脑怎么重装系统_手把手教你宏碁台式机如何重装系统
  5. 子、辰、卯、酉、午、辰时是几点到几点钟「知识普及」
  6. WOT讲师杨钊:人工智能将在不同应用场景逐步落地
  7. 【入门】小明的幸运数
  8. 武汉新华电脑学校计算机协会,第11届全国大学生计算机应用能力与信息素养大赛颁奖典礼!...
  9. 【放码过来】谈双重支付
  10. 曾经我创办了个公司,然后被投资人踢出去了......