流水灯

用51单片机实现点亮1个2个3个……8个流水灯。我们选择P1口作为控制端口,输出0时LED灯点亮。流水灯实现步骤如下:

  1. 点亮第一个LED灯,对P1口赋值为“ 1111 1110“;
  2. 点亮第二个LED灯,对P1口赋值为“ 1111 1100“;

……

3.点亮第八个LED灯,对P1口赋值为“ 0000 0000 “;

4.只点亮第八个LED灯,对P1口赋值为 “ 0111 1111 “;

5.点亮第七个LED灯, 对P1口赋值为 “ 0011 1111 “;

……

6.点亮第一个LED灯,对P1口赋值为 “ 0000 0000“;

7.只点亮第一个LED灯,对P1口赋值为 “ 1111 1110“;

重复上面流程实现LED流水灯。

汇编语言实现:

因为51单片机为8位数处理器,所以从“ 1111 1110“到“ 1111 1100“是左移1位补充数为0 ,我们可以根据左移指令或乘法指令实现。本程序使用乘法指令实现,每次*2都会溢出一次,相应的右边会多出1个0。同理左移根据除法实现每/2右移一位左边补充0。

参考代码如下:

ORG 0000H

AJMP MAIN

//主函数

MAIN: MOV A, #11111111B //初始化累加器

LOOP:

LCALL LEFT //左移程序

CPL A //取反累加器,关闭LED灯

LCALL RIGHT //右移程序

CPL A //取反累加器,关闭LED灯

AJMP LOOP //跳转到LOOP,循环

//左移程序

LEFT: MOV B, #02H //赋值寄存器B位2

MUL AB //使用乘法*2,实现左移2位

MOV P1, A //把累加器A的值赋值给P1口,点亮LED

LCALL DELAY //调用延时函数

JNZ LEFT //累加器不为0,跳转到LEFT左移一位

RET //累加器为0,结束

//右移程序

RIGHT: MOV B, #02H //赋值寄存器B位2

DIV AB //使用除法/2,实现右移2位

MOV P1, A //把累加器A的值赋值给P1口,点亮LED

LCALL DELAY //调用延时函数

JNZ RIGHT //累加器不为0,跳转到RIGHT右移一位

RET //累加器为0,结束

//延时函数

DELAY: MOV R0, #20 //延时0.5秒,使用参数R0、R7、R6。

DEL0: MOV R7, #100

DEL1: MOV R6, #250

DJNZ R6, $

DJNZ R7, DEL1

DJNZ R0, DEL0

RET

END

C语言实现:

本程序使用移位指令实现,每次左移一位,右边补0。同理左移一位左边补充0。

参考代码如下:

#include "reg52.h"

#include<intrins.h>

typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;

#define LED P2 //将P2口定义为led 后面就可以使用led代替P2口

/* 延时函数,i=1时,大约延时10us*/

void delay(u16 i)

{

while(i--);

}

/*主函数*/

void main()

{

u16 i;

LED=0xff; //初始化LED

delay(50000); //大约延时450ms

while(1)

{

for(i=0;i<=7;i++) //左移循环

{

LED<<=1; //将led左移一位

delay(50000); //大约延时450ms

}

LED=~LED; //关闭LED

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

{

LED>>=1; //将led右移一位

delay(50000); //大约延时450ms

}

LED=~LED; //关闭LED

}

}

欢迎大家留言讨论!

单片机led灯闪烁实验总结_51单片机实现LED流水灯相关推荐

  1. 单片机led灯闪烁实验总结_单片机很好玩3,花三分钟,使用普通LED小灯,制作手机“呼吸灯”...

    上一节为了解决单片机 IO 电流驱动能力不足,导致 LED 小灯亮度不高的问题,借助了三极管.单片机的 IO 通过三极管开关 LED 小灯的电流,最后的确明显让小灯的亮度更高了. 使用电路模拟软件 还 ...

  2. ARM裸机开发——Linux环境搭建和LED灯闪烁实验

    写在前面  本文为学校开展的嵌入式系统设计课程,本文主要是记录课程中的相关作业与学习记录,本课程采用了S3C2440A嵌入式系统开发板,由于主要以学校开展课程为主,本文内容可能有一定的课程资料辅助以及 ...

  3. arm嵌入式led灯闪烁实验报告_led闪烁实验报告.doc

    led闪烁实验报告 篇一:单片机实验--LED灯闪烁实验 实 验 报 告 课程名称 实验项目 2016年 3 月 13 日 实验目的 1. 掌握51单片机开发板的使用步骤: 2. 掌握51单片机开发板 ...

  4. 【MSP430】MSP430F5529火箭板 --->基于定时器A的LED灯闪烁实验(含Timer_A分析)

    实验内容:上电点亮MSP430F5529 Launch Pad 上板载的红色LED,同时使用定时器让绿色LED闪烁 实验准备: 1.硬件:MSP430F5529 Launch Pad 2.软件:Cod ...

  5. Zigbee之旅(二):第一个CC2430程序——LED灯闪烁实验

    Zigbee之旅(二):第一个CC2430程序--LED灯闪烁实验 一.承上启下 在上一篇文章<Zigbee之旅(一):开天辟地>中,我们简要的介绍了Zigbee,以及其开发环境的搭建.O ...

  6. 【正点原子FPGA连载】第八章LED灯闪烁实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  7. 【正点原子FPGA连载】 第八章 LED灯闪烁实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...

  8. 独立式键盘实验c语言,单片机设计报告—独立式键盘控制的4级流水灯.doc

    单片机设计报告-独立式键盘控制的4级流水灯 单片机结题报告 独立式键盘控制的4级流水灯 班 级 姓 名 吴泽宇 学 号 2008405340 一.任务目的: 通过采用单片机制作一个独立式键盘控制的4级 ...

  9. 【Arduino】点亮灯和灯闪烁实验

    前言 一.准备材料LED 二.使用步骤 三.原理图 三.实物图 四.代码 总结 前言 LED 小灯实验是比较基础的实验之一,上一个" Hello World!"实验里已经利用到了A ...

最新文章

  1. ​GNN教程:Weisfeiler-Leman算法!
  2. 2D图片3秒变立体,变换视角流畅自然:Adobe实习生的智能景深算法,登上顶级期刊...
  3. 一个合格的web前端程序员要学会哪些技能?
  4. Xilinx:让FFmpeg在FPGA上玩的爽
  5. opengl glad.h和 glu.h
  6. 实例60:python
  7. 有多个正整数存放在数组中,编写一个函数要求偶数在左边由小到大顺序放置,奇数在右边,也是由小到大顺序放置,Java实现...
  8. 计算机画布模式,商业模式画布基础知识
  9. 高校就业管理系统mysql_数据库课程设计---大学生就业管理系统数据库设计.pdf
  10. 系统崩溃怎么重装系统Win10?
  11. blender 51个必须熟练记住的基础操作
  12. 二值图像轮廓追踪算法
  13. 如何跨入AI的大门 Python人工智能方向怎么样
  14. 图像加噪与滤波处理(python+opencv)
  15. 认识和选用常用的几种 GPRS 模块
  16. c++一维数组找出五个数中的最大和最小值
  17. 老慜的A5作业——p5.js 动态、周期、随机、面向对象
  18. springboot基于微信小程序的电器商城系统的设计与实现毕业设计源码251453
  19. 机器学习算法工程师面试集锦(更新中)
  20. PMP新考纲 敏捷题目 (三)

热门文章

  1. API 网关和微服务介绍
  2. GIS大讨论(九):GIS专业就业之职位篇
  3. finalize()的真正用法及作用
  4. matlab的imresize函数,为什么python cv2.resize函数对RGB图像给出的结果与MATLAB imresize函数不同?...
  5. Java Web实战开发 | Web项目的创建与运行
  6. 平安科技Java后台开发面试
  7. userdel: user * is currently used by process 1278
  8. 词汇课程——导论(2)
  9. 机器学习入门:准备知识笔记(seaborn及案例)
  10. java Date与 double 互转