LED对电压也是有要求的,二极管都有导通电压,LED的供电电压如果没有达到这个导通电压值,
LED无法点亮,当LED导通时,电流才开始流过LED,且电流越大,亮度越强(但不能超过最大作电流)。
(1)OA 段。这是正向死区。UA 为开启LED发光的电压。
(2)AB 段。这是工作区。在这一区段, 一般是随着电压增加电流也跟着增加, 发光亮度也跟着增大。
(3)OC 段。这是反向死区,发光二极管加反向电压是不发光的(不工作),但有反向电流。这个反向电流通常很小,一般在几微安之内。
(4)CD 段。这是反向击穿区,LED的反向电压一般不要超过10V,最大不得超过 15V,最大反向电压。超过这个电压,就会出现反向击穿,导致发光二极管报废。
STC89C52开发板上LED模块电路如下:

查看开发板原理图LED D1指示灯对应的是引脚是P2_0,所以只需要给P2_0输出一个低电平就能使D1亮。
#include <REGX52.H>
sbit LED = P2^0;//将P2.0定义为LED
void main()
{
LED = 0;//点亮LED1
while(1)
{}
}
LED已经点亮,想要它出现闪烁就是使LED一亮一灭,只需循环让 D1 指示灯先亮一会后熄灭,使
这个状态持续下去。但是要想使我们人眼想要观察到需要设置一定的延时,利用人眼的余晖效应。
#include <REGX52.H>
sbit LED = P2^0;
typedef unsigned int u16;//对系统默认数据类型进行重命名
typedef unsigned char u8;
void Delay(u16 ten) //延迟函数
{
while(ten--);
}
void main()
{
while(1)
{
LED = 0; //点亮
Delay(50000);//大约延迟450ms
LED = 1; //熄灭
Delay(50000);
}
}
LED流水灯之前我记录过一次,这次想在记录一次就当复习了。要实现 LED 流水灯,只需循环
让 D1-D8 指示灯逐个点亮。要实现循环点亮,最容易想到的方法:点亮 D1 且把 D2-D8 熄灭,延
时一段时间后再点亮 D2 且把 D1、 D3-D8 熄灭,延时一段时间后再点亮 D3 且把 D1-D2、D4-D8
熄灭,如此循环下去,IO 口由低往高或者由高往低逐个输出低电平特点。在这里有两种方法实现,一
种是利用二进制逻辑位移使不同引脚低电平,另一种是利用库函数intrins.h中的位移函数。
这种是最笨的方法,依次让每一个LED逐次亮灭。
#include <REGX52.H>
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
typedef unsigned int u16;
void Delay(u16 ten)
{
while(ten--);
}
void main()
{
while(1)
{
//通过高低电平
LED1 = 0;
Delay(50000);
LED1 = 1;
Delay(50000);
LED2 = 0;
Delay(50000);
LED2 = 1;
Delay(50000);
LED3 = 0;
Delay(50000);
LED3 = 1;
Delay(50000);
LED4 = 0;
Delay(50000);
LED4 = 1;
Delay(50000);
LED5 = 0;
Delay(50000);
LED5 = 1;
Delay(50000);
LED6 = 0;
Delay(50000);
LED6 = 1;
Delay(50000);
LED7 = 0;
Delay(50000);
LED7 = 1;
Delay(50000);
LED8 = 0;
Delay(50000);
LED8 = 1;
Delay(50000);
}
}
通过位移来实现亮灭
#include <REGX52.H>
#define LED_PORT P2;
typedef unsigned int u16;
typedef unsigned char u8;
void Delay(u16 ten)
{
while(ten--);
}
void main()
{
u8 i;
while(1)
{
//通过位移实现
for(i=0;i<8;i++)
{
P2 = ~(0x80>>i); //1000 0000 -->0000 0001然后取反
Delay(50000);
}
for(i=0;i<8;i++)
{
P2 = ~(0x01<<i); //0000 0001 -->1000 0000然后取反
Delay(50000);
}
}
}
通过库函数intrins.h实现
#include <REGX52.H>
#include "intrins.h"
#define LED_PORT P2;
typedef unsigned int u16;
typedef unsigned char u8;
void Delay(u16 ten)
{
while(ten--);
}
void main()
{
u8 i;
P2 = 0xFE;
while(1)
{
for(i=0;i<7;i++)//移动的是0的位置
{
P2 = _crol_(P2,1);//左移
Delay(50000);
}
for(i=0;i<7;i++)
{
P2 = _cror_(P2,1);//右移
Delay(50000);
}
for(i=0;i<8;i++)//移动的是1的位置
{
P2 = ~(_cror_(0x01,i));//右移
Delay(50000);
}
for(i=0;i<8;i++)
{
P2 = ~(_crol_(0x80,i));//左移
Delay(50000);
}
}
}
使用逻辑左移高位移出(舍弃),低位的空位补0,最高位丢失,最低位补0。使用逻辑右移低位移出
(舍弃),高位的空位补0,最高位补0,最低位丢失。类似数据结构的队列一样,前面走后面来的补
上。而使用左移函数(循环左移)_crol_(移动对象,左移的位数)如果是左移,那么最高位就被移到
最低位了,次高位变为最高位。右移函数和左移函数类似。类似一个循环队列。
#include <REGX52.H>
#include "intrins.h"
#define LED_PORT P2;
typedef unsigned int u16;
typedef unsigned char u8;
void Delay(u16 ten)
{
while(ten--);
}
void main()
{
u8 i;
P2 = 0xFE;
while(1)
{
for(i=0;i<7;i++)//0的位置变动
{
P2 = _crol_(P2,1);
Delay(50000);
}
for(i=0;i<7;i++)
{
P2 = _cror_(P2,1);
Delay(50000);
}
}
}
刚开始P2 = 0xFE; 对应二进制 1111 1110,最低位为0,因此最开始的 D1 指示灯会点亮。循环七次
的原因是在进入 main 开始,就已经将 LED_PORT 端口设置了一次状态,即让 D1 点亮,并且我
们是想让 LED 从左至右依次点亮,然后继续又从右至左依次点亮。
初始状态:LED_PORT=1111 1110
i=0:LED_PORT=1111 1101
i=1:LED_PORT=1111 1011
i=2:LED_PORT=1111 0111
i=3:LED_PORT=1110 1111
i=4:LED_PORT=1101 1111
i=5:LED_PORT=1011 1111
i=6:LED_PORT=0111 1111
i=7:LED_PORT=1111 1110
如上如有错误,谢谢指正。
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:arduino上一大把对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下,大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:audio_in=I2S
目录SPI总线SPI总线概述 SPI总线分类SPI优点及缺点SPI接口硬件原理SPI四种工作模式 74HC595应用74HC595芯片概述74HC595封装及管脚功能74HC595工作原理 编辑 74HC595串行转并行点亮LED灯 程序实现 Proteus运行结构示意图SPI总线SPI总线概述 SPI(SerialPeripheralinterface):串行外围设备接口 用途:用来在微控制器与外围设备芯片之间实现数据交换 特点:高速、全双工、同步 SPI总线分类四线制全双工SPI(同时收发)MISO 主机输入/从机输出MOSI 主机输出/从机输入SCLK 串行时钟CS或
文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室
一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、设计原理1.DS1302介绍2.闹钟音乐播放原理二、程序设计1.DS1302.h2.ds1302.c3.music.h4.main.c三、电路图四、运行结果1.proteus仿真2.开发板实验五、总结六、附件提示:以下是本篇文章正文内容,下面案例可供参考一、设计原理1.DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。该芯片采用普通32.768kHz晶振,DS1302工作时功耗很
目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式 2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置 3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一
1、单片机控制液晶显示模块1602LCD的显示。液晶显示器(LiquidCrystalDisplay,LCD)具有省电、体积小、抗干扰能力强等优点,LCD显示器分为字段型、字符型和点阵图形型。(1)字段型。以长条状组成字符显示,主要用于数字显示,也可用于显示西文字母或某些字符,广泛用于电子表、计算器、数字仪表中。(2)字符型。专门用于显示字母、数字、符号等。一个字符由5、7或5、10的点阵组成,在单片机系统中已广泛使用(3)点阵图形型。广泛用于图形显示,如笔记本电脑、彩色电视和游戏机等。它是在平板上排列的多行列的矩阵式的晶格点,点大小与多少决定了显示的清晰度。引脚包括8条数据线、3条控制线和3
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替了传统的机械式密码锁,电子密码锁具有安全性高、成本低、功耗低、易操作等优点。本文主要介绍运用51单片机设计数字密码锁的方法。本设计采用自上而下的数字系统设计方法,将数字密码锁系统分解为若干子系统,并且进一步细划为若干模块,然后用C语言来设计这些模块,通过KEIL软件编译,并且进行实机调试。调试结果表明:该数字密码锁能够效验4位十进制
实验中我们使用的是52单片机目录前言一、单片机是什么?二、实验步骤1.独立键盘检测1.2代码如下(示例):1.3图片1.4视频2.矩阵键盘检测2.2代码如下(示例):2.3图片2.4视频总结:以上就是今天要讲的内容,本文仅仅简单介绍了单片机键盘检测的应用实现,而单片机键盘检测相关理论可以参考教材进行学习前言文章内主要概念引自郭天祥老师《新概念51单片机C语言版》一书主要展示郭天祥老师书中第四章键盘检测原理及应用实现。分为仿真、实体两部分。一、单片机是什么?单片机就是在一块硅片上集成了微处理器、存储器及各种输入/输出接口的芯片,这样一块芯片就具有了计算机的属性,因而被成为单片微型计算机,简称单片