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セグをカウントアップしてみた
以上です!
ノシ
スポンサーリンク
関連記事