目录
一、IO基础
1.1 IAP15F2K61S2芯片原理图
- 封装: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
二、新建工程的一些补充
2.1 keil中没有IAP15F2K61S2的头文件
解决:在isp软件中找到如下![](https://i-blog.csdnimg.cn/blog_migrate/1be7c3f66c1e5fbcaa0719038c5b7717.png)
2.2keil中的芯片选择
2.3推荐字体
三、sbit关键字
sbit L1 = P0^0; //P0可位寻址 L1=1;
//P0不可位寻址 P0 = 0x01;
//sbit -> 特殊功能寄存器某一位(可位寻址)
四、LED控制
4.1原理图
4.2不能直接通过IO口对LED进行控制
控制LED,不能直接对IO口进行操作,因为P0口可以同时驱动多个外设
4.3找到“钥匙”->打开通往LED的“门”
4.3.1 74HC138译码器
- 如果想要控制LED,那么需要给Y4置低电平,如果想要给Y4置低电平,那么就需要了解译码器的“密码”:
- 再经过或非门,Y4C就可以置高电平“1”
- 或非门:具有多端输入和单端输出的门电路。当任一输入端(或多端)为高电平(逻辑“1”)时,输出就是低电平(逻辑“0”);只有当所有输入端都是低电平(逻辑“0”)时,输出才是高电平(逻辑“1”)
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 <STC15F2K60S2.H>
#include<intrins.h>
//函数定义区域
//蜂鸣器关闭
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();
}
}