Это только второй раз, когда я задал вопрос здесь. В прошлый раз это было очень полезно, поэтому я подумал, что передумаю, так как я застрял в другом проекте C!Мультиплексные 7 сегментов, использующие PIC16F877A, используя C
Я просто добавлю, что я более или менее полный n00b на C, но знаю почти достаточно, чтобы попытаться с минимальной помощью (до сих пор!), И я не прошу кого-то сделать это для меня, просто для нескольких указателей (без каламбура) в правильном направлении.
Я проделал довольно много поисковых запросов по этой теме, но я стараюсь не просто копировать и вставлять код из какого-то онлайн-источника, поскольку я хочу учиться на этом, поэтому я пытаюсь разработать код сам.
То, что я пытаюсь сделать тогда: Я построил доску разработки PIC с двумя общими дисплеями 7-сегментного катода, подключенными к PORTD от «877A». Я подключил RB0 и RB1 к транзисторам, которые переключаются на 7 сегментов и протестировали все с помощью простого кода, и он работает нормально, поэтому в цепи нет проблем. Мне удалось создать программу с 0-9, которая была очень простой, и теперь я решил попробовать мультиплексирование и подсчет от 0 до 99. Я написал код и разместил его ниже, и я хотел бы попросить кого-нибудь любезно указать мне, что я делаю с ним неправильно. Пока у меня цифры единиц 0-9, но цифры десятков просто остаются на 0.
У меня такое чувство, что я оставляю что-то, но я не знаю, что. Вероятно, я тоже немного его оскорбляю.
Я пытаюсь выполнить свой путь до создания программы, которая действует как датчик температуры, используя входной цепи делителя потенциалов термистора в АЦП ПИК (который является моим фактическим проектом) и отображает значение на мультиплексированный дисплей, который фактически не является частью проекта (мы должны использовать только одну цифру, которая чередуется между «2» и «5» и «C» для «25C» и т. д.), но я хочу немного ее принять далее, поэтому я пытаюсь разработать это для улучшенной версии.
Как бы то ни было, этого достаточно, чтобы я болтал, я вставляю код и надеюсь, кто-то может помочь.
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#pragma config CP = OFF, DEBUG = OFF, PWRTE = OFF
#pragma config CPD = OFF, LVP = OFF
#pragma config BOREN = OFF, WRT = OFF
#pragma config WDTE = OFF, FOSC = HS
#define _XTAL_FREQ 8000000
void segments (int digits);
int main(int argc, char** argv) {
TRISD = 0x00; //creates an output
TRISB = 0x00;
PORTD = 0x00; //sends zeros to all bits of port D
PORTB = 0x00;
int i,j,num,tens,units,digits;
do {
for (i=0;i<100;i++)
{
units=i%10; //extract units digit
num=i-units; //takes units away leaving multiple of 10
tens=num%10; //extract tens digit
for(j=0;j<20;j++) //should display each ten and unit for 200ms
{
RB0=1; //switch on units segment
RB1=0;
digits=units;
segments(digits);
__delay_ms (5);
RB0=0;
RB1=1;
digits=tens;
segments(digits);
__delay_ms (5);
}
}
}while (1); //do while runs forever
return (EXIT_SUCCESS);
}
void segments (int digits)
{
switch (digits)
{
case 0:
PORTD=0x3F; //zero
break;
case 1:
PORTD=0x06; //one
break;
case 2:
PORTD=0x5B; //two
break;
case 3:
PORTD=0x4F; //three
break;
case 4:
PORTD=0x66; //four
break;
case 5:
PORTD=0x6D; //five
break;
case 6:
PORTD=0x7D; //six
break;
case 7:
PORTD=0x07; //seven
break;
case 8:
PORTD=0x7F; //eight
break;
case 9:
PORTD=0x6F; //nine
break;
}
}
Если я забыл добавить что-либо, пожалуйста, сообщите мне. Большое спасибо за любую помощь!