描述

首先,介绍下原理。下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。要实现流水灯功能,我们只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。

实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。

听起来是不是很简单啊!那么下面我们来看下实现流水灯功能的三种常用方法!

第一种,总线方法实现流水灯。

这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。C程序如下:

#include

#define uchar unsigned char

#define uint  unsigned int

code unsigned char tmpled[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义八只LED灯,依次点亮八只LED灯

//N毫秒的延时函数

delay_ms(uint ms)       {    uint i,j;    for(i=ms;i>0;i--)        for(j=114;j>0;j--);    return 0;  }void main(void){unchar i;while (1){for(i=0;i<8;i++) //循环点亮8只LED灯{P1=tmpled[i];delay_ms(500); //延时500毫秒}}}

第二种,移位方法实现流水灯

上一种方法是逐个将P1口的LED灯点亮来实现闲的,因此程序看起来有一点复杂。下面将一种用移位的方法。采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。下面来看具体程序:

#include

#define uchar unsigned char

#define uint  unsigned int

//N毫秒的延时函数

delay_ms(uint ms)       {    uint i,j;    for(i=ms;i>0;i--)        for(j=114;j>0;j--);    return 0;  }

void main(){uchar a,i;while(1){a=0xfe; //点亮第一位LED灯for(i=0;i<8;i++){P1=a;a=a<<1; //左移一位a=a|0x01; //左移一位后与0x01相或,保证左移后最低位为1 delay_ms(500); }}}

第三种,库函数实现流水灯

C52 提供了  _crol_(字符循环左移);_cror_ (字符循环右移)等库函数,包含在头文件intrins.h中。接下来还是先讲一下移位的小知识点吧。

左移。C52中操作符为“<

#include

#include

#define uchar unsigned char

#define uint  unsigned int

//N毫秒的延时函数

delay_ms(uint ms)       {    uint i,j;    for(i=ms;i>0;i--)        for(j=114;j>0;j--);    return 0;  }

void main(){uint a;a=0xfe;while(1){P1=a;a=_crol_(a,1); delay_ms(500);}}

知识点:PSW寄存器。

PSW(Program StatusWord)全称为程序状态字标志寄存器,是一个8位寄存器,位于单片机片内的特殊功能寄存器区,字节地址D0H,用来存放运算结果的一些特征,如有无进位、借位等。使用汇编编程时PSW寄存器很有用,但在利用C语言编程时,编译器会自动控制该寄存器,很少人为操作它,大家只需做简单了解即可。其每位的具体含义

如图1 所示:

图 1  PWD(Program Status Word)寄存器

①CY:进位标志位,它表示运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。

②AC:辅助进位标志,又称半进位标志,它指两个8位数运算低四位是否有半进位,即低四位相加(或相减)是否进位(或借位),如有,则AC为1,否则为0。

③F0:由用户使用的一个状态标志位,可用软件来使它置1或清0;也可由软件来测试它,以控制程序的流向。

④RS1、RS0:4组工作寄存器区选择控制位。在汇编语言中这两位用来选择4组工作寄存器区中的哪一组为当前工作寄存区。

⑤OV:溢出标志位,反映带符号数的运算结果是否有溢出。有溢出时,此位为1,否则为0。

⑥P:奇偶标志位,反映累加器ACC内容的奇偶性,如果ACC中的运算结果有偶数个l(如11001100B,其中有4个1),则P为0,否则P为1。

打开APP精彩内容

点击阅读全文

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

  1. 2015 年蓝桥杯 C 语言 B 组省赛第 3 题: 三羊献瑞 (三种方法 + 详细分析)

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=1366 题目 三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉+ 三 羊 献 瑞 ------------------ ...

  2. 单片机c语言开发实验心得,在单片机C语言编程中的心得体会

    在单片机C语言编程中的心得体会在单片机C语言编程中的心得体会 在单片机C语言编程中的心得体会 作者:彭树林 在单片机C语言编程中使用恰当的`优化手段,可以写出简洁高效的代码.以下是笔者在C51编程过程 ...

  3. 51单片机c语言编程100,51单片机C语言编程100例.doc

    51单片机C语言编程100例.doc 目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0.P2.P3口认识I/O口的引脚功能4实例6 ...

  4. 51单片机c语言工作手册,51单片机C语言编程手册

    51单片机C语言编程手册 1 第一章 介绍 这是一本关于Intel 80C51 以及广大的51 系列单片机的书这本书介绍给读者一些 新的技术使你的8051 工程和开发过程变得简单请注意这本书的目的可不 ...

  5. 51单片机c语言编程的头文件,51单片机编程的头文件reg51.h详解

    我们在用c语言编程时往往第一行就是头文件,51单片机为reg51.h或reg52.h,51单片机相对来说比较简单,头文件里面内容不多,像飞思卡尔.ARM系列的单片机头文件往往内容就非常多,尽管如此,对 ...

  6. 51单片机c语言内存使用,51单片机C语言编程之内存优化

    原标题:51单片机C语言编程之内存优化 最常见的是以下两种 ① 超过变量128后必须使用compact模式编译 实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 ② 128 ...

  7. c语言从入门到精通 当当,51单片机C语言编程从入门到精通

    本书立足于单片机的各类型应用技术,采用大量实例和程序逐行解说的方式,详细介绍51单片机和C语言编程开发与应用技术. 内容特点: 1 立足于单片机工程应用:由浅入深,结合丰富的开发实例,介绍51单片机C ...

  8. 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt

    单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...

  9. PIC单片机与PIC单片机C语言编程简介

    对于计算机学院与电子学院相关的同学来说,单片机一定不是一个陌生的概念.在大学的学习生涯中,经常用于教学的是MCS-51系列单片机.其实,除了MCS-51单片机外,还有一类单片机--PIC单片机. PI ...

最新文章

  1. 刷新三项世界纪录的跨镜追踪(ReID)技术是怎样实现的?进来了解一下
  2. 为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory
  3. networkx 有向图强连通_leetcode刷题(四):搜索(深度优先搜索,广度优先搜索)拓扑排序,强连通分量...
  4. 铁路运货的运费与路程远近java_JAVA铁路运货的运费与路程远近及货物的重 – 手机爱问...
  5. 不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式
  6. spark环境搭建(idea版本)
  7. Spring Web Flow 2.0 入门详解
  8. Linux下 /dev/null 21 相关知识说明
  9. 第三次学JAVA再学不好就吃翔(part84)--增强for循环
  10. executor线程池框架_如何使用Java 5 Executor框架创建线程池
  11. [html] 实现九宫格布局
  12. 【CodeForces - 340D】Bubble Sort Graph (思维,nlogn最长上升子序列类问题)
  13. sql2000 mysql 兼容_SQL Server2000如何恢复数据库
  14. multisim怎么设置晶体管rbe_怎么在multisim14里仿真电路
  15. 什么是云计算时代?学云计算能做什么呢
  16. 数据结构—B树(思维导图)
  17. 简单提高MIDI音量的方法
  18. 11.什么是Heuristic
  19. Ouino法国学习系统评价它是如何比其他学习软件
  20. RPL协议的原理与安全机制

热门文章

  1. hdu 5584 gcd/lcm/数学公式
  2. Oracle SQL的优化 【转】
  3. Java继承知识之基本控制语句(if、switch与穿透现象)
  4. 检测电脑硬件的软件_慎用优化软件 不然I7也会卡
  5. Python使用reduce()函数计算多个集合的并集与交集
  6. mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...
  7. simulink仿真实例_又见Simulink库模型之(9):自定义函数
  8. OpenCV中cvLoadImage()函数和cvCreateImage()函数的异同之处!
  9. 从入门到精通:卷积神经网络初学者指南
  10. 一般柱子与柱子的距离_97讲珠宝展柜制作厂家谈谈珠宝展柜一般的尺寸是多少...