【蓝桥杯单片机记录】IO基础与LED控制

目录

一、IO基础

1.1 IAP15F2K61S2芯片原理图

1.2不同工作模式

二、新建工程的一些补充

2.1 keil中没有IAP15F2K61S2的头文件

解决:在isp软件中找到如下​编辑

2.2keil中的芯片选择

2.3推荐字体

三、sbit关键字

四、LED控制

4.1原理图

4.2不能直接通过IO口对LED进行控制

4.3找到“钥匙”->打开通往LED的“门”

4.3.1 74HC138译码器

4.4部分代码解读

4.5例子


一、IO基础

1.1 IAP15F2K61S2芯片原理图

【蓝桥杯单片机记录】IO基础与LED控制_第1张图片

  • 封装:LQFP44
  • IO数量:42 6组(P00-P07,P10-P17......),其余两个IO口 VCC供电,GND接地;
  • P10/RXD2/CCP1/ADC0 意味着单片机每个引脚有多个功能;串口2的引脚/ADC模拟信号采集/CCP的输出/普通的IO接口
  • 由于封装的限制(只有44个IO口),所以一个IO口具有多个功能;
  • P17 XTAL == 外接的晶振引脚
  • 外接晶振的需求:用外接晶振作为时钟源,比较稳定
  • 工作模式:准双向口/弱上拉(标准51模式/默认),推挽输出/强上拉,高阻输入,开漏输出

1.2不同工作模式

  • 准双向口读取外部数据,需要先锁存一个1【蓝桥杯单片机记录】IO基础与LED控制_第2张图片
  • 【蓝桥杯单片机记录】IO基础与LED控制_第3张图片
  • 【蓝桥杯单片机记录】IO基础与LED控制_第4张图片
  • 【蓝桥杯单片机记录】IO基础与LED控制_第5张图片
  • 【蓝桥杯单片机记录】IO基础与LED控制_第6张图片
  • 【蓝桥杯单片机记录】IO基础与LED控制_第7张图片

二、新建工程的一些补充

新建工程

2.1 keil中没有IAP15F2K61S2的头文件

解决:在isp软件中找到如下【蓝桥杯单片机记录】IO基础与LED控制_第8张图片

【蓝桥杯单片机记录】IO基础与LED控制_第9张图片

2.2keil中的芯片选择

【蓝桥杯单片机记录】IO基础与LED控制_第10张图片

2.3推荐字体

【蓝桥杯单片机记录】IO基础与LED控制_第11张图片

三、sbit关键字

sbit L1 = P0^0; //P0可位寻址 L1=1;
                //P0不可位寻址 P0 = 0x01;
//sbit -> 特殊功能寄存器某一位(可位寻址)

四、LED控制

4.1原理图

【蓝桥杯单片机记录】IO基础与LED控制_第12张图片

4.2不能直接通过IO口对LED进行控制

控制LED,不能直接对IO口进行操作,因为P0口可以同时驱动多个外设

【蓝桥杯单片机记录】IO基础与LED控制_第13张图片

4.3找到“钥匙”->打开通往LED的“门”

4.3.1 74HC138译码器

【蓝桥杯单片机记录】IO基础与LED控制_第14张图片

  • 如果想要控制LED,那么需要给Y4置低电平,如果想要给Y4置低电平,那么就需要了解译码器的“密码”:【蓝桥杯单片机记录】IO基础与LED控制_第15张图片
  • 再经过或非门,Y4C就可以置高电平“1”
  • 或非门:具有多端输入和单端输出的门电路。当任一输入端(或多端)为高电平(逻辑“1”)时,输出就是低电平(逻辑“0”);只有当所有输入端都是低电平(逻辑“0”)时,输出才是高电平(逻辑“1”)
  • 【蓝桥杯单片机记录】IO基础与LED控制_第16张图片

4.4部分代码解读

  • 打开锁存器: P2 = ((P2 & 0x1f) | 0x80); //P2 ->100XXXX X //开
  • 0x1f:0001 1111
  • 0x80 1000 0000
  • &:用来清零
  • |:用来置1
  • 关闭锁存器: P2 &= 0x1f; //P2 ->000XXXX X //关

4.5例子

(LED间隔交替闪烁)

//头文件声明区域
#include 
#include
//函数定义区域
//蜂鸣器关闭
void cls_buzz(void)
{
    P2 = (P2 & 0x1F | 0xA0);
    P0 = 0x00;
    P2 &= 0x1F;
}

//延时函数
void Delay100ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 5;
	j = 144;
	k = 71;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

//LED
void LED(unsigned int x)
{
		P2 = ((P2 & 0x1f) | 0x80);
		P0 = x;
		P2 &= 0x1f;
	
}



//程序主体
void main()
{
	    cls_buzz();
	while(1)
	{
			LED(0x55);
			Delay100ms();
			LED(~0x55);
			Delay100ms();			
		
		
	}
}

你可能感兴趣的:(51单片机,蓝桥杯,单片机,嵌入式硬件)