【51单片机】6-点亮第一个LED灯

news2024/11/20 18:48:29

1.单片机编程的一般步骤

1.目标分析

点亮开发板上的LED灯

2.原理图【电路图】分析

1.目标器件(LED)工作原理

2.相关模块电路连接

3.控制线路分析:相关IO端口是哪些?

3.代码编写,编译

4.下载于调试


2.原理图与控制方法分析

74HC573数据手册 - 百度文库 (baidu.com)

https://datasheet.lcsc.com/lcsc/2004021807_HGSEMI-74HC245N_C507182.pdf

1.原理图概况浏览

(1)目的1:把我们相关部分的原理图摘录出来重点看

(2)目的2:把相关部分的原理图的关键部分(74HC245芯片)重点看

2.74HC573芯片介绍

(1)要知道这个芯片怎么工作,就要看数据手册

(2)第一步:找到他的数据手册

(3)OE(output enable ),LE(latch enable),VCC(电压电压),GND(地线0V)

(4)74HC573芯片是一个锁存器,简单来说就是由输入引脚Dx来控制输出引脚Qx(x等于0-7)。OE和LE影响Dx控制Qx的结果。

(5)当OE为L(低电平),LE为L(低电平)时74HC573工作在锁存模式,此时Qx的输出被锁存(进入锁存状态之前就是高一直高,是低就一直低,这就叫锁存),这就是锁存器的作用。【输入与输出无关】

(6)当OE为L,LE为H的时候74HC573工作在跟随模式,此时Qx的输出跟随着Dx的输入变化而且变化。此时逻辑上可以认为74HC573是透明的。

3.硬件原理图分析结论

(1)原理图和开发板默认跳线帽方式为:OE=L,LE=H,此时74HC573工作在跟随模式下,相当于是透明的。当我们接线(接线方式为P0端口和j12用杜邦线连接起来,当然其实也可以和p1或者其他端口连接)后,其实相当于p0端口和LED的正极直接相连,而LED的负极接地。

(2)结论:P0端口的8个引脚输出高电平时候则LED亮,输出低电平时LED灭。

3.第一个实验:点亮LED

1.创建工程和文件

2.如何用C语言进行IO端口的控制

(1)P0 这个符号在c语言代码中的特殊含义

(2)十六进制

(3)位,字节,IO端口(p0-p7),IO口(其中一个口,p1)

(4)硬件连接方式对编程的影响

3.点亮LED

(1)点亮8个LED:二进制:1111 1111【0xff】

(2)点亮4个LED:二进制:0000 1111【0x0f】

(3)隔一颗亮一颗:二进制:1010 1010【0xAA】

#include<reg51.h> //头文件包含


void main(void){  //主函数
	
	//表示输出8个1,表示输出高电平
	//二进制应该为:1111 1111
	//点亮8个LED
	//P0=0xff;//将右边的值赋给p0
	
	//点亮4个LED
	//二进制为: 1111 0000
	//P0=0x0f;
	
	//隔一颗点亮一颗 二进制应该是:1010(A) 1010(A) 
	//P0=0xAA;
	
	
	//全灭
	P0=0x00;
}

4.如何让LED闪烁

1.闪烁的本质含义

亮--延时---灭--延时

(1)由于人眼睛有视觉暂留,所以亮和灭之间是延时时间选择非常重要。

(2)如果延时时间太短(比如20ms),这时候上一层灭眼睛还没有反应过来就进入下一次亮,此时你会觉得灯一直亮的。和一直亮区别是亮度低一些,但是是看不到闪烁

(3)延时时间逐渐增大慢慢就可以看到闪烁,大到一定程度就你可以看到明显的一亮一灭

2.单片机如何实现延时

(1)单片机执行每一条指令需要一定时间

(2)单片机开机不能休息

(3)单片机可以”空转“【无意义的动作】来”浪费时间“

3.C语言实现延时

(1)笨方法:放多条指令实现延时

(2)正确方法:使用C语言循环语句实现延时

#include<reg51.h>

void delay(void){
	
	unsigned char i=200;
	unsigned char j=100;//定义变量
	while(i--){
		while(j--);
	}
}


int main(){
	
	P0=0xff;//全亮
	//延时:调用函数
	delay();
	
	
	P0=0x0; //全灭
	//延?
	delay();
	
	
}

5.C语言的循环实现

1.while循环

(1)格式

条件初始化

while(条件){

        //代码段

        //循环体中包含条件增量

}

2.for循环

(1)格式

for(循环初始化;循环条件;循环增量){

        //循环体

}

6.流水灯效果实现

1.什么是流水灯

2.流水灯本质分析

(1)流水灯的本质其实就是不同的亮的状态互相间隔一段时间

(2)流水灯

(3)延时时间越长流水灯就流的越慢,越短就流水越快

(4)8个状态一次执行,完成后从头开始,

3.编程实现流水灯

#include<reg51.h>

void delay(void){
	unsigned char i,j;
	for(i=0;i<100;i++){
			for(j=0;j<100;j++);
	}
}

int main(void){
	//因为1为真,所以进入死循环
	while(1){
		//第一个状态
		P0=0x80;
		delay();
		//第2个状态
		P0=0x40;
		delay();
		//第3个状态
		P0=0x20;
		delay();
		//第4个状态
		P0=0x10;
		delay();
		//第5个状态
		P0=0x08;
		delay();
		//第6个状态
		P0=0x04;
		delay();
		//第7个状态
		P0=0x02;
		delay();
		//第8个状态
		P0=0x01;
		delay();
	}
}

3.上面程序缺陷

(1)功能是实现了,如果状态变多程序会更长。

4.改进思路

(1)使用算术右移

(2)首先定义变量unsigned char a ,初值等于0x80(1000 0000)

(3)8个状态,其实就是a依次右移0-7位

(4)我们这样相当于用c语言让单片机自己去运算得到每一个状态的端口值,不用自己事先去计算好。

#include<reg51.h>


void delay(){
	unsigned char i,j;
	for( i=0;i<200;i++){
			for( j=0;j<200;j++);
	}
}

/*
int main(){
	
	
	unsigned int i=0;
	unsigned char d=0x80;//第一个
	
	while(1){
		for(i=0;i<8;i++){
			//d:在整个操作中一直都是0x80,一直没有被改变
		P0=(d>>1);//将数值右移
		delay();
	}
}
	
}
*/

/*
流水灯:从左向右
int main(){
	unsigned int i=0;
	
	while(1){
		
	unsigned char d=0x80;//第一个
		
		for(i=0;i<8;i++){
			//将d保存起来,所以此时d会更新,所以d会变化
				d=d>>1;
				P0=d;
				delay();
		}
	}
}
*/

int main(){
	
	unsigned int i=0;
	while(1){
	unsigned int d=0x01;
		for(i=0;i<8;i++){
				d=d<<1;
				P0=d;
				delay();
		}
	}
	
}

5.C语言移位运算介绍

(1)c语言中有移位运算符,>>可以右移,<<可以左移(无符号数移位:移出去的位丢掉1,空出来的位补0

7.跑马灯

1.什么是跑马灯

(1)跑马灯和流水灯很像,但是不同的是:流水灯是8颗LED其中7灭1亮,亮的在移动,跑马灯是8颗LED亮7灭1,灭的在移动。

2.实现思路

3.实现编程

(1)编程实现跑马灯,必须用到C语言的2种技巧:左移动(右移动),按位取反

(2)C语言中~这个符号表示对这一个数字按位取反,比如一个数0111 1111按位取反变成1000 0000 .

#include<reg51.h>

void delay(){
	unsigned char i,j;
	for(i=0;i<200;i++){
			for(j=0;j<300;j++);
	}
}

int main(){
	unsigned char i=0;//i控制循环次数
	
	
	while(1){
	unsigned char d=0x80;//端口值
			for(i=0;i<8;i++){
				P0=~d;//d按位取反后给P0端口
				d=d>>1;
				delay();
			}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

杂记 | 使用gitlab-runner将python项目以docker镜像方式流水线部署到服务器(解决部署缓慢和时区不对的问题)

文章目录 01 需求背景1.1 需求1.2 步骤 02 编写BaseDockerfile2.1 编写2.2 说明2.3 执行 03 编写Dockerfile04 编写.gitlab-ci.yml05 项目结构 01 需求背景 1.1 需求 我有一个python项目&#xff0c;该项目可能是一个服务器监控程序&#xff0c;也可能是一个后端程序&#xf…

【开关稳压器】LMR16030SDDA、LMR38010FDDAR,汽车类LMR43610MSC5RPERQ1低 EMI 同步降压稳压器

一、LMR16030SDDA 开关稳压器 IC REG BUCK ADJ 3A 8SOPWR LMR16030 是一款带有集成型高侧 MOSFET 的 60V、3A SIMPLE SWITCHER 降压稳压器。该器件具有4.3V 至 60V 的宽输入范围&#xff0c;适用于从工业到汽车各类应用中非稳压电源的电源调节。该稳压器在睡眠模式下的静态电流…

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 模型训练1&#xff09;数据集分析2&#xff09;数据预处理 相关其它博客工程源代码下载其它资料下载 前言 本项目专注于MovieLens数据集&#xff0c;并采用TensorFlow中的2D文本卷积网络模型。它结合了协同过滤…

h5下载文件,无兼容问题~

最近写了个页面&#xff0c;打开页面出现文件列表&#xff0c;用户可以下载文件。 失败方案 使用a标签进行下载&#xff0c;参考代码如下&#xff1a; 因为有批量下载的需求&#xff0c;这里将xhr请求单独封装到downloadFile.js中 // downloadFile.js const downloadFile …

Flutter超好用的路由库-fluro

文章目录 fluro的介绍fluro简介安装和导入路由配置导航到路由参数传递 fluro的典型使用创建路由管理类代码解释例子小结 初始化路由导航到路由 总结 fluro的介绍 fluro简介 fluro是一个流行的Flutter插件&#xff0c;用于实现高级路由管理。它提供了灵活的路由配置和导航功能…

VR科普研学基地科普开放日普乐蛙VR体验馆沉浸式体验设备

广州科普开放日来啦 2023年9月广州科普开放日来啦&#xff0c;9月16日周六上午9点&#xff0c;广州卓远非常荣幸地迎来了一批前来体验的家庭。 比原定的集合时间提前了近1个小时&#xff0c;已经开始有家长带着小朋友来到了VR科普基地&#xff0c;可见大家对VR科普体验的热情和…

轻量服务器是不是vps ?和vps有什么区别

​  轻量型服务器是介于云服务器和共享型服务器之间的一种解决方案。它提供较为独立的资源分配&#xff0c;但规模较小&#xff0c;适用于中小型网站和应用程序。轻量型服务器的硬件资源来源于大型的公有云集群的虚拟化技术。轻量型服务器的性能和带宽可能会稍逊于云服务器。…

【笨~~~】在python中导入另一个模块的函数时,为什么会运行模块中剩下的部分??顶层?

一个程序员一生中可能会邂逅各种各样的算法&#xff0c;但总有那么几种&#xff0c;是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓&#xff01;”算法吧~ Python导入了其他文件中的函数&#xff0c;运行时连着这个文件一起运行了 在py…

椭圆曲线加密算法

椭圆曲线密码学&#xff08;Elliptic curve cryptography&#xff09;&#xff0c;简称ECC&#xff0c;是一种建立公开密钥加密的算法&#xff0c;也就是非对称加密。类似的还有RSA&#xff0c;ElGamal算法等。ECC被公认为在给定密钥长度下最安全的加密算法。比特币中的公私钥生…

什么是文档签名证书?PDF文档怎么签名?

什么是文档签名证书&#xff1f;在“互联网”时代&#xff0c;电子合同、电子证照、电子病历、电子保单等各类电子文档无纸化应用成为常态。如何让电子文档的签署、审批具有公信力及法律效力&#xff0c;防止伪造签名、假冒签名等问题出现&#xff0c;是电子文档无纸化应用的主…

画一个时钟(html+css+js)

这是一个很简约的时钟。。。。。。。 效果&#xff1a; 代码&#xff1a; <template><div class"demo-box"><div class"clock"><ul class"mark"><liv-for"(rotate, index) in rotatedAngles":key"i…

echarts图表 实现高度按照 内容撑起来或者超出部分滚动展示效果

背景&#xff1a;因为数据不固定 高度写死导致数据显示不全&#xff0c;所以图表高度要根据内容计算 实现代码如下&#xff1a; <divv-if"showCharts"id"business-bars"class"chart":style"{ height: chartHeight px }"></d…

如何做接口测试呢?接口测试有哪些工具

回想入职测试已经10年时间了&#xff0c;初入职场的我对于接口测试茫然不知。后来因为业务需要&#xff0c;开始慢慢接触接口测试。从最开始使用工具进行接口测试到编写代码实现接口自动化&#xff0c;到最后的测试平台开发。回想这一路走来感触颇深&#xff0c;因此为了避免打…

数据结构-----串(String)详解

目录 前言 1.串的定义 相关类型 2.串的储存结构 顺序储存表示 堆分配储存表示 块链储存表示 3.串的操作方式 4.串的匹配算法 &#xff08;1&#xff09;BF算法 过程原理 代码实现&#xff08;C/C&#xff09; 算法分析 &#xff08;2&#xff09;KMP算法 过程…

2.(vue3.x+vite)组件注册并调用

前端技术社区总目录(订阅之前请先查看该博客) 关联博客 1.(vue3.x+vite)封装组件 一:umd调用方式 1:引入umd.js <script src="./public/myvue5.umd.js"></script>2:编写代码调用 (1)umd方式,根据“5

四川天蝶电子商务有限公司真实吗?

四川天蝶电子商务有限公司是一家专注于电商行业的企业&#xff0c;他们通过自己的经验和专业知识&#xff0c;教人带货的方法和技巧。带货是指通过社交媒体或其他渠道&#xff0c;向消费者推销商品并实现销售的过程。 教人带货的方法主要有以下几点&#xff1a; 1.选择合适的平…

以酒为媒、以酒载道,五粮液携手首届“金熊猫奖”,讲好中国白酒故事

执笔 | 尼 奥 编辑 | 萧 萧 这是一次光影艺术与白酒酿造的和美之约&#xff0c;也是中国文化与世界多元文明的交融时刻&#xff0c;在影视与美酒的碰撞瞬间&#xff0c;共同擘画“美美与共&#xff0c;天下大同”的文明图景。 9月19-20日&#xff0c;以“多彩文明荣耀光影…

Webshell 流量特征分析

前言&#xff1a;webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、权限管理等操作。使用方法简单&#xff0c;只需上传一个代码文件&#xff0c;通过网址访问&#xff0c;便可进行很多日常操作&#xff0c;极…

2023-2024年最新大数据学习路线

文章目录 2023-2024年最新大数据学习路线大数据开发入门*01*阶段案例实战 大数据核心基础*02*阶段案例实战 千亿级数仓技术*03*阶段项目实战 PB级内存计算04阶段项目实战 亚秒级实时计算*05*阶段项目实战 大厂面试*06* 2023-2024年最新大数据学习路线 新路线图在Spark一章不再…

CSS 基础 3

目录 &#x1f680; 导读 -- target 盒子模型 看透网页布局的本质 盒子模型组成 边框(border) border-style ​编辑border-color border-width 边框写法 简写 分开写 表格细线边框 边框会影响盒子实际大小 内边距 内容 内边距-padding padding属性简写 pad…