51单片机玩转物联网基础篇02-点亮LED灯,实现跑马灯效果

发布者:cangart最新更新时间:2022-05-16 来源: eefocus关键字:51单片机  物联网  点亮LED灯  跑马灯 手机看文章 扫描二维码
随时随地手机看文章

前言

上一节,我们完成了51单片机开发环境的搭建,本节我们正式学习51单片机,编程语言的学习,通常是从第一个"hello world"开始,而点灯实验便是单片机学习的开始。


一、基础知识

1.单片机最小系统

一个最小的单片机系统,需要有单片机、电源电路、晶振电路、复位电路组成,这几部分存在就可以使单片机正常工作,如果需要频繁的下载程序,还需增加下载电路。


(1) 单片机


首先,我们先介绍下单片机,

在这里插入图片描述

引脚序号名称说明

在这里插入图片描述

以下为I/O端口:

P0:

第一功能:8位,漏极开路的双向I/O口。用时要加上拉电阻,可驱动8个LS型负载。

第二功能:低8位地址线和8位数据线分时复用;此时为真正的双向三态口。


P1:

8位准双向I/O口,可驱动4个LS型TTL负载。


P2:

8位准双向I/O口,与地址总线(高8位)复用,可驱动4个LS型TTL负载。


P3口:

8位准双向I/O口,双功能复用口,可驱动4个LS型TTL负载。


(2) 电源电路


单片机系统需要5V电压供电,直接输入的电压不太稳定性,需要电路稳压,同时点亮LED2,可以通过LED2的亮灭初步观察系统运行情况,正常运行情况,LED2常亮。

在这里插入图片描述

ESP8266和NRF24L01需要3.3V供电,因此使用ASM1117对VCC进行降压到3.3V。

在这里插入图片描述

(3) 晶振电路


单片机晶振电路如下图所示,晶振的选择有两种:12M或者11.0592M,11.0592串口通信波特率计算会更加精准,而12M的晶振计算延时时间比较方便,本实验使用开发板采用11.0592M,此外为了增加系统稳定性,防止电感干扰,需要在晶振两端增加电容。

在这里插入图片描述

(4) 复位电路

单片机有一个RST引脚,只需要将此引脚保持一段时间高电平即可复位STC89C52单片机,当RESET案件按下瞬间,C9还未充电,两端电压为0,R4两端电压为5V,5V为高电平,作为复位信号经RST引脚送入单片机,对单片机进行复位,同时随着电源对C9充电,C9电源不断上升,R4两端电压不断下降,当C9两端电压达到5V时,充电结束,此时R4两端电压为0,单片机RST引脚变为低电平,单片机进入正常工作装填,复位完成。


2.LED灯发光原理

LED灯中有电流通过时候,将点亮LED灯,单片机系统中,常见的LED灯如下所示,其中长的引脚一端为正极,短的为负极。

那么问题来了,如何让LED中有电流通过呢?电流到多少才能点亮LED呢?我们先看下实际电路设计中常用的LED设计电路

在这里插入图片描述

上图中LED1左边接入电源正极、右边接入负极,电流方能通过点亮LED,此时LED电阻几乎为0,如果电源接反方向了,LED产生很大电阻,阻止电流通过,此时,不能LED不能点亮,一般而言LED正向接入电源,保证通过LED中的电流为20mA左右即可点亮LED。


3.查看开发板LED部分原理图

从上图可知,LED3接入了单品阿吉的P10引脚,因此,只需要给P10引脚低电平即可点亮LED。


二、实例

1.新建一个空白工程

打开Keil4,点击Project->New uVision Project…

然后选择工程保存路径,并设置工程名字如下

选择AT89C52,本实验使用STC89C52,Keil中默认没有,选择与之相近的AT89C52即可。

然后出现下图,点击否即可,原因是Keil C51已经帮我们完成了启动

然后Source Group文件夹,选择Add Files to Group ‘Source Group 1’


紧接着本地创建main.c文件,添加即可

添加完成后,工程中打开main.c,如下图所示

2.点亮LED

(1) 程序


#include


sbit LED3 = P1^0;


void delay_ms(int ms)

{

        int i = 0, j = 0;

        for (i = ms; i > 0; i--)

        {

                for (j = 110; j > 0; j--);

        }

}


int main(void)

{

        while(1)

        {

                LED3 = 0; 

                delay_ms(1000);

                LED3 = 1;

                delay_ms(1000);

        }

}


程序中“sbit LED3 = P10;”语句将P10传给了变量LED3,LED3为0时候,P10引脚电平为低,LED3为1时候,P10引脚电平为高,当P10引脚为低电平时候,LED点亮,过1S后P10引脚为低电平,LED熄灭,由于在while(1)中执行,因此系统永远不会退出,LED会一直维持闪烁状态。


(2) 设置生成hex文件


按照如下步骤,勾选Create Hex File选项框即可

在这里插入图片描述

编译后结果如下,没有错误,同时生成了Hex文件

在这里插入图片描述

打开本地文件夹,可以看到生成的project.hex文件

在这里插入图片描述


(3) 下载运行


按照上节方法,将程序下载到单片机中,可看到设备LED3每隔1S亮灭一次

在这里插入图片描述
在这里插入图片描述

2.来个跑马灯

(1) 程序


#include


sbit LED3 = P1^0;

unsigned char val = 0;


void delay_ms(int ms)

{

        int i = 0, j = 0;

        for (i = ms; i > 0; i--)

        {

                for (j = 110; j > 0; j--);

        }

}


// 跑马灯

int main(void)

{

        // 灭所有灯

        val = 0xFF;          // 11111111

        while(1)

        {

                val = val << 1;

                P1 = val;

                if (val == 0)

                {

                        val = 0xFF;

                } 


                delay_ms(200);

                

        }

}


程序中逻辑处理,用到了左移算法,0xFF二进制是1111 1111,对应P10所有引脚都为高电平,LED3-LED10都熄灭,0xFF左移一位是0xFE,二进制为1111 1110,LED3点亮,0xFE左移一位是1111 1100,LED3和LED4同时点亮,依次类推,直到数据为0, 所有灯点亮后,重新赋值0xFF。


(2)下载运行


下载后,可以看到跑马灯效果,LED灯逐个点亮。

在这里插入图片描述

关键字:51单片机  物联网  点亮LED灯  跑马灯 引用地址:51单片机玩转物联网基础篇02-点亮LED灯,实现跑马灯效果

上一篇:51单片机玩转物联网基础篇03-独立按键
下一篇:51单片机玩转物联网基础篇01-开发环境搭建

推荐阅读最新更新时间:2024-11-09 15:39

51单片机中变量的定义及应用方法
变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(statIC)和寄存器(register),缺省类型为自动(auto)。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。注意的是在AT89C51芯
[单片机]
<font color='red'>51单片机</font>中变量的定义及应用方法
pwm调速频率,51单片机PWM调速程序
  51单片机的pwm调速频率主要通过一个定时器和一个IO口来实现PWM的输出。在一个周期里面,首先让IO口输出高电平,并定时一定的时间然后再将IO口输出低电平,定时一定的时间。然后在while里面循环输出即可。需要改变占空比的话就改变高电平的时间与低电平的时间比。我们来看看51单片机的PWM调速程序。   51单片机PWM调速程序   /*******************************************************************/ /* 程序名:PWM直流电机调速 */   /* 晶振:11.00592 MHz CPU型号:AT89C51 */   /* 直流电机的PWM波控制,
[单片机]
基于STM32设计的智能门锁(华为云IOT)
1. 前言 随着智能家居的快速发展,智能门锁作为家庭安全的重要组成部分,受到了越来越多用户的关注和需求。为了满足用户对安全和便捷的需求,决定设计一款基于STM32的智能门锁,并将其与华为云IOT平台相结合。 传统的门锁存在一些弊端,比如使用钥匙容易丢失、开锁过程繁琐等。而智能门锁的出现,有效地解决了这些问题。我选择使用STM32作为智能门锁的核心控制器,因为STM32系列具有低功耗、高性能和丰富的外设接口等优点,非常适合嵌入式应用。 华为云IOT平台作为一个强大的云服务平台,提供了丰富的物联网解决方案和强大的数据处理能力。将智能门锁与华为云IOT平台相结合,可以实现远程控制、数据监测和智能化的功能,为用户带来更加便捷和安全
[单片机]
基于STM32设计的智能门锁(华为云<font color='red'>IOT</font>)
51单片机对LCD1602液晶显示的驱动控制设计
利用串行A/D转换器TLC549对输入信号电压源进行采集转换成数字信号给51单片机,经单片机进行数据处理后给1602液晶显示。 误差小于1%. #include #include #define uint unsigned int #define uchar unsigned char uchar LCD[6]; //电压数据转换成LCD1602液晶字符显示 uint Volt; sbit DO= P1^0; //时钟 sbit CS= P1^1; //片选 sbit CLK = P1^2; //数据输出 sbit RS = P2^0; //1602液晶数据/命令选择端 sbit RW = P2^1; //1602液晶读写端
[单片机]
<font color='red'>51单片机</font>对LCD1602液晶显示的驱动控制设计
STM32F407——串口显示跑马灯状态
#main.c #include sys.h #include delay.h #include usart.h #include led.h //#include beep.h //#include key.h #include exti.h extern u8 onoff,dir,speed,change,flag; extern u16 time; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组 delay_init(168); //初始化延时函数 LED_In
[单片机]
STM32F407——串口显示<font color='red'>跑马灯</font>状态
51单片机控制的智能台灯设计
功能及概述 本系统组成如图一所示,主要由三部分组成: 传感器及信号处理部分:检测人体辐射红外信号及光强信号经过处理后变成可处理的数字信号 以80C51组成的中央处理单元:处理信号并发出控制命令 提醒电路及灯光控制电路 :给出提醒信号并根据80C51给出的命令控制灯光 整个系统是以80C51控制下工作的。其工作过程为:当环境光比较强时,光敏电阻阻值比较小,信号处理电路检测到低电平信号,禁止热释电红外传感器工作,省去了80C51处理过程。当环境光比较弱时,光敏电阻阻值变大,信号处理电路接收到高电平,从而启动热释电红外传感器工作。热释电红外传感器1探测比较远的距离,当人体进入到传感器1的控测范围内且光强较弱时,信号检测电
[单片机]
<font color='red'>51单片机</font>控制的智能台灯设计
边缘计算新引擎:研华×Windows 11 IoT企业版LTSC
近日, 研华科技宣布边缘计算平台新增对Windows 11 IoT Enterprise LTSC 2024的支持,将Windows11的高级功能与研华先进的安全产品和独家Windows 增值工具Power Suite相结合,全面赋能工业物联网行业应用 。如在制造业中保护敏感数据免受网络威胁和未经授权的访问,实现零售业的界面定制化,简化医疗设备管理以确保安全操作,确保与交通运输中的物联网设备兼容以支持创新。 10年长生命周期支持和网络安全防护 Windows 11 IoT企业版LTSC专为工业物联网应用设计,提供长达10年的生命周期支持,确保您的系统在十年内安全、可靠——使用寿命的延长避免了操作系统的频繁更新,从而减
[工业控制]
边缘计算新引擎:研华×Windows 11 <font color='red'>IoT</font>企业版LTSC
基于AT89C51单片机的温度数据显示设计
一.系统概述 系统使用的模块有AT89C51单片机+LCD12864+DS18B20温度检测模块。 系统的通过AT89C51作为控制核心,使用DS18B20温度检测模块,利用LCD12864显示采集的温度数据,LCD12864相对于LCD1602来说能够显示文字,LCD12864显示器被称为点矩阵液晶显示模块,也称为12864,因为它是包括12864个液晶显示点的128行64个阵列。每个显示点应该有一个二进制数,0表示消失,1表示明亮。如果模块内设置了词典就不需要进行汉字的设计。 二.仿真概述 1.LCD12864显示屏上显示环境温度。 2.按下界面切换后显示日期和时间数据。 三.程序设计 使用Keil 51进行程序设
[单片机]
基于AT89C<font color='red'>51单片机</font>的温度数据显示设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved