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セグ

@PICkit3(ライター)

回路・配線
(あまりにも簡単な回路なので、回路図はアップしません。)
PICマイコン(16F648A)と7セグ(OSL10561-LRA)のデータシートは以下のサイトです。
【データシート】
・PICマイコン(16F648A)
・7セグ(OSL10561-LRA)
データシートより、各々のピン番号をピックアップした画像をアップします。
@PICマイコン(16F648A)のデータシート

@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セグの接続図

普通、こういうときはブレッドボードに触れるくらい短い配線を使うのですが、あいにく、私は長いジャンパ線しか持っていません(;´・ω・)
醜いと思いますが、ご了承ください・・・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セグをカウントアップしてみた
以上です!
ノシ
スポンサーリンク
関連記事