基于慧净电子HJ-5G开发板学习记录(1)——PIC16F877A开发流水灯
1.基于慧净电子HJ-5G开发板学习记录(1)——PIC16F877A开发流水灯
(1)流水灯介绍
下图为慧净电子HJ-5G开发板流水灯部分的电路,其中需要先将JP1跳线帽接上进行短接操作,这样8个流水灯呈现共地状态。此时如果想要实现流水灯操作,只需要轮流将A、B、C、D、E、F、G、H这8个引脚的1个赋值为高电平,其余引脚赋值为低电平即可。
![](https://img2024.cnblogs.com/blog/2739777/202501/2739777-20250126192633005-1661449895.png)
![](https://img2024.cnblogs.com/blog/2739777/202501/2739777-20250126212038029-2052072045.png)
(2)代码解析
首先是慧净电子官方给出的代码
#include<pic.h> //包含单片机内部资源预定义
__CONFIG(0xFF32); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
void delay(); //delay函数申明
/****************************************************************************
* 名 称:main()
* 功 能:主函数
****************************************************************************/
void main()
{
TRISD = 0; //portd 输出
TRISE = 0x01; //使能LED流水灯
TRISA = 0x00;
//PORTA = 0X00;
//PORTC = 0X00;
while (1) //死循环,让LED持续点亮
{
PORTD=0b00000001; //点亮第1个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
PORTD=0b00000010; //点亮第2个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
PORTD=0b00000100; //点亮第3个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
PORTD=0b00001000; //点亮第4个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
PORTD=0b00010000; //点亮第5个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
PORTD=0b00100000; //点亮第6个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
PORTD=0b01000000; //点亮第7个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
PORTD=0b10000000; //点亮第8个发光管
delay();
PORTD=0b00000000; //关掉发光管
delay();
}
}
/****************************************************************************
* 名 称:delay()
* 功 能:延时
****************************************************************************/
void delay()
{
int i; //定义整形变量
for (i = 10000;i--;); //延时
}
在官方给出的例程中,分别进行以下步骤配置:
- 引入<pic.h>头文件
- 将芯片配置字设置为0xFF32
- 设置延时函数
- TRISD = 0;将PORTD口设置为输出模式。
- TRISE = 0x01; 使能LED(在这里如果TRISE=0x00则会使得蜂鸣器报警)
![](https://img2024.cnblogs.com/blog/2739777/202501/2739777-20250126223156963-1754216552.png)
- TRISA = 0x00;
- 接下来轮循对PORTD口赋值为0b00000001,...,0x10000000。即可轮流点亮LED。
在这里,我们可以将代码进行优化,使用C语言的左移命令进行修改。
#include <pic.h> // 包含单片机内部资源预定义
__CONFIG(0xFF32); // 芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
void delay(); // 延时函数声明
/****************************************************************************
* 名 称:main()
* 功 能:主函数
****************************************************************************/
void main()
{
TRISE = 0x01;
TRISA = 0x00;
TRISD = 0; // 设置PORTD为输出,控制LED
while (1) // 死循环,让LED持续点亮
{
unsigned char led_pattern = 0b00000001; // 初始点亮第一个LED
for (int loop = 0; loop < 8; loop++) // 循环点亮8个LED
{
PORTD = led_pattern; // 点亮LED
delay(); // 延时
PORTD = 0b00000000; // 熄灭LED
delay(); // 延时
led_pattern = led_pattern << 1; // 左移,点亮下一个LED
}
}
}
/****************************************************************************
* 名 称:delay()
* 功 能:延时函数
****************************************************************************/
void delay()
{
int i; // 定义整型变量
for (i = 10000; i--;); // 延时
}
在这里,我使用了for循环和左移指令,分别赋予PORTD口不同的数值,使其呈现轮循的状态。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)