一、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软件中找到如下
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();
}
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/La_gloire/article/details/136080560
|