一、数码管(拓展板)(共阴接法)
引脚控制
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_IN17
HAL_ADC_Start(&hadc2);//开启adc
volt_rp5 = HAL_ADC_GetValue(&hadc2)/4095.0f*3.3f; //读取通道1
//RANK2 - ADC2_IN13
HAL_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读取功能