Работать будем с семисегментным индикатором из Китая D2531CUR. Преимуществом данного индикатора является его стоимость. За пять трех знаковых семисегментных индикатора я заплатил всего 130 р.
К выводам 6,8,10 семисегментного индикатора необходимо подключить резисторы 1кОм чтобы ограничить ток и падение напряжение на сегменты индикатора. Остальное в комментариях в листинге программы
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
// Общие выводы индикатора
#define D0 0x100 //индикатор 1 GPIO_Pin_7
#define D1 0x200 //индикатор 2 GPIO_Pin_8
#define D2 0x400 //индикатор 3 GPIO_Pin_9
//0 0x3F 00111111
//1 0x06 00000110
//2 0x5B 01011011
//3 0x4F 01001111
//4 0x66 01100110
//5 0x6D 01101101
//6 0x7D 01111101
//7 0x07 00000111
//8 0x7F 01111111
//9 0x6F 01101111
// массив со значениями чисел от 0 до 9
int number[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
int i=0;
void delay (uint32_t time_delay) //функция задержки
{
uint32_t i;
for (i=0;i<time_delay;i++);
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//настройка портов под сегменты
GPIO_InitTypeDef SEG;
SEG.GPIO_Speed = GPIO_Speed_2MHz;
SEG.GPIO_Mode = GPIO_Mode_Out_PP;
SEG.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6;
GPIO_Init(GPIOA, &SEG);
//настройка портов под индикаторы
GPIO_InitTypeDef DIG;
DIG.GPIO_Speed = GPIO_Speed_2MHz;
DIG.GPIO_Mode = GPIO_Mode_Out_OD; //настраиваем выходы на режим open drain
DIG.GPIO_Pin = GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9;
GPIO_Init(GPIOA, &DIG);
while(1)
{
for (i=0; i<10; i++){
GPIO_Write(GPIOA, number[i]);
GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET); //выключаем индикатор 2 и 3
GPIO_WriteBit(GPIOA, GPIO_Pin_9, Bit_SET);
delay (3000000);
}
for (i=0; i<10; i++){
GPIO_Write(GPIOA, number[i]);
GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET); //выключаем индикатор 1 и 3
GPIO_WriteBit(GPIOA, GPIO_Pin_9, Bit_SET);
delay (3000000);
}
for (i=0; i<10; i++){
GPIO_Write(GPIOA, number[i]);
GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET); //выключаем индикатор 1 и 2
GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET);
delay (3000000);
}
}
}
Комментариев нет:
Отправить комментарий