单片机led灯闪烁实验总结_51单片机实现LED流水灯
流水灯
用51单片机实现点亮1个2个3个……8个流水灯。我们选择P1口作为控制端口,输出0时LED灯点亮。流水灯实现步骤如下:
- 点亮第一个LED灯,对P1口赋值为“ 1111 1110“;
- 点亮第二个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流水灯相关推荐
- 单片机led灯闪烁实验总结_单片机很好玩3,花三分钟,使用普通LED小灯,制作手机“呼吸灯”...
上一节为了解决单片机 IO 电流驱动能力不足,导致 LED 小灯亮度不高的问题,借助了三极管.单片机的 IO 通过三极管开关 LED 小灯的电流,最后的确明显让小灯的亮度更高了. 使用电路模拟软件 还 ...
- ARM裸机开发——Linux环境搭建和LED灯闪烁实验
写在前面 本文为学校开展的嵌入式系统设计课程,本文主要是记录课程中的相关作业与学习记录,本课程采用了S3C2440A嵌入式系统开发板,由于主要以学校开展课程为主,本文内容可能有一定的课程资料辅助以及 ...
- arm嵌入式led灯闪烁实验报告_led闪烁实验报告.doc
led闪烁实验报告 篇一:单片机实验--LED灯闪烁实验 实 验 报 告 课程名称 实验项目 2016年 3 月 13 日 实验目的 1. 掌握51单片机开发板的使用步骤: 2. 掌握51单片机开发板 ...
- 【MSP430】MSP430F5529火箭板 --->基于定时器A的LED灯闪烁实验(含Timer_A分析)
实验内容:上电点亮MSP430F5529 Launch Pad 上板载的红色LED,同时使用定时器让绿色LED闪烁 实验准备: 1.硬件:MSP430F5529 Launch Pad 2.软件:Cod ...
- Zigbee之旅(二):第一个CC2430程序——LED灯闪烁实验
Zigbee之旅(二):第一个CC2430程序--LED灯闪烁实验 一.承上启下 在上一篇文章<Zigbee之旅(一):开天辟地>中,我们简要的介绍了Zigbee,以及其开发环境的搭建.O ...
- 【正点原子FPGA连载】第八章LED灯闪烁实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【正点原子FPGA连载】 第八章 LED灯闪烁实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: h ...
- 独立式键盘实验c语言,单片机设计报告—独立式键盘控制的4级流水灯.doc
单片机设计报告-独立式键盘控制的4级流水灯 单片机结题报告 独立式键盘控制的4级流水灯 班 级 姓 名 吴泽宇 学 号 2008405340 一.任务目的: 通过采用单片机制作一个独立式键盘控制的4级 ...
- 【Arduino】点亮灯和灯闪烁实验
前言 一.准备材料LED 二.使用步骤 三.原理图 三.实物图 四.代码 总结 前言 LED 小灯实验是比较基础的实验之一,上一个" Hello World!"实验里已经利用到了A ...
最新文章
- ​GNN教程:Weisfeiler-Leman算法!
- 2D图片3秒变立体,变换视角流畅自然:Adobe实习生的智能景深算法,登上顶级期刊...
- 一个合格的web前端程序员要学会哪些技能?
- Xilinx:让FFmpeg在FPGA上玩的爽
- opengl glad.h和 glu.h
- 实例60:python
- 有多个正整数存放在数组中,编写一个函数要求偶数在左边由小到大顺序放置,奇数在右边,也是由小到大顺序放置,Java实现...
- 计算机画布模式,商业模式画布基础知识
- 高校就业管理系统mysql_数据库课程设计---大学生就业管理系统数据库设计.pdf
- 系统崩溃怎么重装系统Win10?
- blender 51个必须熟练记住的基础操作
- 二值图像轮廓追踪算法
- 如何跨入AI的大门 Python人工智能方向怎么样
- 图像加噪与滤波处理(python+opencv)
- 认识和选用常用的几种 GPRS 模块
- c++一维数组找出五个数中的最大和最小值
- 老慜的A5作业——p5.js 动态、周期、随机、面向对象
- springboot基于微信小程序的电器商城系统的设计与实现毕业设计源码251453
- 机器学习算法工程师面试集锦(更新中)
- PMP新考纲 敏捷题目 (三)
热门文章
- API 网关和微服务介绍
- GIS大讨论(九):GIS专业就业之职位篇
- finalize()的真正用法及作用
- matlab的imresize函数,为什么python cv2.resize函数对RGB图像给出的结果与MATLAB imresize函数不同?...
- Java Web实战开发 | Web项目的创建与运行
- 平安科技Java后台开发面试
- userdel: user * is currently used by process 1278
- 词汇课程——导论(2)
- 机器学习入门:准备知识笔记(seaborn及案例)
- java Date与 double 互转