невозможно отображать числа от 0 до 9 на 7-сегментном дисплее с помощью микрока

Я новичок в программировании микроконтроллеров с помощью MIKROC. Я пытаюсь отобразить числа от 0 до 9 на 7-сегментном дисплее с помощью mikroc. Я использовал бесконечный цикл while. Внутри цикла while я использовал функцию «delay_ms(500)» с другими кодами. Но вместо того, чтобы показывать числа от 0 до 9, он показывает первые несколько чисел, например 0,1,2.

Мой код ниже

void main()
{

 trisb=0;
 portb=0;

 while(1){
 delay_ms(500);
  portb=0x3F;
  delay_ms(500);

  portb= 0x06;
  delay_ms(500);
  portb= 0x5B;
  delay_ms(500);
  portb=0x4F;
  delay_ms(500);
  portb=0x66;
  delay_ms(500);
  portb=0x6D;
  delay_ms(500);
  portb=0x7D;
  delay_ms(500);
  portb=0x07;
  delay_ms(500);
  portb=0x7F;
  delay_ms(500);
  portb=0x6F;
  delay_ms(500);



 }
}

Моя принципиальная схема

введите здесь описание изображения


person Mushfiqul Tuhin    schedule 24.03.2015    source источник
comment
Код выглядит нормально, delay_ms(500) - это то, что он говорит.. задержка в полсекунды.. (пауза) - но мы не можем проверить шестнадцатеричные значения, не зная, какие контакты подключены к чему. Пожалуйста, предоставьте электрическую схему , или больше контекста   -  person Henrik    schedule 24.03.2015
comment
Привет, спасибо за ваш ответ. Я отредактировал свой пост со схемой.   -  person Mushfiqul Tuhin    schedule 24.03.2015


Ответы (1)


Прежде всего, если это стандартный 7-сегментный дисплей, то это просто набор светодиодов с общим катодом или общим анодом. Следовательно, вы захотите защитить свой микрочип от «короткого замыкания», так как светодиод полностью откроется и либо получит максимальную мощность от контактов (общий катод), либо заставит ваш чип потреблять максимальную мощность (общий анод).

Ваша принципиальная схема не показывает, что используется, поэтому я здесь говорю в общем.

Поэтому добавьте резистор последовательно с контактами ЖК-дисплея (не общий, а другие контакты). Для 5 вольт вам обычно нужно где-то между 300 и 1 кОм в зависимости от желаемой интенсивности света!

Далее

кое-что о связи с ЖК-дисплеями, а ЖК-дисплей можно настроить как: «abcdefg» или как «gfedcba»

bit# name description
MSb "A" is the top LED bar
2.b "B" is the right most upper LED bar
3.b "C" is the right most lower LED bar
4.b "D" is the the bottom LED bar
5.b "E" is the left most lower LED bar
6.b "F" is the left most upper LED bar
7.b "G" is the center LED bar
8.b "D.P" is the dot .. also indicating down.. (or decimal point)

значение для общего катода (обратный битовый шаблон для общего анода):

Digit   gfedcba abcdefg a   b   c   d   e   f   g
0       0×3F    0×7E    on  on  on  on  on  on  off
1       0×06    0×30    off on  on  off off off off
2       0×5B    0×6D    on  on  off on  on  off on
3       0×4F    0×79    on  on  on  on  off off on
4       0×66    0×33    off on  on  off off on  on
5       0×6D    0×5B    on  off on  on  off on  on
6       0×7D    0×5F    on  off on  on  on  on  on
7       0×07    0×70    on  on  on  off off on  off
8       0×7F    0×7F    on  on  on  on  on  on  on
9       0×6F    0×7B    on  on  on  on  off on  on

поэтому я полагаю (основываясь на ваших шестнадцатеричных значениях), у вас должен быть тип «gfedcba», как вы можете видеть, ваш код соответствует таблице. Если и только если общий подключен к земле.

(подробнее читайте здесь: http://www.electronicsblog.org/seven-segment-display-everything-you-need-to-know-about/)

Код Я все еще не вижу проблемы с вашим кодом, если вы смогли отобразить числа 0, 1 и 2. Поскольку это означает, что все светодиоды зажглись хотя бы один раз, и что ваш PIC должен быть правильно настроен.

Мое лучшее предположение состоит в том, что это на самом деле электрическая проблема. ваш PIC должен с этим кодом показывать числа от 0 до 9 с интервалом в полсекунды, если он не сбрасывается после достижения определенного числа. Это может быть плохой припой или, что более распространено, проблема с нестабильным питанием постоянного тока.

Чтобы подавить небольшие всплески питания, попробуйте добавить несколько конденсаторов параллельно источнику питания. для тестирования вы можете попробовать: 100 нФ и 1000 мкФ. Не волнуйтесь, он ничего не сделает.. кроме поглощения высокочастотного шума.. Это частный случай фильтра нижних частот..

person Henrik    schedule 24.03.2015
comment
В вашем случае MSB — это RB0, 2.b — это RB1 и т. д. для порта B. - person Henrik; 24.03.2015