ここで質問したのは2回目です。前回は非常に役に立ちましたので、別の C プロジェクトで立ち往生しているので、再訪しようと思いました!
私は多かれ少なかれCで合計n00bですが、最小限の助けでこれを試みるのに十分なことを知っていることを付け加えます(今まで!)そして、私は誰かに私のためにこれをするように頼んでいません。正しい方向へのポインター (しゃれた意図はありません)。
このトピックについてかなりのグーグル検索を行いましたが、オンラインソースからコードをコピーして貼り付けないように最善を尽くしているので、このソースから学びたいので、自分でコードを開発しようとしています.
次にやろうとしていること: '877A の PORTD に接続された 2 つのコモン カソード 7 セグメント ディスプレイを備えた PIC 開発ボードを自作しました。RB0 と RB1 を 7 セグをオンにするトランジスタに接続し、簡単なコードですべてをテストしましたが、正常に動作するため、回路にまったく問題はありません。私は非常に基本的な 0 から 9 までカウントするプログラムを作成することができたので、多重化と 0 から 99 までのカウントを試してみることにしました。私はいくつかのコードを書き、それを以下に投稿しました。私が間違っていることを誰かに親切に指摘してもらいたいです。これまでのところ、単位の桁数は 0 ~ 9 ですが、10 の桁は 0 のままのようです。
何かを忘れているような気がしますが、何がわかりません。私はおそらくそれを少し複雑にしすぎています。
PICのADCへのサーミスタ分圧回路の入力を使用して温度センサーとして機能するプログラムを作成し(これは私の実際のプロジェクトです)、多重化されたディスプレイに値を表示しようとしています。は実際にはプロジェクトの一部ではありません (「2」と「5」、「25C」の場合は「C」などを交互に使用する 1 桁のみを使用することになっています) が、もう少し進めたいので、「改良版のためにこれを開発しようとしています。
とにかく、コードを貼り付けて、誰かが助けてくれることを願っています。
#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;
}
}
追加するのを忘れた場合は、お知らせください。助けてくれてありがとう!