一、数码管(拓展板)(共阴接法)
引脚控制
PA3 :RCLK 串型存储时钟输入 (上升沿有效)
PA2 :SCK 串行移位时钟输入(上升沿有效)
PA1 :SER 串型数据输入
发送数据时先发高位:因为会通过移位寄存器将他移到最后一个位置。
1、程序设计
(1)拓展板跳线帽连接(如下图)
(2)配置PA1、PA2、PA3为推挽输出
(3)通过STC-ISP软件得到数码管显示“段选”
(4)根据595芯片工作原理,编写seg_display函数(先发送高位)
1.1、共阴数码管码表
1.2、程序
“seg.c”
#include "seg.h"#define SER_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET)
#define SER_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET)#define SCK_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET)
#define SCK_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET)#define RCK_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET)
#define RCK_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET)u8 seg_buf[3]; // 数码管显示缓存数组
u8 seg_code[]={
// 0 1 2 3 4 5 6 7 8 9 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void Seg_Display(void)
{u8 i;for(i=0;i<8;i++){if(seg_buf[2] & 0x80) SER_H;else SER_L;SCK_L;SCK_H;seg_buf[2] <<= 1;}for(i=0;i<8;i++){if(seg_buf[1] & 0x80) SER_H;else SER_L;SCK_L;SCK_H;seg_buf[1] <<= 1;}for(i=0;i<8;i++){if(seg_buf[0] & 0x80) SER_H;else SER_L;SCK_L;SCK_H;seg_buf[0] <<= 1;}RCK_L;RCK_H;
}
“seg.h”
#ifndef __SEG_H
#define __SEG_H#include "main.h"extern u8 seg_buf[3];
extern u8 seg_code[];
void Seg_Display(void);#endif
main.c
void Seg_Process()
{HAL_Delay(100);seg_cnt++; seg_buf[0] = seg_code[seg_cnt/100];seg_buf[1] = seg_code[seg_cnt/10%10];seg_buf[2] = seg_code[seg_cnt%10];Seg_Display();
}
现象:数码管从0开始加
二、双路ADC采集(扩展板)
引脚:
PA4:RP5滑动变阻器
PA5:RP6滑动变阻器
2.1、程序设计步骤
(1)按上图接好线
(2)配置PA4、PA5为ADC采集模式,并设为单端模式
(3)配置ADC2的转换通道数为2
(4)测试HAL_ADC_Start的ADC启动函数和HAL_ADC_GetValue的ADC读取函数
代码
main.c
void ADC_Process()
{//RANK1 - ADC2_IN17HAL_ADC_Start(&hadc2);//开启adcvolt_rp5 = HAL_ADC_GetValue(&hadc2)/4095.0f*3.3f; //读取通道1//RANK2 - ADC2_IN13HAL_ADC_Start(&hadc2);volt_rp6 = HAL_ADC_GetValue(&hadc2)/4095.0f*3.3f;//读取通道2
}
三、光敏电阻(扩展板)
1、接线
PA3:光敏电阻开关量信号
PA4:光敏电阻的分压模拟电压值
2、程序设计
(1)接线如上图
(2)配置PA4为ADC采集模式,并设置单端模式
(3)配置PA3为gpio输入模式
(4)测试ADC采集和GPIO读取功能