简要:
本文主要讲述,用两种方式点亮板子的一个LED灯,
并介绍相关的寄存器和硬件,了解板子的基本原理和简单外设(发光二极管)
正文:
第一种:
先将键帽移动至PH0与LED2一端
创立工程(相关文章之前有写,不会的可以往期查阅)
打开ESK-303的使用手册中看原理图
可知控制LED1/LED2的寄存器是PH0/PH1寄存器
1.了解相关的寄存器 (手册的下载之前有发过相关文章)
1.看门狗定时器
为防止mcu复位,在代码开始之前,需要除能看门狗
代码例子 :
_wdtc=0b10101111; // 关闭看门狗计时器,避免它在程序运行时复位单片机
注意,合泰板子是以 _****(下划线加寄存器名称)命名
2.输入/输出端口
_pxgc是合泰gpio口的命名方式,使能0为输出,使能1为输入,
和51的P0 ,P1,P2相似,可近似理解
(这里的x可以是A,B,C,D,E,F,G,H)
合泰的输入输出寄存器资源极多,
我们主要用到输入输出端口控制寄存器
相关代码例子:
_phc = 0x00000001;//对寄存器整体赋值
_ph0 = 1; //对寄存器的某一位进行赋值
更多关于输入输出端口的寄存器和相关配置,可以自行查阅手册
2.点灯代码
#include "HT66F2390.h" // 包含HT66F2390单片机的头文件,用于访问特定的功能和寄存器
//定义LED控制宏
#define LED _phc // 将宏LED定义为对应控制端口PHC(用于控制GPIO的高低电平)
#define LED2 _ph0 // 将宏LED2定义为对应PH0端口,用作LED的输出端口
#define LED1 _ph1 // 将宏LED1定义为对应PH1端口,同样用作LED的输出端口
//void delay(unsigned long count); // 声明延时函数 10us
void main() // 主函数
{
_wdtc=0b10101111; // 关闭看门狗计时器,避免它在程序运行时复位单片机
LED = 0; //配置ph寄存器对应的io口为输出模式
while(1)
{
_ph = 0x00000001; //ph0为高电平
//相同功能写法还有:_ph0 = 1;LED2 = 1;
}
}
void delay(unsigned long count) //延时级别10us
{
volatile unsigned long i;
for(i=0;i<count;i++)
asm("nop");
}
效果演示
第二种:
将键帽插回PH与I/O端
接线:
原理图:
依旧是在ESK-303手册中截图,可在合泰官网下载
代码:
#include "HT66F2390.h" // 包含HT66F2390单片机的头文件,用于访问特定的功能和寄存器
//定义LED控制宏
#define LED _phc // 将宏LED定义为对应控制端口PHC(用于控制GPIO的高低电平)
void delay(unsigned long count); // 声明延时函数 10us
void main() // 主函数
{
_wdtc=0b10101111; // 关闭看门狗计时器,避免它在程序运行时复位单片机
LED = 0; //配置ph寄存器对应的io口为输出模式
while(1)
{
_ph0 = 0; //PH0低电平,导通 LED亮
delay(50000); //延时500ms
_ph0 = 1; //PH0为高电平,不导通 LDE灭
delay(50000);
}
}
void delay(unsigned long count) //延时级别10us
{
volatile unsigned long i;
for(i=0;i<count;i++)
asm("nop");
}
效果演示:
HT66F2390 点灯演示