【单片机学习】02点亮LED灯/闪烁灯/跑马灯

一.前序:

1.需要安装CH340驱动,没有驱动,单片机通过usb连接电脑就不会识别到;

2.安装KEILC51软件,我理解该软件:一针对个C51芯片的集成开发环境。写C代码,生成该芯片类型的可执行文件,当然也可以调试等。

3.安装程序烧入程序,将上一步生成的.hex软件,烧入单片机中。

4.打开单片机开关,通电,运行我们写的程序。

二.第一个灯代码:

#include "reg52.h"


sbit led=P2^0;

void main()
{

  led=0;
  while(1)
  {

  }
}

将这个程序编译(KEIL中叫做build)后生成后缀为.hex的文件,将该文件烧录到单片机中,就可以通电运行了。

分析代码:

//首先打开头文件:reg52.h   看里面写了什么
/*--------------------------------------------------------------------------
REG52.H

Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __REG52_H__
#define __REG52_H__

/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;
sfr TCON  = 0x88;
sfr TMOD  = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IE    = 0xA8;
sfr IP    = 0xB8;
sfr SCON  = 0x98;
sfr SBUF  = 0x99;

/*此处省略后面内容,只看上面*/
#endif

C51语言中两个关键字:

sfr :用来访问特殊功能寄存器。什么是特殊功能寄存器:特殊功能寄存器在片内RAM中对应一个字节单元或者两个字节单元,通过访问该寄存器,可以控制单片机的定时器,计数器,串口,IO部件等等。

sbit:用来定义位变量. 写法:  sbit 位变量名=位地址;   

       位地址有两种:直接位地址  /  特殊功能寄存器带位号 或 可位寻址变量带位号(定义时用 ^ 相隔开).

扫描二维码关注公众号,回复: 8633971 查看本文章

      如上代码:sbit led=P2^0; //为变量名位led,地址位P2寄存器的第0位.

GPIO:通用输入输出端口。51单片机的CPIO引脚与外部设备连接起来就可以实现与外部通讯/控制等功能。

1.STC89C516芯片:

引脚:共40个,不同的引脚对应不同功能。其中Px.x就是GPIO引脚,一共4组,每一组8个.

三.跑马灯and闪烁灯

#include "reg52.h"


void delay()
{
	int i=500;
	for(i;i>0;i--)
	{	
		int j=100;
		 for(j;j>0;j--);
	}
} 
/* 竟然不能重载....*/
/*
void delay(unsigned int i)
{
	while(i--);
}
*/
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;

void Watering() //跑马灯 依次亮	0~7
{
	led0=0;delay();
	led1=0;delay();
	led2=0;delay();
	led3=0;delay();
	led4=0;delay();
	led5=0;delay();
	led6=0;delay();
	led7=0;delay();	
}

void UpAll() //亮所有灯
{
	led0=0;
	led1=0;
	led2=0;
	led3=0;
	led4=0;
	led5=0;
	led6=0;
	led7=0;	
}
void ClearAll()	 //灭所有灯
{
	led0 = 1;
	led1 = 1;
	led2 = 1;
	led3 = 1;
	led4 = 1;
	led5 = 1;
	led6 = 1;
	led7 = 1;
}

void ReverseLed()
{
	led0 = ~led0;
	led1 = ~led1;
	led2 = ~led2;
	led3 = ~led3;
	led4 = ~led4;
	led5 = ~led5;
	led6 = ~led6;
	led7 = ~led7;
}
void main()
{	unsigned int times=5;
	while(times--)
	{
		UpAll();
		delay();
		ClearAll();	
		delay();
	}

	times=5;
	while(times--)
	{
		Watering();
		delay();
		ReverseLed();

	}

	while(1)
	{
		UpAll();
	}
}

很low的一段代码.....

发布了89 篇原创文章 · 获赞 68 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zDavid_2018/article/details/103234282