В данном уроке мы подключим два сегмента семисегментованого индикатора. Так как нужной библиотеки и модуля в данном случаи нету, напишем код полностью с нуля.
Стандартный семисегментовый индикатор выглядит следующим образом:
Для подключения семисегментного индикатора можно использовать любые свободные ножки, схему с прямым подключением и обратным можно посмотреть тут.
Все ножки настроены на выход с активным высоким уровнем (для семисегментного индикатора с прямым подключением):
Если у Вас семисегментный индикатор с обратным подключением — используем низкий активный уровень.
Так как у нас с таймерами не густо, мы будем использовать 1 таймер который мы подключим в ячейку TIMER1 для переключения индикаторов и для счета от 0 до 99. У Вас в программе, вместо чисел которые меняются по таймеру, может быть любое число, например некое значение с аналогового входа.
При настройке прерывания, не забываем делать изменения в файле прерываний (подробное описание в уроке №2).
Ниже код с описанием:
#include // part specific constants and macros
#include «PSoCAPI.h» // PSoC API definitions for all User Modules
unsigned int timerTicks; // переменная для подсчета количества прерываний
#pragma interrupt_handler myTimer_ISR_Handler;//объявляем прерывание
void myTimer_ISR_Handler(void);//функция прерывания
void namber(int t, char v);
void myTimer_ISR_Handler(void);
unsigned int speed =0;
int n=0;
int w=0;
int c[3]={0};
void namber(int t, char v) // выводим цыфры
{
LED_1_Off(); LED_2_Off();
switch (t)
{
case 0: LED_a_On(); LED_b_On();LED_c_On();LED_d_On();LED_e_On();LED_f_On();LED_g_Off();break;
case 1: LED_a_Off(); LED_b_On();LED_c_On();LED_d_Off();LED_e_Off();LED_f_Off();LED_g_Off();break;
case 2: LED_a_On(); LED_b_On();LED_c_Off();LED_d_On();LED_e_On();LED_f_Off();LED_g_On();break;
case 3: LED_a_On(); LED_b_On();LED_c_On();LED_d_On();LED_e_Off();LED_f_Off();LED_g_On();break;
case 4: LED_a_Off(); LED_b_On();LED_c_On();LED_d_Off();LED_e_Off();LED_f_On();LED_g_On();break;
case 5: LED_a_On(); LED_b_Off();LED_c_On();LED_d_On();LED_e_Off();LED_f_On();LED_g_On();break;
case 6: LED_a_On(); LED_b_Off();LED_c_On();LED_d_On();LED_e_On();LED_f_On();LED_g_On();break;
case 7: LED_a_On(); LED_b_On();LED_c_On();LED_d_Off();LED_e_Off();LED_f_Off();LED_g_Off();break;
case 8: LED_a_On(); LED_b_On();LED_c_On();LED_d_On();LED_e_On();LED_f_On();LED_g_On();break;
case 9: LED_a_On(); LED_b_On();LED_c_On();LED_d_On();LED_e_Off();LED_f_On();LED_g_On();break;
}
// включаем нужный семисегментный индикатор
if (v==1){LED_1_On();LED_2_Off();}
if (v==2){LED_2_On();LED_1_Off();}
}
void myTimer_ISR_Handler(void) // описание действия, когда происходит прерывание
{
timerTicks++;
speed++;
}
<<— Предыдущий урок
СОДЕРЖАНИЕ
Следующий урок —>>