это всего лишь второй раз, когда я задаю вопрос здесь. В прошлый раз было очень полезно, поэтому я подумал, что вернусь, так как я застрял в другом проекте C!
Я просто добавлю, что я более или менее полный ноль в C, но знаю почти достаточно, чтобы попытаться это сделать с минимальной помощью (до сих пор!), И я не прошу кого-то сделать это для меня, только для нескольких указатели (без каламбура) в правильном направлении.
Я немного погуглил по этой теме, но я изо всех сил стараюсь не просто копировать и вставлять код из какого-то онлайн-источника, поскольку я хочу учиться на этом, поэтому я пытаюсь разработать код самостоятельно. .
Что я пытаюсь сделать: я построил себе плату для разработки PIC с двумя 7-сегментными дисплеями с общим катодом, подключенными к PORTD '877A. Я подключил RB0 и RB1 к транзисторам, которые включают 7 сегментов, и проверил все с помощью простого кода, и он работает нормально, поэтому в схеме нет никаких проблем. Мне удалось создать программу, которая считает от 0 до 9, которая была очень простой, и теперь я решил попробовать мультиплексировать и считать от 0 до 99. Я написал некоторый код и разместил его ниже, и я хотел бы попросить кого-нибудь указать мне, что я делаю неправильно с ним. До сих пор у меня была цифра единиц, считая от 0 до 9, но цифра десятков, кажется, остается на 0.
У меня такое чувство, что я что-то упускаю, но не знаю что. Я, наверное, тоже немного усложняю.
Я пытаюсь работать над созданием программы, которая действует как датчик температуры, используя вход схемы термисторного делителя потенциала для АЦП 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;
}
}
Если я что-то забыл добавить, пожалуйста, дайте мне знать. Заранее большое спасибо за любую помощь!