江科大51单片机学习笔记-第2节 LED点灯实验

目录

一、前言

二、LED实验

2024年八月三号,编写

一、前言

本文为江科大学习笔记(多为自己的一些总结),初衷:感觉博客上面的笔记,代码中有好多错误(当然我这笔记肯定也有错误,指正出来我也会立刻改),另外也是为了方便自己复习。

二、LED实验

老师教了4个实验:2-1 点亮一个LED

                               2-2 LED闪烁

                               2-3 LED流水灯

                               2-4 LED流水灯plus

做实验之前,我们首先得分析原理图,如图2-1所示

图2-1

1、RP9、RP10就是电阻,不过是4个电阻并联在一起,再给封装起来。连电阻主要是为了限流,如果直接连接LED,电流过大的话,会对LED有损害,也就是防止电流过大

2、二进制只有1和0这两个数字,单片机只能读懂二进制,1表示高电平,0表示低电平;

3、VCC:表示电源正极,高电平(其实就是高电压)。我们可以看见图上绿色三角形,那个就是LED(也叫发光二极管),图上三角形左边(也就是宽的那一边连接电源正极),三角形右边(有个竖线那一边连接电源负极)。

所以P20-P27连接的是电源负极(这是控制LED关键的一个点),如果给P20-P27高电平,又VCC为高电平,这样就没有电势差(没有电流),LED就不会亮;相反,如果给P20-P27低电平,又VCC为高电平,这样就会有电势差(有电流),LED就会亮。那怎么给P20-P27高低电平呢,以下部分为详细说明。

         CPU通过控制寄存器来控制硬件电路,硬件电路执行我们想要的功能。如图2-2所示,驱动器只是起到加大控制力度的作用。图中控制过程:CPU->寄存器->驱动器->P20-P27

具体来说,在LED这节课中,通过CPU控制寄存器的值(1/0,1对应高点平,0对应低电平),又通过驱动器加大控制力度,控制P20-P27输出高电平还是低电平,刚好和图2-1形成闭环,原理解释完毕。

寄存器(相当于存储器):每个寄存器含8个二进制位,一般每个寄存器是8位整体读写操作的(也就是说这8个二进制位是一个整体),//要是解释有错误或者不完整,欢迎指正

图2-2

2-1 点亮一个LED

有了上面的思路,CPU控制寄存器的值(1/0),控制P20-P27输出高电平还是低电平二进制

  如果想控制第一个灯亮,C语言编码:P2=1111 1110;//控制P2引脚电平,也就是P20-P27

但是C语言识别不了二进制,因此,把二进制转变成十六进制,如图2-3所示

图2-3

1、二进制转变成十进制的方法在本节最后面;

2、十进制、十六进制:数字1-9没区别,数字10开始,10-A,11-B,12-C,13-D,14-E,15-F;本节课只需要记住前15数字就行了。另外,十六进制,还要加前缀0x,比如:十进制7,对应十六进制0x7;十进制15,对应十六进制0xF

3、有同学问我,我补充说明一下:1111 1111,从左到右依次为第八个灯递减至第一个灯,

比如:1111 1110,表示只有第1个灯亮;1110 1101,表示第2个灯和第5个灯亮

写法一
#include <REGX52.H>

void main()
{
	P2=0x55;  //FE 1111 1110  /* */  55  0101 0101
}


写法二
#include <REGX52.H>

void main()
{
	while(1)
	{
		P2=0x55;  //FE 1111 1110  /* */  55  0101 0101
	}
}

写法三
#include <REGX52.H>

void main()
{
    P2=0x55;  //FE 1111 1110  /* */  55  0101 0101
	while(1)
	{
		
	}
}

2024年八月四号,编写

2-2 LED闪烁

闪烁,也就是在while循环中加入延时函数。具体来说,让灯亮一会,再让灯灭一会,如此反复循环。但是如果在while循环中只设置灯亮灯灭的程序,不设置延时时间的话,灯虽然也会亮和灭循环,但是肉眼是看不见的,只能看见灯一直亮。也就是说看不见LED闪烁

2-3 LED流水灯

流水灯,也是跟闪烁大同小异,也是在while循环中加入延时函数。具体来说,八个LED灯,在while循环中,设置每个灯亮一段时间(具体亮多少时间,也是在延时函数中设置的),这样每个灯都会亮一会再熄灭,一个接一个,就是流水灯的效果。

2-4 LED流水灯plus

        注意,江科大老师在讲解2-2、2-3、2-4部分的时候,每一部分延时函数都用不同的方法写出来,这样在真正做项目的时候,也会不容易记,很可能到时候就忘了。现在我们直接用老师说的2-4部分延时函数的方法,也就是说只要在LED实验中用到了延时,我们直接用升级版的方法,还能实现让不同的灯,亮的时间不同。

        通过上面说明,实验2-2、2-3、2-4,写起来就方便多了。如图2-4所示,为延时代码编写方法,打开STC-ISP,找到软件延时计算器,51单片机(STC89C52、STC89C52RC):系统频率都是12,定时长度直接设置1ms,第三步点击生成C代码,最后直接复制代码就行了。复制的代码,如图2-5所示

图2-4

图2-5

2-2 LED闪烁

添加完代码之后,如图2-6编写代码(不分先后顺序),void main为主程序,我们可以看到实现了LED的第一个灯的闪烁

图2-6

具体代码,如下(可直接复制,拿走不谢,只需要留个关注,点个赞就行哈)

#include <REGX52.H>

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while (xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

 
void main()
{
	P2=0xFE;  //1111 1110
	Delay1ms(500);
	P2=0xFF;  //1111 1101
	Delay1ms(500);
}

2-3 LED流水灯以及2-4流水灯plus(注意:2-3、2-4做的实验是一样的,老师上课做区分只是为了展示初级、高级方法,我们这里直接用高级方法),同上面2-2LED一样,代码如下

//LED流水灯,每个灯延时时间一样

#include <REGX52.H>

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while (xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}


void main()
{
	P2=0xFE;  //1111 1110
	Delay1ms(500);
	P2=0xFD;  //1111 1101
	Delay1ms(500);
	P2=0xFB;  //1111 1011
	Delay1ms(500);
	P2=0xF7;  //1111 0111
	Delay1ms(500);
	P2=0xEF;  //1110 1111
	Delay1ms(500);
	P2=0xDF;  //1101 1111
	Delay1ms(500);
	P2=0xBF;  //1011 1111
	Delay1ms(500);
	P2=0x7F;  //0111 1111
	Delay1ms(500);
}


//LED流水灯,每个灯延时时间不一样


#include <REGX52.H>

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while (xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}


void main()
{
	P2=0xFE;  //1111 1110
	Delay1ms(1000);
	P2=0xFD;  //1111 1101
	Delay1ms(1000);
	P2=0xFB;  //1111 1011
	Delay1ms(1000);
	P2=0xF7;  //1111 0111
	Delay1ms(500);
	P2=0xEF;  //1110 1111
	Delay1ms(500);
	P2=0xDF;  //1101 1111
	Delay1ms(500);
	P2=0xBF;  //1011 1111
	Delay1ms(500);
	P2=0x7F;  //0111 1111
	Delay1ms(500);
}

        上面代码中:unsigned int xms,xms相当于a这种变量。上课时,老师写xms,我以为x是变量,ms是单位,并不是的,xms是一个整体,你也可以这样定义:unsigned int a。另外,unsigned int和int类似,都是定义整数;区别是,int定义整数可以有负数,unsigned int没有负数只有0和正整数,因为这里定义的是时间,时间是没有负数的,所以用unsigned int来定义。

        LED点灯这节也就说完了,当然还有个知识点没说,二进制转十进制或者十六进制,见下图:

图2-7

整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。整理了关于单片机的相关资料,包括一些源码程序都打包在里面,资源真实可靠,都经过测试过,请放心使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值