51单片机LED点灯实验(闪烁,点亮,流水灯)
led点亮
工作原理
如图,二极管阳极连接电阻,二极管阴极连接单片机引脚。D0对应P20,D1对应P21,,,,,,,都通过P2孔进行控制。
二极管:
电源正极连接到二极管阳极,负极连接到阴极,二极管正常工作。所以,原理图中,引脚为低电平,连接的是二极管的阴极,阳极通过与电阻连接,电阻连接的是高电平,所以二极管正常工作。电阻的作用为保护二极管。
程序编写
#include"reg52.h"
sbit LED=P2^0; /*sbit用于定义变量。LED为自定义变量。将P2.0(注意不要写成P2.0,应写为P^0)孔赋给变量LED*/
void main()
{
while(1)
{
LED=0;/*由二极管的工作原理可得,二极管接P2.0孔,所以该孔为低电平,为0*/
}
}
LED闪烁实验
- 工作原理
在点亮LED灯的基础之上。
原理上基本与点亮LED灯工作原理相同。
自定义一个延时函数。
主函数先点亮灯,在调用延时函数,在熄灭灯,然后在调用延时函数,将这些放入循环一直执行。完成 - 代码
#include "reg52.h"
typedef unsigned char u8; //重定义字符型变量
typedef unsigned int u16; //重定义整型变量/*自定义延时函数*/
void dealy(u16 i)
{
while(i--);
}
sbit led=P2^0;void main()
{while(1){led=0; //点亮,阴极接低电平dealy(50000);led=1; //熄灭,阴极接高电平dealy(50000);}
}
LED流水灯
工作原理
1.在LED点亮、LED闪烁实验的基础之上。
2.移位函数
crol(a,b):循环左移函数,a为左移的值,b为左移的位数。
cror(a,b):循环右移函数,a为右移的值,b为右移的位数。
移位函数包含在instrins.h库函数里面。
3.c语言中十六进制的表示
- Ox代表的是十六进制的前缀,不用读。例如OXaaOxbb,只看aa,bb就行。
- 十六进制到二进制转换
十六进制表示:每一位有不同的数码0~9,A(10),B(11),C(12),D(13),E(14),F(15)
十六进制转二进制:将十六进制的每一位转化为二进制即可。例如8FA,=>1000 1111 1010 - 运作过程
- 先看原理图
LED原理图(阳极解高电平),阴极通过电阻接接引脚
引脚默认接高电平,所以,初始时灯为熄灭状态。 - 流水实现
利用十六进制位位移函数实现左移和右移
crol(0xfe,1):0xfe转化为二进制为1111 1110;1代表位数
f代表原理图中的4个高位引脚,e代表4个低位引脚。
1111 1110 =>p0=0(低电平,灯亮)
1111 1101 =>左移,p1=0,第二个灯亮
1111 1011 =>p2
…………
crotl(oxfe,1):与左移原理相同(从0111 1111 开始向右移) - 代码实现
#include <reg52.h>
#include <intrins.h>
typedef unsigned char u8; //重定义全局字符型变量
typedef unsigned int u16; //重定义全局整型变量
#define led P2//宏定义LED为p2端口
/*延时函数*/
void dealy(u16 i)
{
while(i--);
}void main()
{u16 i; //定义变量iP2=0xfe; //点亮第一个LED灯,即1111 1110.dealy(50000); //延时450mswhile(1){for(i=0;i<7;i++) //8个LED灯,利用for循环一直执行{ led=_crol_(led,1); // 1111~1110~0111 1111,左移dealy(50000);}for(i=0;i<7;i++) //8个LED灯,利用for循环一直执行{ led=_cror_(led,1); //0111 1111~1111 1110 ,右移dealy(50000);}}}
51单片机LED点灯实验(闪烁,点亮,流水灯)相关推荐
- 51单片机 | LED点阵实验 | 点亮一个点 | 显示数字 | 显示图像
文章目录 一.LED点阵介绍 二.硬件设计 三.软件设计 1.LED点阵(点亮一个点) 2.LED点阵(显示数字) 3.LED点阵(显示图像) 四.实验现象 1.LED 点阵(点亮一个点) 2. LE ...
- 51单片机LED点阵实验(74HC595)
实验目的:用8*8的LED点阵显示一颗爱心. 实验仪器:普中开发板(非广告) 实验背景:出于一些原因,最近在看Arduino,但仍觉得51好玩.遂,一边看Arduino,一边整理51. 8*8的LED ...
- 51单片机LED 1秒闪烁
1.单片机晶振的脉冲的频率和周期为 F = f/12 = 11.0592M/12 = 0.9216MHZ T = 1/F = 1.085us 2.在主频为11.0592M时,每计一个脉冲为1 ...
- 基于51单片机的8个小彩灯花样流水灯proteus仿真汇编语言
仿真电路如下图所示: 部分代码: ORG 0000H AJMP START ORG 0003H AJMP INTR0 ORG 0013H AJMP INTR1 START:MOV IE,#85H MO ...
- 51单片机 LED点亮、闪烁以及流水灯实现
文章目录 一.Keil创建项目 二.Proteus搭建虚拟仿真电路 三.LED点亮 四.LED闪烁 五.流水灯实现 1. 流水灯(库函数法) 2. 流水灯(左移法) 3. 流水灯(右移法) 4. 流水 ...
- 51单片机LED模拟交通灯
51单片机LED模拟交通灯 文章目录 51单片机LED模拟交通灯 实验环境 仿真图 代码解析 效果演示 实验环境 实验软件: Keil5 + Proteus7 实验元件: AT89C51 * 1, L ...
- 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计
基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 这里写目录标题 1 开发环境 2 功能说明介绍 3 仿真图 4 ...
- 51单片机的仿真实验——1602显示屏显示万年历与温度
实验内容: 1:数字钟设计 2:基于DS18B20的温度测量模块设计 问题描述: 之前笔者写过一篇用数码管显示日历与温度的实验记录(51单片机的仿真实验--数码管显示日历与温度).但是数码管在仿真软件 ...
- 用51单片机点亮流水灯
用51单片机点亮流水灯的几种方法 1. 直接按位操作一个一个点亮 #include<reg51.h>//头文件 sbit LED0=P2^0; //位定义单片机接LED灯的端口 sbit ...
最新文章
- web---html+css+js登录界面
- 【若依(ruoyi)】获取mainContent的宽高
- hive olap 数据仓库_数据仓库系统的实现和使用(含OLAP重点讲解)
- pfsense 2.2RC版本应用
- springboot细节挖掘(配置Swagger2)
- 架构部署002--城域网_骨干网
- SpringBoot 2.3.x gradle源码构建
- Butterfly美化
- 如何屏蔽百度网盟广告
- Linux报错:tar: Error Is Not Recoverable: Exiting Now
- 使用wkhtmltopdf 将网页转PDF
- 微信内测新功能(深度清理),瞬间释放几个G内存!
- uni-app安卓禁止截屏,一行代码
- Java JVM 动态方法调用指令 invokedynamic 实现分析(以 Lambda 表达式实现原理为例)...
- Toast的高级自定义方式-循序渐进带你了解toast
- 数据在网络中是如何传输的
- 梦幻诛仙微信181服务器,《梦幻诛仙》手游数据互通服务器大全
- arduino 休眠 节能_魔法书3:让 Arduino 慢下来 20倍省电
- fallout3 辐射3 难句囧翻译1
- android学习之路(九)---- android相册Gallery2
热门文章
- ruby crawler Anemone
- 【vscode基于clangd实现Android/Linux代码跳转】
- java byte 图片浏览器直接显示_以Spring Boot的方式显示图片或下载文件到浏览器的示例代码...
- 区块链与数字货币关系,区块链显然不等同数字货币
- NVE-01-2015-11090:SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808) [端口: 443]
- Mjpeg-streamer源码学习笔记-Main-守护进程Daemon(二)
- [bzoj1191][二分图匹配]超级英雄Hero
- Delphi压缩解压文件,无需第三方控件
- requests进阶
- 切矢量瓦片iserver发布面丢失问题