1

ここで質問したのは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;
            }
}

追加するのを忘れた場合は、お知らせください。助けてくれてありがとう!

4

1 に答える 1

0

tens = num / 10;の代わりに使用する必要があり%ます。

たとえば、i単位yの計算中に が 52 の場合、10 で割った残りを抽出します。これは 2 です。次に、52 から 2 を引いて 50 を取得し、10 の計算で同じことを行うと、確実に 0 が得られます。

于 2013-06-01T18:10:50.970 に答える