当前位置: 首页 > news >正文

C51学习归纳1 --- led点亮、led闪烁、led流水灯

        第一节主要是针对LED的控制学习。这个过程中我们需要掌握的:1、控制的实现方法,控制实现的方法在后续的学习中是通用的。2、如何知道谁控制谁,通过查找开发板原理图获取,原理图的阅读的能力,在日后也是非常常用的。

一、原理图阅读

        以我买的板子为例,打开我的板子的原理图(我们学的是方法,不妨先按我的学习,然后去对照自己的板子进行修改理解),原理图如下

        从这个图纸中,我们很容易看出,我们的LED通过VCC、和P2_X(X代表数字)控制。一端是高电平,所以很显然当P2_X是低电平的时候我们可以点亮某一路小灯。

        那么我们要关注,P2_X如何控制,我们继续查询开发板原理图

        不难看出P2_X对应接在C51芯片的P2_0~7端口。

        所以我们只需要对应的控制端口P2_X即可。

二、点亮一个灯

#include <REGX52.H>void main()
{P2=0xFE;	//1111 1110while(1){}
}

         这一段代码,就是直接控制P2,一次控制8位。1111 1110,让P2_0输出低电平,剩余输出高电平,我们就实现了D1小灯的亮。

三、LED闪烁

        基于上一个电灯控制,现在加一些些难度,我们实现一个小灯的闪烁功能。

        思路就是小灯亮一下,暗一下。但是此时我们去直接

void main()
{while(1){P2=0xFE;	//1111 1110P2=0xFF;	//1111 1111}
}

        我们会发现小灯一直是亮的,这是为什么?因为单片机的处理速度非常快,小灯在我们人眼可以查觉之外的时候已经完成了亮暗变化,我们就一直以为是亮的。

        为了解决这个问题,我们需要引入延时函数,可以借助stc-isp软件帮忙生成:

         我们可以写出下面的代码:

#include <REGX52.H>
#include <INTRINS.H>void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){P2=0xFE;	//1111 1110Delay500ms();P2=0xFF;	//1111 1111Delay500ms();}
}

        看着很多东西,其实我们自己书写的只有main函数的while部分。

四、流水灯

        难度再次升级,我们能够控制一个灯的闪烁,我们是不是就可以控制一排灯按照顺序点亮的操作,视觉上我们看到的就是,一个灯像流水一样流动。

        思路其实很简单,第一个量完,第二个亮,。。。以此类推。

#include <REGX52.H>
#include <INTRINS.H>void Delay500ms()		//@12.000MHz
{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);
}void main()
{while(1){P2=0xFE;//1111 1110Delay500ms();P2=0xFD;//1111 1101Delay500ms();P2=0xFB;//1111 1011Delay500ms();P2=0xF7;//1111 0111Delay500ms();P2=0xEF;//1110 1111Delay500ms();P2=0xDF;//1101 1111Delay500ms();P2=0xBF;//1011 1111Delay500ms();P2=0x7F;//0111 1111Delay500ms();}
}

        至此我们学会了如何直接控制输出端口操作LED小灯了。

http://www.lryc.cn/news/361130.html

相关文章:

  • 使用STM32和TB6600驱动器控制42BYGH步进电机
  • 【Qt】对话框
  • Python | 武理刷题
  • 如何设置让背景颜色不包括 padding 部分,顺带全面学习 background-clip 属性(可以实现文字渐变)
  • Oracle 序列-SEQUENCE
  • 8岁儿童学编程基础好吗:探索早期编程教育的利与弊
  • vue3加axios配合element-plus实现图片等文件本地上传,并获取服务器返回的真实地址数据,前端写法
  • 面试题:谈谈你对观察者和订阅发布的理解
  • 下载文件流
  • 有开源软件,也有开源硬件?
  • 【TensorFlow深度学习】卷积层变种与深度残差网络原理
  • 每日一题《leetcode-- LCR 025.两数相加||》
  • MySQL数据库的约束
  • 计算机毕业设计 | springboot+vue会议室管理系统(附源码)
  • 常见端口及其脆弱点
  • JS函数的进阶
  • 【UE+GIS】UE5GIS CAD或shp构建3D地形
  • Unity学习笔记---音视频播放
  • 项目集成过程中的makefile记录
  • Vue3 -Computed计算属性
  • MySQL—函数—日期函数(基础)
  • Java+SVNCloud+Mysql课程设计
  • MySQL之创建高性能的索引(四)
  • Python 限制输入数的范围
  • STM32两轮平衡小车原理详解
  • (笔记)如何评价一个数仓的好坏
  • 友善RK3399v2平台利用rkmpp实现硬件编解码加速
  • Mysql 8.0 主从复制及读写分离搭建记录
  • PyTorch、显卡、CUDA 和 cuDNN 之间的关系
  • Lambda 表达式练习