#include<iostm8s103k3.h> //将 MCU 型号(stm8s103k3)的头文件加进 来
int main( void )
{
PD_DDR |=0x10; //将 PD.4 设置成输出模式 PD_CR1 |=0x10; //将 PD.4 设置成推挽输出方式 PD_CR2 &=~0x10; //设置 PD.4 输出速率最大为 2MHZ
PD_ODR |=0x10; //将 ODR 寄存器的第 4 位置 1,即 PD.4=1;
while(1); //始终循环,程序停在此处
}
这里只有一个主函数,每个寄存器包括八位,分别控制 PD0~PD7 八个引脚, 这里与 led 灯相连的是 PD4,
PD_DDR |=0x10;就是 DDR 与十六进制数 10(即二进制 00010000)相或。 因为任何数与 0 相或都不变,与 1 相或则为 1,所以“或”有置位的效果,从右 边低位 0 位算起,第五个数恰好是 PD4 口,所以此句话相当于 PD4 设置成输出 模式。PD_CR1 |=0x10; PD_ODR |=0x10; 两句是同样的道理。
PD_CR2 &= ~0x10; ~是指取反符号,~0x10 就是 0xef,此句就是 CR2 与 fe
(即二进制 11101111)相与,因为任何数与 1 相与都不变,与 0 相与则必为 0, 所以“或”有清零的效果,所以此句话相当于把 CR2的第 4 位清零(即最大摆 率设为 2MHZ)。这是操作八位寄存器的常用习惯语句,它的好处就是,可以不 影响其他的引脚而直接操作你想操作的位,以后我们会经常用到。
PD_ODR |=0x10; 此句相当于直接把已设置成输出的 PD4 口直接拉成高电 平。
while(1);是个死循环,让程序停在此处,防止程序跑飞。 至此,我们按照上一章的讲解,新建一个工程,把上面的代码编辑好,编译
一下,下载到板子上,注意跳帽的连接,至少连接四个哦,就可以看到中间的 led
灯亮了。
2.1.4学习拓展:闪烁 led灯
想让 led 灯闪烁,其实就是让灯亮一会,再灭一会,也就是 ODR 这个寄存器 置高再清零的过程,但是单片机若只操作 ODR 寄存器,人的肉眼是看不到 led 灯变化的,所以中间可加一个延时函数。
#include<iostm8s103k3.h>
#define u8 unsigned char //为了方便编程,以下的程序中的
#define u16 unsigned int //unsigned char 都可以用 u8 表示。
#define u32 unsigned long void Clk_Config(void)
{
CLK_CKDIVR= 0x00; //系统时钟 1 分频
while(!(CLK_ICKR & 0x02)); //等待 HSI 准备好
}
void Io_Config(void)