meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

PICマイコン(16F648A)で7セグを試してみた

 

電子工作・マイコンに関する久しぶりの記事になります(*’▽’)

ここ最近はプログラミングの勉強をしていたので、全く手を付けることができませんでしたが、ある程度、目星がついたので再開していきます!

今日は、PICマイコン(16F648A)で7セグを試してみたので、記事に書きたいと思います!

目次

目的

PICマイコン(16F648A)で7セグをカウントアップすることが目的です。

1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 1 → (ループ)

といった感じに7セグをカウントアップしていきます。

使うもの

使うものは以下の通り

  • PICマイコン(16F648A)
  • 7セグ(OSL10561-LRA)
  • PICkit3(PICマイコンのライター)
  • ブレッドボード
  • ジャンパ線
  • 単三電池2本

@PICマイコン(16F648A)と7セグ
PICマイコン(16F648A)と7セグ

 

@PICkit3(ライター)
pickit3とアダプタ

回路・配線

(あまりにも簡単な回路なので、回路図はアップしません。)

PICマイコン(16F648A)と7セグ(OSL10561-LRA)のデータシートは以下のサイトです。

【データシート】
PICマイコン(16F648A)
7セグ(OSL10561-LRA)

 

データシートより、各々のピン番号をピックアップした画像をアップします。

@PICマイコン(16F648A)のデータシート
PICマイコン(16F648A)のデータシート

@7セグ(OSL10561-LRA)のデータシート
7セグ(OSL10561-LRA)のデータシート

7セグのピン番号とPICマイコン(16F648A)のピン番号を以下のように接続します。

(LED) – 7セグのピン番号 – PICのピン番号
A – 7 – RB5
B – 6 – RB4
C – 4 – RB2
D – 2 – RB1
E – 1 – RB0
F – 9 – RB6
G – 10 – RB7
DP – 5 – RB3

↓こんな感じです↓

@PICマイコン(16F648A)と7セグの接続図
PICマイコン(16F648A)と7セグの接続方法

普通、こういうときはブレッドボードに触れるくらい短い配線を使うのですが、あいにく、私は長いジャンパ線しか持っていません(;´・ω・)

醜いと思いますが、ご了承ください・・・orz

ソースコード

PICマイコン(16F648A)のコンパイラはMPLAB X IDE の XC8 を使用します。ちなみに無料で使えます。

ソースコードは以下です。

#include <xc.h>

// CONFIG
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#define _XTAL_FREQ 4000000

int main(void)
{
    /*
     * 【7セグの接続状況】
     * (LED) - 7セグのピン番号 - PICのピン番号
     * A - 7 - RB5
     * B - 6 - RB4
     * C - 4 - RB2
     * D - 2 - RB1
     * E - 1 - RB0
     * F - 9 - RB6
     * G - 10 - RB7
     * DP - 5 - RB3
    */
    
    // Bポートをすべて出力に変更
    TRISB = 0b00000000;
    
    // 7セグをカウントアップ
    while(1)
    {
        // 1
        // 7セグのB(6),C(4)をON
        // RB4 = 1, RB2 = 1
        PORTB = 0b00010100;
        __delay_ms(1000);
        
        // 2
        // 7セグのA(7),B(6),G(10),E(1),D(2)をON
        // RB5 = 1, RB4 = 1, RB7 = 1, RB0 = 1, RB1 = 1
        PORTB = 0b10110011;
        __delay_ms(1000);
    
        // 3
        // 7セグのA(7),B(6),G(10),C(4),D(2)をON
        // RB5 = 1, RB4 = 1, RB7 = 1, RB2 = 1, RB1 = 1
        PORTB = 0b10110110;
        __delay_ms(1000);        
        
        // 4
        // 7セグのF(9),G(10),B(6),C(4)をON
        // RB6 = 1, RB7 = 1, RB4 = 1, RB2 = 1
        PORTB = 0b11010100;
        __delay_ms(1000);
        
        // 5
        // 7セグのA(7),F(9),G(10),C(4),D(2)をON
        // RB5 = 1, RB6 = 1, RB7 = 1, RB2 = 1, RB1 = 1
        PORTB = 0b11100110;
        __delay_ms(1000);
        
        // 6
        // 7セグのA(7),F(9),G(10),E(1),C(4),D(2)をON
        // RB5 = 1, RB6 = 1, RB7 = 1, RB0 = 1, RB2 = 1, RB1 = 1
        PORTB = 0b11100111;
        __delay_ms(1000);
        
        // 7
        // 7セグのA(7),B(6),C(4)をON
        // RB5 = 1, RB4 = 1, RB2 = 1
        PORTB = 0b00110100;
        __delay_ms(1000);
        
        // 8
        // 7セグのA(7),B(6),C(4),D(2),E(1),F(9),G(10)をON
        // RB3 以外すべて1
        PORTB = 0b11110111;
        __delay_ms(1000);
        
        // 9
        // 7セグのA(7),B(6),C(4),D(2),F(9),G(10)をON
        // RB0, RB3 以外すべて1
        PORTB = 0b11110110;
        __delay_ms(1000);
    }
    
    return 0;
}

 

カウントアップする部分では、__delay_ms関数(マクロ?)を使用して1000ミリ秒つまり1秒待機するようにしています。

待機した後に、次のカウントにLEDを入れ替えます。

完成

完成しました。

動画をYouTubeにアップします。

@PICマイコンで7セグをカウントアップしてみた

 

以上です!

ノシ

 - 技術系