|
本帖最后由 lmn2005 于 2023-7-1 08:59 编辑
32系列芯片的IO很多,驱动电流也足,完全可以直接驱动LED数码管。所以总想有空可以测试一下。
为了方便测试,本人把四位共阴数码管的SEG0至SEG7分别串联一个1K电阻接到PB0至PB7,位选择COM0至COM3接到PB8至PB11。线路的驳接使用了面包板和杜邦线。
数码管的显示编码如下:
- uint8_t const LEDCODE[]={
- 0x3F,/*0*/
- 0x06,/*1*/
- 0x5B,/*2*/
- 0x4F,/*3*/
- 0x66,/*4*/
- 0x6D,/*5*/
- 0x7D,/*6*/
- 0x07,/*7*/
- 0x7F,/*8*/
- 0x6F,/*9*/
- 0x77,/*A*/
- 0x7C,/*b*/
- 0x58,/*c*/
- 0x5E,/*d*/
- 0x79,/*E*/
- 0x71,/*F*/
- 0x74,/*h*/
- 0x38,/*L*/
- 0x54,/*n*/
- 0x5C,/*o*/
- 0x73,/*P*/
- 0x50,/*r*/
- 0x78,/*t*/
- 0x3E,/*U*/
- 0x40,/*-*/
- };
复制代码
STM32的HAL库推出后,得到用户的广泛应用,但HAL库找不到一个函数能像51单片机一样直接给同一系列的IO进行赋值的,所以只能通过最原始的方法----操作寄存器来对PB口进行赋值。其实,也不复杂,就只需一句:
- #define GPIOB_OUT(x) GPIOB->ODR = x; // GPIOB端口输出 X
复制代码
然后自己再写一个显示函数:
- void ShowLed(uint8_t d1,uint8_t d2,uint8_t d3,uint8_t d4,uint8_t h);
复制代码
其中d1至d4为显示数据,h为小数点的位序。
另外,为了计时,还需要编写TIM2中断回调函数:
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
复制代码
测试效果:
https://www.bilibili.com/video/BV1sg4y1N7FX/ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|