【51单片机】(一)单片机的工具、基本操作,LED点亮,LED闪烁,LED流水灯

开始学51单片机了!


一.基本工具介绍

学习用的单片机型号为AT89C52。
在这里插入图片描述

编程语言为C语言,编程工具为Keil uVision5,驱动器为stc-isp-15xx-v6.87P。
(工程演示工具为Proteus 8 Professional)
在这里插入图片描述


二.51单片机-C程序的一些基本操作

①51单片机头文件为<reg52.h>和<regx52.h>,由于后者可以单独操控元件,所以一般选择后者。
②单片机程序主函数与一般的C语言不同,是void main()。
③单片机打开以后,想要一直运行写入的程序不中断,就要在最外套死循环while(1)。
④编译(build)之后,不会生成一个可以捎进单片机的文件,这需要我们自己去选择生成。
(1)点击菜单栏中的魔术棒工具。
在这里插入图片描述
(2)在output一栏中勾选Create HEX File。
在这里插入图片描述
⑤将编写好的程序捎进单片机:
(1)将单片机连接到电脑上,打开驱动器。
(2)选择相应的单片机型号,然后浏览程序文件,最后点击“下载/编程”。
在这里插入图片描述
(3)打开单片机,提示操作成功,程序即可运行。


三.LED点亮,操作延时,LED流水灯

先来看LED在单片机内部的原理图:
在这里插入图片描述
最左端接单片机端口P2(P2_0~P2_7),中间是8个发光二极管,与其相连的是保护限流电阻R,最右端是VCC(供电电压源)。所以,想要操作LED,需要通过控制P2口电平的高低来实现。

点亮LED的方法:

给P2端口赋二进制数,0代表P2端口低电平,1代表P2端口高电平。
由于右端VCC有电压供给,所以P2端为低电平时,产生的电势差可以点亮LED。
比如,1111 0000 表示LED1 、2 、3 、4是熄灭的,LED5 、6 、7 、8是点亮的。
但是写程序时,我们要将这种二进制数转化为十六进制,比如1111 0000 = 0xF0(0x表示该数为十六进制数)

比如,点亮情况为1111 0000,程序就是:

  P2 = 0xF0;    //1111 0000

头文件<regx52.h>提供了单独控制的程序,比如我只想点亮LED1,那么就是:

  P2_1 = 0;     //P21端口现在是低电平

关于操作延时的方法

由于一条语句跳转到另一条语句时间极为短暂,如果想要让一条程序维持一段时间,则要强制延时。很简单,让程序跑循环语句,程序浪费的时间就是我们延时的时间。

void Delay(int x)
{
		while(x!=0)
		{
				x--;
		}
}

下面演示的程序是LED闪烁:

#include<regx52.h>

void Delay(int x)
{
	while(x!=0)
	{
		x--;
	}
}

void main()
{
	while(1)
	{
		P2_0=0;
		Delay(10000);
		P2_0=1;
		Delay(10000);
	}	
}

下面演示的程序是流水灯:(LED顺次闪烁)

#include<reg52.h>

void Delay(int time)
{
		int k=time;
		while(k!=0)
		{
			 k--;
		}
}

void main()
{
	 while(1)
	 {
		 
		 P2=0x80;   //1000 0000
			Delay(10000);
		 
		 P2=0x40;   //0100 0000
			Delay(10000);
		 
		 P2=0x20;   //0010 0000
			Delay(10000);
		 
		 P2=0x10;   //0001 0000
			Delay(10000);
		 
		 P2=0x08;   //0000 1000
			Delay(10000);
		 
		 P2=0x04;   //0000 0100
			Delay(10000);
		 
		 P2=0x02;   //0000 0010
			Delay(10000);
		 
		 P2=0x01;   //0000 0001
			Delay(10000);
		 
		/*
		 P2=0x7F;   //0111 1111
			Delay(10000);
		 
		 P2=0xBF;   //1011 1111
			Delay(10000);
		 
		 P2=0xDF;   //1101 1111
			Delay(10000);
		 
		 P2=0xEF;   //1110 1111
			Delay(10000);
		 
		 P2=0xF7;   //1111 0111
			Delay(10000);
		 
		 P2=0xFB;   //1111 1011
			Delay(10000);
		 
		 P2=0xFD;   //1111 1101
			Delay(10000);
		 
		 P2=0xFE;   //1111 1110
			Delay(10000);
		*/
	 }
}

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值