51单片机实验01-点亮LED小灯

news2025/1/18 20:55:41

目录

一,软件下载

 二,单片机概述

1,单片机内部资源

1)flash

2)ram

3)sfr

2,51单片机

3,单片机最小系统

 三,点亮最右边的小灯

1,指出满足小灯点亮的有关网络标号的电平要求

 1)addr2 addr1 addr0=110 

2)led=0

3)addr 3=1 及 enled=0;

4)编写代码 

5) 运行结果

四,实验-点亮LED小灯

1、实验的背景和意义

2、实验目的

3、实验任务及要求

4、实验仪器

5、实验步骤

6、实验报告撰写要求

​☀

 1)按照学号末位和小灯编号相对应进行操作

①确定需要亮的led

 ②预打开三极管开关

 ③译码器使能,并打开开关

④指出满足小灯点亮的有关网络标号的电平要求

⑤实现效果

⑥代码

 2)实现闪烁LED小灯的实验

①效果 

②撰写本实验的完整c语言代码。


一,软件下载

俗话说,“工欲善其事必先利其器”。我先把需要用到的软件下载安装上,相关的软件都放到了网盘中,可通过链接下载👇

链接:https://pan.baidu.com/s/1QEDpuNhcYVB6lmxFNW2z4Q?pwd=6666 
提取码:6666 
--来自百度网盘超级会员V1的分享

下载后会有如下文件:

 单片机开发,需要两个软件:编程软件(Keil uVision4)和下载软件(STC_ISP_V480 )

还有一个开发板串口驱动CH341SER(下载安装好就行,后期不需要手动打开该驱动,默认就有)

 Keil uVision4软件界面:

 STC_ISP_V480软件界面:

 二,单片机概述

1,单片机内部资源

这里的单片机内部资源指的是单片机能够提供给读者可使用的东西。

单片机主要有三大类资源:flash,ram及sfr。

1)flash

flash资源是程序的存储空间。其优点在于:可重复擦写,容量大,成本低等。flash最大的意义就是断电后数据不会丢失(类似于电脑的硬盘,把电脑关机后,所有保存过的文件都在)。

早期的单片机是otprom一次可编只读存储器(one  time  programmable  read-only memory)来存储单片机的程序,程序只能写入一次,如果写错了,只能换一片重新写入。

2)ram

ram全称为random  access  memory,随机存取存储器,也称为主存,是单片机的数据存储空间,用来存储程序运行过程中产生的和需要的数据(类似于电脑的的内存,最典型的应用就是计算器,一旦关机,数据不复存在)。

ram的优点:读写速度快,理论上可以无限次写入,即寿命无限,不管程序怎么运行和怎么读写,它都不会坏。

3)sfr

sfr全称为special  function  register,特殊功能寄存器。

单片机有很多功能,每个功能都会对应一个或多个sfr,用户就是通过对sfr的读写来实现单片机的多种多样的功能。

2,51单片机

我们通常所说的51单片机指的都是兼容了Intel  mcs-51体系架构的一系列单片机。而51是它的一个通俗的简称。

在接下来的单片机航行中我选择的是宏晶科技的STC89C52单片机来进行学习。它是一款51内核的单片机,具有标准的51体系结构和功能,程序下载方式简单,方便学习。

它的资源情况:

  • flash程序空间是8k字节(1k=1024,1字节=8位)
  • ram数据空间是512字节
  • sfr后面会逐一用到并补充

3,单片机最小系统

单片机最小系统也称为单片机最小应用系统,是指用最少的原件组成可以工作的单片机系统。

单片机最小系统主要有三要素:电源,晶振和复位电路。如下图所示:

 【图片取自《手把手教你学51单片机-C语言版》p12,有兴趣的可以去网盘下载电子板书本来看】

 链接:https://pan.baidu.com/s/1QEDpuNhcYVB6lmxFNW2z4Q?pwd=6666 
提取码:6666 
--来自百度网盘超级会员V1的分享 

 如果想要详细了解其他的知识如:电源,晶振,复位电路和led小灯的介绍的可下载网盘中的电子书自行阅读,接下来单片机的学习,我将不再详细地把其他知识写到博客里面(因为没必要做一个木得感情的打字机器,最主要的还是代码编写的思路,效果的呈现)。

更多资源可转到金沙滩官网查看。

青岛金思特电子有限公司 (qdkingst.com)

 三,点亮最右边的小灯

 最右边的小灯所对应的网络标号为db0。那么就可以沿着相同的网络标号来找到其在单片机上所对应的端口,并给其相应的电平,使小灯能够点亮。

1,指出满足小灯点亮的有关网络标号的电平要求

 1)addr2 addr1 addr0=110 

按照下图的三步走让二极管正极有电压,即使三极管(作为开关)打开。如下👇

 110为二级制显示,换算成十进制为6,为138译码器输出的y6,译码器的y6进而可控制基极的电平(因为译码器上的y6和三极管基极中的电平,两者的网络编号都是leds6,因此y6可以和基极相连并可以控制基极的电平)。138译码器有一个特点,就是输入只能指定对应的输出端为低电平,其他输出端口为高电平,即只有一个低电平输出。因此当 a2 a1 a0=110时,就表示了y6为低电平。

知道了addr2 ,addr1,addr0这三个译码器上的网络标号,我就可以通过【显示译码与步进电机的选择跳线】区域的图纸,来一一对应到单片机上:

  1. addr2=P1.2;
  2. addr1=P1.1;
  3. addr0=P1.0

在编写代码时,需要在main方法之前进行定义,如下👇

sbit addr0=P1^0;
sbit addr1=P1^1;
sbit addr2=P1^2;

因为在单片机的编码中没有P1.x这种描述,无法识别,一般将P1.x写为P1^x。 (写多了就行)

2)led=0

要让最右边的led灯点亮,需要二极管的阴极为低电平。

二极管有一竖的位置为阴极,阴极的电平要比阳极低,二极管才能够导通,通过下图我们可以看到,二极管的阳极通过三极管开关接了5v的电压,一般而言5v可以视为高电平,因此,我们需要将二极管的阴极接入低电平。

“沿着”电路元件的网络标号来最终找到单片机电路上 ,由图可以看到,我们需要将P0.0输入低电平,因为P0.0在程序中使用led来代表,所以我们给led这个赋值为0。

 因此led=0。

需要在main方法前声明,让led代表P0^0,如下👇

sbit led=P0^0;

3)addr 3=1 及 enled=0;

要使138译码器能够工作,就需要让它使能,而138有三个使能端:e1,e2,e3,如下图👇:

 因此,e3=1。

由于e2=0,e1=0,且e2与e1连一起了,两个的与为0,所以,enled=0。

依旧需要沿着网络标号找到单片机电路上所对应的端口,如下👇

并在main方法前面进行声明,如下:

sbit addr3=P1^3;
sbit enled=P1^4;

4)编写代码 

如上,所有的都分析完了之后,我开始写代码,编写代码如下:👇

​
#include< reg52.h>  // 头文件,包含有众多寄存器的地址
sbit led=P0^0;
sbit addr0=P1^0;
sbit addr1=P1^1;
sbit addr2=P1^2;
sbit addr3=P1^3;
sbit enled=P1^4;
void main(){
enled=0;
addr3=1;
addr2=1;
addr1=1;
addr0=0;
led=0; 		 // led代表一个发光二极管。阴极输入低电平,发光二极管导通,	小灯点亮

while(1);   // 小灯常亮
}

​

5) 运行结果

值得注意的是,当我在同一个工程里面有多个c文件时,如果不修改每一次create生成的hex文件的文件名,那么该文件会指向哪个c文件,我就会无迹可寻。因此,当每次使用rebuild来编译不同的c文件时,都建议将对象文件的名字进行修改,如下👇,当然,如果文件不多的话,也可以不用改。

 也可以将编译好的对象文件专门放到一个目录里面,如下👇

四,实验-点亮LED小灯

1、实验的背景和意义


单片机全称叫单片微型计算机,是一种集成在电路芯片,采用大规模集成电路技术把CPU、随机存储器RAM 、只读存储器ROM、多种输入输出口、定时器/ 计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的应用。大致可以分为以下几个范畴:
1、在智能仪器仪表上的应用,例如精确的测量设备;
2、在工业控制中的应用,例如用单片机可以构成形式多样的控制系统,与计算机互联网构成二级控制系统等;
3、在家用电器中的应用,可以从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话、集群移动通信、无线电话对讲机等;
4、在医用设备中的应用,例如医用呼叫机、各种分析仪、超声诊断设备及病床呼叫系统等等;
5、在各种大型电器中的模块化作用,如音乐集成单片机,看似简单的功能,微缩在电子芯片中,就需要复杂的类似于计算机的原理。
本实验着重在于分析计算机软件和开发过程中的环节和步骤,并从实践经验出发做了详细的分析和研究。本实验就是充分利用了8051 芯片的I/O 引脚,实际采用STC89C52RC单片机为中心器件来实现点亮LED小灯和进行小灯闪烁实验。

2、实验目的


1、学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调试能力。
2、掌握c 语言程序设计方法。
3、培养实践技能,提高分析和解决实际问题的能力。

3、实验任务及要求


1、用发光二极管作为显示电路,KST-51开发板中的小灯从左到右分别为LED9、LED8、LED7、LED6、LED5、LED4、LED3、LED2共计8只小灯。按照学号末位和小灯编号相对应进行操作,如学号2132331217的同学完成对LED7小灯的操作,另外学号末位为0和1的同学分别完成对小灯LED9和LED8的操作。具体操作见本实验的后续要求。
2、实现点亮LED小灯的实验,编写完整代码。
3、实现闪烁LED小灯的实验,只编写和任务2中不同部分的代码。

4、实验仪器


计算机1台、KST-51开发板1套。

5、实验步骤


1、建立文件夹,按照三大步完成项目和文件的建立及关联。
第一步:建立一个项目;
第二步:新建一个文件(加上 .c);采用软件Keil uVision4等进行代码编写。
第三步:添加文件到项目中去。
2、编译生成 ***.hex 文件。
3、连接KST-51开发板,利用软件STC-ISP-v4.80等完成单片机程序“烧写”。
4、观察实验现象,进行有关记录。

6、实验报告撰写要求


1、认真研读教材附录D的KST-51开发板原理图,指出满足小灯点亮的有关网络标号的电平要求,写在实验报告中。

开发板原理图可在网盘中下载

 链接:https://pan.baidu.com/s/1QEDpuNhcYVB6lmxFNW2z4Q?pwd=6666 
提取码:6666 
--来自百度网盘超级会员V1的分享 

 1)按照学号末位和小灯编号相对应进行操作

如学号2132331217的同学完成对LED7小灯的操作,另外学号末位为0和1的同学分别完成对小灯LED9和LED8的操作。

①确定需要亮的led

例如我学号末尾是4,因此我需要点亮led4,看图:

元件标号为led4的发光二极管的网络标号为db2。 之后开始沿着网络标号找到单片机:

 之后写上代码👇

 ②预打开三极管开关

打开三极管开关相关的电平在点亮最右边的小灯中已经分析过了,并且打开开关的代码不变,写下来,如下👇

 因为此时,还没有让译码器使能,138译码器并没有开始工作,开关没有真正的打开。接下来我让译码器使能开始工作。

 ③译码器使能,并打开开关

最后再加上

while(1);

 使灯长亮。

④指出满足小灯点亮的有关网络标号的电平要求

     led=0;  // 低电平
    addr2=1;  // 高电平
    addr1=1;
    addr0=0;
    enled=0;
    addr3=1;

⑤实现效果

 如下,led4(从右数第三个)点亮👇

⑥代码
#include<reg52.h> 
sbit led=P0^2;	 // 二极管阴极所接的端口
sbit addr0=P1^0;  // 138译码器低位输入
sbit addr1=P1^1; // 138译码器中位输入
sbit addr2=P1^2;// 138译码器高位输入
sbit addr3=P1^3; // 使能端es
sbit enled=P1^4; // 使能端 e1和e2
void main(){
	led=0;  // 二极管阴极需要低电平
	addr2=1;
	addr1=1;
	addr0=0;
	enled=0;
	addr3=1;
	while(1);
}

 2)实现闪烁LED小灯的实验

之前我在main方法中的最后一行写了while(1);一个死循环让灯长亮。如果想要在灯能够一直一亮一灭的话,需要在while(1)死循环内加入两个for循环来控制led,一个for循环用于让灯亮一段时间,另一个for循环用于让灯灭一段时间,之后一直重复再重复的一亮一灭。效果如下👇:

①效果 

闪烁一个小灯

②撰写本实验的完整c语言代码。
#include<reg52.h> 
sbit led=P0^2;	 // 二极管阴极所接的端口
sbit addr0=P1^0;  // 138译码器低位输入
sbit addr1=P1^1; // 138译码器中位输入
sbit addr2=P1^2;// 138译码器高位输入
sbit addr3=P1^3; // 使能端es
sbit enled=P1^4; // 使能端 e1和e2
void main(){
    unsigned int i=0;
	addr2=1;
	addr1=1;
	addr0=0;
	enled=0;
	addr3=1; 
	while(1){
		led=0;  // 灯亮
	    for(i=0;i<50000;i++);     // 灯亮一段时间
		led=1;   // 灯灭
		for(i=0;i<50000;i++);
	}
}

如果文章哪里有错误,请在评论区留言或者是私信我,一定知错就改。

如果文章哪里有不懂,请在评论区留言或者是私信我,一定倾囊相助。

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

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

相关文章

关节驱动器 CANFD 通信协议

前言 睿尔曼关节采用了问答方式进行通信&#xff0c;控制器发出指令包&#xff0c;模块返回应答包。一个CAN 总线网络中允许有多个模块&#xff0c;所以每个模块都分配有一个 ID 号。控制器发出的控制指令中包含 ID 信息&#xff0c;只有匹配上 ID 号的模块才能完整接收这条指令…

数学知识--(质数,约数)

本文用于个人算法竞赛学习&#xff0c;仅供参考 目录 一.质数的判定 二.分解质因数 三.质数筛 1.朴素筛法 2.埃氏筛法 3.线性筛法 四.约数 1.求一个数的所有约数 2.约数个数和约数之和 3.欧几里得算法&#xff08;辗转相除法&#xff09;-- 求最大公约数 一.质数的判定 …

MVCC详细总结

简介 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种多版本并发控制机制&#xff0c;主要用于数据库管理系统中&#xff0c;实现对数据库的并发访问。在编程语言中&#xff0c;MVCC可以实现事务内存。 MVCC的特点是读不加锁&#xff0c;读写不冲突。MVC…

Python 一步一步教你用pyglet制作“彩色方块连连看”游戏(续)

“彩色方块连连看”游戏(续) 上期讲到相同的色块连接&#xff0c;链接见&#xff1a; Python 一步一步教你用pyglet制作“彩色方块连连看”游戏-CSDN博客 第八步 续上期&#xff0c;接下来要实现相邻方块的连线&#xff1a; 首先来进一步扩展 行列的类&#xff1a; class R…

STM32 can通信部分函数注释

-----CAN1_Mode_Init CAN模式初始化函数:u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) //CAN初始化 //tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1tq~ CAN_SJW_4tq //tbs2:时间段2的时间单元. 范围:CAN_BS2_1tq~CAN_BS2_8tq; //tbs1:时间段1的时间单元. 范…

day63 单调栈part02

503. 下一个更大元素 II 中等 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更…

vue快速入门(六)v-else和v-else-if

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-else-if用法v-else用法 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

docker部署nacos,单例模式(standalone),使用内置的derby数据库,简易安装

文章目录 前言安装创建文件夹docker指令安装docker指令安装-瘦身版 制作docker-compose.yaml文件查看页面 前言 nacos作为主流的服务发现中心和配置中心&#xff0c;广泛应用于springcloud框架中&#xff0c;现在就让我们一起简易的部署一个单例模式的nacos&#xff0c;版本可…

算法学习系列(四十六):迭代加深、双向DFS

目录 引言概念一、加成序列二、送礼物 引言 本文主要讲了&#xff0c; D F S DFS DFS 的另外两种优化&#xff0c;分别是迭代加深和双向 D F S DFS DFS &#xff0c;思路还是非常清晰明了的&#xff0c;只要会写 D F S DFS DFS 那么这些剪枝和优化其实还是非常的容易的&…

Vue监听器watch的基本用法

文章目录 1. 作用2. 格式3. 示例3.1 value 值为字符串3.2 value 值为函数3.3 value 值为对象 4. 与计算属性对比 1. 作用 监视数据变化&#xff0c;执行一些业务逻辑或异步操作。 2. 格式 监听器 watch 内部以 key &#xff1a;value 的形式定义&#xff0c;key 是 data 中的…

用html写一个爱心

<!DOCTYPE html> <html lang"zh-CN"><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><title>爱您</title><style>* {padding: 0;margin: 0;}body {background-color: pin…

C语言笔试题之求解X的平方根

求解X的平方根 一、实例要求 1、给定一个非负整数 x &#xff0c;计算并返回 x 的算术平方根 &#xff1b;2、由于返回类型是整数&#xff0c;结果只保留整数部分 &#xff0c;小数部分将被舍去&#xff1b;3、不允许使用任何内置指数函数、运算符&#xff1b; 二、实例分析…

图DP

目录 有向无环图DP 力扣 329. 矩阵中的最长递增路径 力扣 2192. 有向无环图中一个节点的所有祖先 有向有环图DP 力扣 1306. 跳跃游戏 III 有向无环图DP 力扣 329. 矩阵中的最长递增路径 给定一个 m x n 整数矩阵 matrix &#xff0c;找出其中 最长递增路径 的长度。 对…

C语言:文件操作(二)

目录 前言 4、文件的顺序读写 4.1fputc 4.2 fgetc 4.3 fputs 4.4 fgets 4.5 fprintf 4.6 fscanf 4.7 fread和fwrite 结&#xff08;二&#xff09; 前言 接者“C语言&#xff1a;文件操作&#xff08;一&#xff09;”往下讲。 本篇文章将介绍C语言的文件操作&#xf…

【数字图像处理matlab系列】空间域处理之亮度变换(imadjust函数使用)

【数字图像处理matlab系列】空间域处理之亮度变换(imadjust函数使用) 在空间域中&#xff0c;图像处理就是直接对图像的像素进行操作 imadjust 是 MATLAB 中用于调整图像强度值或颜色图的函数。它可以改变图像的对比度&#xff0c;使得图像更清晰或更易于分析。以下是 imadju…

【MATLAB源码-第178期】基于matlab的8PSK调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在通信系统中&#xff0c;频率偏移是一种常见的问题&#xff0c;它会导致接收到的信号频率与发送信号的频率不完全匹配&#xff0c;进而影响通信质量。在调制技术中&#xff0c;QPSK&#xff08;Quadrature Phase Shift Keyi…

4.2总结

了解了部分Api的使用并学习了接口的API API API包含了较多种类&#xff08;System,Runtime等&#xff09; System其实就是一个工具类&#xff0c;提供了一些与系统相关的方法 下面有一些常间的System方法 方法名说明public static void exit (int status)终止当前运行的ja…

Android JNI 调用第三方SO

最近一个项目使用了Go 编译了一个so库&#xff0c;但是这个so里面还需要使用第三方so库pdfium, 首先在Android工程把2个so库都放好 在jni中只能使用dlopen方式&#xff0c;其他的使用函数指针的方式来调用&#xff0c;和windows dll类似&#xff0c;不然虽然编译过了但是会崩溃…

picGo图床搭建gitee和smms(建议使用)

picGoGitee 这个需要下载gitee插件, 因为官方频繁的检索文件类型, 有时候也会失效 如果没有特殊要求平时存个学习的要看图中文字的重要的图片建议就是smms, 免费也够用! 图片存本地不方便, 各种APP中来回传还会失帧损失画质, 所以你值得往下看 picGosmms 建议使用这个, sm…

为移动云数据实现基于可撤销属性组的加密:多代理辅助方法

参考文献为2023年发表的Achieving Revocable Attribute Group-Based Encryption for Mobile Cloud Data: A Multi-Proxy Assisted Approach 动机 对于目前的代理辅助的可撤销基于属性加密来说&#xff0c;外包解密存一些缺点。当多个具有相同属性的用户请求外包转换时&#x…