Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

MPLABX XC8 PIC16F84A 例題5

$
0
0
 MPLABX XC8の勉強は、少しずつ進んでいます。

 今回は、PIC16F84Aで7セグメントLEDの表示テストをします。

 プログラムは、こちらのサイトを参考にさせていただきました。

 回路図です。

 各セグメントとPICの接続は

 RB0 -- a
 RB1 -- b
 RB2 -- c
 RB3 -- d
 RB4 -- e
 RB5 -- f
 RB6 -- g
として、680Ωの電流制限抵抗を介して接続します。 

イメージ 2



 ブレッドボードです。7セグメントLEDは、手持ちの秋月電子で販売している超高輝度カソードコモン7セグメントLED C-533SRの#1だけを使ってテストしました。超高輝度ですので、電流制限抵抗は、680Ωとしました。

イメージ 1

プログラムです。
0から9の文字に対応するセグメントデータを配列に保存しておき、数字に対応するデータをPORTBにセットすることにより、数字を表示します。

1秒ごとに0から9までの数字を繰り返し表示するプログラムです。

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

#define _XTAL_FREQ 10000000

void main()
{
    unsigned char seg_data[10] = {
        // gfedcba      // 7セグメントLED用点灯パターン
        0b00111111,     // 0
        0b00000110,     // 1
        0b01011011,     // 2
        0b01001111,     // 3
        0b01100110,     // 4
        0b01101101,     // 5
        0b01111101,     // 6
        0b00000111,     // 7
        0b01111111,     // 8
        0b01101111      // 9
    };
    
    TRISA = 0x00;       // PORTAは全て出力
    TRISB = 0x00;       // PORTBは全て出力
    PORTA = 0x00; 
    PORTB = 0x00; 
    
    while(1){                       // 無限ループ
        for(unsigned char i=0;i<=9;i++){
            PORTB = seg_data[i];   //セグメントデータをPORTBにセット
            __delay_ms(1000);         // 1 s待つ
        }
    }
}

今回のトラブルシューティング

 プログラムをPICに書き込んで、PICをブレッドボードにセットして、電源スイッチ ON。

 あれ、0 を表示したまま変わらない。

 プログラムを見直してみましたが、問題なし。

 電源ONの前に一度ブレッドボードの回路をチェックしましたが、もう一度見直し。

 分かりました。クロック用のレゾネータへの配線がずれていました。

 それを直すと、0,1,2,3と数字が1秒ごとに変わりました。

 テストOKでした。

Viewing all articles
Browse latest Browse all 440

Trending Articles