蓝桥杯备赛 第二周 第一讲

第一讲 零基础入门(一)

新建工程

1.打开keil新建工程,选择类型ATC52

2.点击魔术棒,生成hex文件

3.点击品字按钮,更名

认识LED原理图

VCC代表1,Gnd是0,二极管在一端1 一端0的情况下才能导通,单片机控制Px,Px连接DBx,DBx的0或1直接控制二极管的亮灭

写一个程序使灯交替亮

1.在user添加新文件main.c

2.写好框架(注意:单片机程序是在死循环里执行的)

3.写程序

/*头文件区域*/
#include <REGX52.H>
/*main*/
void main ()
{
while(1)
{
  P1=0x55;

}
}
/*头文件区域*/
#include <REGX52.H>
/*main*/
void main ()
{
while(1)
{
  P1=0x55;

}
}

查看仿真效果

1.keil里点击build

2.打开仿真图,双击单片机

3.选择hex文件,开始仿真

4.结果发现效果相反,原因是最右边是第一个灯

修改代码

/*头文件区域*/
#include <REGX52.H>
/*main*/
void main ()
{
while(1)
{
  P1=0xAA;

}
}

操作具体的引脚点亮某个灯

/*头文件区域*/
#include <REGX52.H>
/*main*/
void main ()
{
while(1)
{
  P1_0=0;
  P1_7=0;
}
}

LED灯闪烁

先用烧录软件生成延时函数

将该函数套进一个while循环里,实现任意时间的延时

/*头文件区域*/
#include <REGX52.H>
/*延时函数*/
void Delay(unsigned char xms)	//@12.000MHz
{ 
	unsigned char data i, j;
while(xms--)
{
	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}
}


/*main*/
void main ()
{
while(1)
{
  P1_0=0;
	Delay(500);
  P1_0=1;
	Delay(300);
}
}

流水灯的实现

/*头文件区域*/
#include <REGX52.H>
#include <intrins.h>
/*延时函数*/
void Delay(unsigned char xms)	//@12.000MHz
{ 
	unsigned char data i, j;
while(xms--)
{
	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}
}

/*变量声明区域*/
unsigned char ucLed=0xfe;


/*main*/
void main ()
{
while(1)
{
 ucLed=_crol_(ucLed,1);
	P1=ucLed;
	Delay(100);
}
}

在该任务中认识到了位移函数

crol 循环左移 cror 循环右移 所属库:intrins.h

实现一个越来越快的流水灯

/*头文件区域*/
#include <REGX52.H>
#include <intrins.h>

/*延时函数*/
void Delay(unsigned char xms)	//@12.000MHz
{ 
	unsigned char data i, j;
while(xms--)
{
	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}
}

/*变量声明区域*/
unsigned char ucLed=0xfe;
unsigned char time=1000;

/*main*/
void main ()
{
while(1)
{
 ucLed=_crol_(ucLed,1);
	P1=ucLed;
	Delay(time);
	time=time-100;
}
}