това е едва вторият път, когато задавам въпрос тук. Последният път беше доста полезен, така че реших да го прегледам отново, тъй като съм заседнал на друг C проект!
Само ще добавя, че повече или по-малко съм пълен n00b в C, но знам почти достатъчно, за да опитам това с минимална помощ (досега!) и не искам някой да направи това вместо мен, само за няколко указатели (без каламбур) в правилната посока.
Направих доста гугъл по тази тема, но се опитвам да не копирам и поставям код от някакъв онлайн източник, тъй като искам да се науча от този, така че се опитвам да разработя кода сам .
Какво се опитвам да направя тогава: Създадох си PIC развойна платка с два 7 сегментни дисплея с общ катод, свързани към PORTD на '877A. Свързах RB0 и RB1 към транзисторите, които включват 7-сегмента, и тествах всичко с прост код и работи добре, така че веригата няма никакви проблеми. Успях да създам програма, която брои от 0-9, което беше много елементарно и сега реших да опитам мултиплексиране и броене от 0-99. Написах някакъв код и го публикувах по-долу и бих искал да помоля някой любезно да ми посочи какво правя грешно с него. Досега имам цифрата на единиците, която брои 0-9, но цифрата на десетиците изглежда остава на 0.
Имам чувството, че пропускам нещо, но не знам какво. Вероятно също малко го усложнявам.
Опитвам се да проправя път към създаването на програма, която действа като температурен сензор, използвайки входа на термисторна потенциална делителна верига към ADC на PIC (което е действителният ми проект) и показва стойността на мултиплексиран дисплей, който всъщност не е част от проекта (трябва да използваме само една цифра, която се редува между „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;
}
}
Ако съм забравил да добавя нещо, моля, уведомете ме. Благодаря много предварително за всяка помощ!