16F84A XC8開発例 - カウンタ回路(7セグメントLEDの制御)
はじめに
本ページでは,PIC16F84AとMPLAB XC8 C Compilerを使用した開発例として,1桁の10進数を1秒毎にカウントアップして7セグメントLEDに表示する回路(以降,カウンタ回路)を紹介します.
下記の環境で動作を確認しておりますが,動作を保証するものではありません. 掲載情報は自己責任の上でご利用ください.
PIC | 16F84A |
---|---|
MPLAB IDE | MPLAB IDE v8.91 |
MPLAB XC8 | MPLAB XC8 C Compiler v1.20 |
PICkit 2 | Application Version 2.61.00 / Device File Version 1.61.00 |
回路
回路図
今回はブレッドボード上に回路を組むことにしました. PICkit 2によるICSP (In Circuit Serial Programming)と電源供給を行うことし,回路部品数は必要最低限に抑えています.
回路部品
上記の回路図中で使用している回路部品のリストです. 参考単価は,7セグメントLEDを除き,秋月電子通商で購入した場合のものです.
番号 | 部品名 | 型番 | 数量 | 参考単価 |
---|---|---|---|---|
U1 | PICマイコン | Microchip 16F84A | 1 | 220円 |
X1 | セラロック | 村田製作所 10MHz | 1 | 30円 |
LED1 | 7セグメントLED | PARA LIGHT C-421E(カソードコモン) | 1 | |
R1 | 炭素皮膜抵抗 | 各社 1/4W 10kΩ | 1 | 1円 |
R2 - 8 | 炭素皮膜抵抗 | 各社 1/4W 200Ω | 7 | 1円 |
その他 | リード線など | 適量 |
プログラム
下記のプログラムはMPLAB XC8 C Compiler向けです.Cコンパイラの種類にご注意ください.
#include <xc.h>
#define _XTAL_FREQ 10000000 // 10MHz
__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);
void main()
{
unsigned char i; // 制御変数
unsigned char pattern[10] = {
// gfedcba // 7セグメントLED用点灯パターン
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111100, // 6
0b00000111, // 7
0b01111111, // 8
0b01100111 // 9
};
TRISA = 0x00; // PORTA入出力設定
TRISB = 0x00; // PORTB入出力設定
PORTA = 0x00; // PORTA初期化
PORTB = 0x00; // PORTB初期化
while (1) { // 無限ループ
for (i = 0; i <= 9; i++) { // 0から9までカウントアップ
PORTB = pattern[i]; // カウント値に対応する点灯パターンをPORTBに設定
__delay_ms(1000); // 1秒タイマ
}
}
}
実装
回路構成例
上記の回路図を基に,ブレッドボード上に回路を組み立てました.電源はPICKit 2から供給しています.
動作例
上記のプログラムを実際に動作させたときの動画です.
__delay_ms関数にエラーマークが表示されるときは
文法や関数の利用方法に問題がなくコンパイルが成功するにも関わらず, __delay_ms関数や__delay_us関数にエラー(警告)マークが表示される場合,下記の記事をご一読ください.