上一篇文章,我们介绍了如何从0开始新建工程,这一篇我们来实现最简单的操作,点亮LED灯。

HT66F0185芯片

1.通用输入\输出内部结构

在这里插入图片描述

2.GPIO寄存器介绍

在这里插入图片描述
PAWUn: PA 口引脚唤醒功能控制
0: 除能
1: 使能
PAPUn/PBPUn/PCPUn/PDPUn: 输入 / 输出引脚上拉功能控制
0: 除能
1: 使能
PAn/PBn/PCn/PDn: 输入 / 输出口数据位
0: 数据 0
1: 数据 1
PACn/PBCn/PCCn/PDCn: 输入 / 输出引脚类型选择
0: 输出
1: 输入

要将PA3配置为输出模式并初始化为低电平(默认熄灭状态),需按以下步骤设置寄存器:

_pac3 = 0;//设置为输出
_pa3 = 0;//引脚输出低电平

3.开发板原理图

在这里插入图片描述

在这里插入图片描述
  根据原理图分析,CXLED1灯的一端接地,另一端连接至P8接口的第1引脚,未直接与单片机端口相连。可采用跳线帽将P8的1、2引脚短接,使CXLED1通过CX(PA3)引脚接入单片机。此时只需向PA3引脚输出高电平即可点亮LED灯。

4.实现部分代码

由于CXLED1的一端连接到比较器的CX端,而芯片的I/O引脚数量有限,通常具有复用功能。这些引脚不仅可用作通用I/O,还可复用为CX、IIC通信总线或SPI通信总线等其他功能。通过查阅比较器的寄存器发现:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

因此,如果要将PA3直接用作通用I/O口,需要在初始化时将cos设置为1。

_cos = 1;	//设置pa3管脚为IO,而不是比较器输出

为防止程序运行时看门狗定时器触发系统复位,应在初始化阶段关闭看门狗功能。

_wdtc=0xa8;//关闭看门狗

为使LED灯状态变化更明显,我们采用亮1秒、灭1秒的循环模式。

while(1)
{
	CLED=0;
	delay_ms(1000);
	CLED=1;
	delay_ms(1000);
}

要实现LED灯1秒亮1秒灭的效果,可以通过以下步骤实现:

  1. 将PA3引脚设置为低电平点亮LED
  2. 调用1秒延时函数
  3. 将PA3引脚切换为高电平熄灭LED
  4. 再次调用1秒延时函数
  5. 循环执行上述步骤

为此需要预先编写一个精确的1秒延时函数。

我们之前曾在工程设置中选择了V3编译器,该编译器内置了延时函数功能。

在这里插入图片描述
在这里插入图片描述

根据HT66F0185芯片手册的数据,当系统时钟频率为20MHz时,每个时钟周期为0.05μs。图例显示指令周期为0.2μs,通过计算0.2μs/0.05μs=4,可以得出每个指令周期包含4个时钟周期(状态周期)。

我们的主频设置为8MHz,每个指令周期为1/8000000 * 4 = 0.5μs。因此,当主频为8MHz时,指令周期为0.5μs。
具体应用时:

  • GCC_DELAY(1) 表示延迟1个指令周期,即0.5μs
  • GCC_DELAY(2000) 表示延迟2000个指令周期,换算结果为0.5μs * 2000 = 1ms
void delay_ms(u16 ms)
{
	while(ms--)
	{
		GCC_DELAY(2000);//编译器自带延时指定个周期,在主频8Mhz下,一个指令周期为0.5us	
		GCC_CLRWDT();
	}
}

5.完整代码

#include "HT66F0185.h"

#define u8 unsigned char
#define u16 unsigned int

#define CLED _pa3

void delay_ms(u16 ms)
{
	while(ms--)
	{
		GCC_DELAY(2000);//编译器自带延时指定个周期,在主频8Mhz下,一个指令周期为0.5us	
		GCC_CLRWDT();
	}
}


void main()
{
	_wdtc=0xa8;//关闭看门狗
	_pac3=0;//设置为输出
	_pa3 = 0;
	_cos=1;//设置pa3管脚为IO,而不是比较器输出
	
	while(1)
	{
		CLED=0;
		delay_ms(1000);
		CLED=1;
		delay_ms(1000);
	}
}

6.实验现象

如下图所示,将跳线帽插上,就会发现CLED不停的亮1s,熄灭1s.
在这里插入图片描述

B86D20A-3芯片

1.GPIO寄存器介绍

在这里插入图片描述
PAWUn: PA 口引脚唤醒功能控制
0: 除能
1: 使能
PAPUn/PBPUn/PCPUn/PDPUn: 输入 / 输出引脚上拉功能控制
0: 除能
1: 使能
PAn/PBn/PCn/PDn: 输入 / 输出口数据位
0: 数据 0
1: 数据 1
PACn/PBCn/PCCn/PDCn: 输入 / 输出引脚类型选择
0: 输出
1: 输入

2.原理图

在这里插入图片描述
在这里插入图片描述
根据原理图设计,8个LED的正极共同连接至LEDCOM端,负极分别连接单片机的各个引脚。要实现LED点亮效果,需将LEDCOM端置为低电平,同时给对应引脚输出高电平。

3.部分代码

单片机引脚通常具备多功能特性。除了作为通用输入输出(GPIO)外,它们还可复用为其他特殊功能。因此,在初始化时往往需要先禁用其他功能,才能将其配置为GPIO模式。

LED1:
在这里插入图片描述
在这里插入图片描述

PD1端口的复位功能CTP0B:该引脚作为外部定时器输出功能可忽略;SSEG17用于LCD驱动的SEG输出,需关闭;LXT为晶振引脚,由于开发板未外接晶振,该功能无需配置。其他引脚功能参照此原则处理。

_seg17en = 0;	//选用GPIO功能
_pdc1 = 0;		//输出引脚选择
_pd1   = 0;		//输出低电平

在这里插入图片描述
在这里插入图片描述
这里直接设置

_ace7 = 0;

4.完整代码

#include "BS86D20A-3.h"

#define u16			unsigned int 

#define LED1_ON	 	_pd1   	= 1
#define LED1_OFF	_pd1  	= 0
#define LED2_ON	 	_pd0   	= 1
#define LED2_OFF	_pd0  	= 0
#define LED3_ON	 	_pa1   	= 1
#define LED3_OFF	_pa1  	= 0
#define LED4_ON	 	_pc1   	= 1
#define LED4_OFF	_pc1  	= 0
#define LED5_ON	 	_pc7   	= 1
#define LED5_OFF	_pc7  	= 0
#define LED6_ON	 	_pc6   	= 1
#define LED6_OFF	_pc6  	= 0
#define LED7_ON	 	_pc0   	= 1
#define LED7_OFF	_pc0  	= 0
#define LED8_ON	 	_pb6   	= 1
#define LED8_OFF	_pb6  	= 0
#define LEDCOM		_pd2    = 0


void delay_ms(u16 ms)
{
	while(ms--)
	{
		GCC_DELAY(2000);//编译器自带延时指定个周期,在主频8Mhz下,一个指令周期为0.5us	
		GCC_CLRWDT();
	}
}


void Led_Init()
{
	
	//LED1
	_seg17en = 0;
	_pdc1 = 0;	//输出引脚选择
	_pd1   = 0;

	//LED2
	_seg16en = 0;
	_pdc0 = 0;	//输出引脚选择
	_pd0   = 0;
	
	//LED3
	_pac1 = 0;	//输出引脚选择
	_pa1   = 0;
	
	//LED4
	_ace1 = 0;
	 _pcc1 = 0;	//输出引脚选择
	 _pc1   = 0;	
	
	 //LED5
	 _ace7 = 0;
	 _pcc7 = 0;	//输出引脚选择
	 _pc7   = 0;

	 //LED6
	 _ace6 = 0;
	 _pcc6 = 0;	//输出引脚选择
	 _pc6   = 0;	

	 //LED7
	 _ace0 = 0;
	 _pcc0 = 0;	//输出引脚选择
	 _pc0   = 0;	

	 //LED8
	 _tm2pc0 = 0;
	 _pbc0 = 0;	//输出引脚选择
	 _pb6   = 0;		


	 //LEDCOM
	_pdc2 = 0;
	LEDCOM;

}

void main()
{

	//_acerl=0;//设置ad口为IO
	Led_Init();
	
	while(1)
	{
		GCC_CLRWDT();
		LED1_ON;
		LED2_ON;
		LED3_ON;
		LED4_ON;
		LED5_ON;
		LED6_ON;
		LED7_ON;
		LED8_ON;		
		delay_ms(500);
		LED1_OFF;
		LED2_OFF;
		LED3_OFF;
		LED4_OFF;
		LED5_OFF;
		LED6_OFF;
		LED7_OFF;
		LED8_OFF;		
		delay_ms(500);
	}

}

将程序分别烧录至两块芯片后接通电源,此时开发板上的所有LED指示灯均被点亮。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐