概要
PIC16F84AとMPLAB XC8 C Compilerを使用した開発例として,32.768kHzの水晶発振子を使用する際のプログラム例を紹介します. 開発環境は下記のとおりです.
PIC | PIC16F84A |
---|---|
MPLAB X IDE | MPLAB X IDE v2.26 |
MPLAB XC8 | MPLAB XC8 C Compiler v1.32 |
PICkit 2 | Application Version 2.61.00 / Device File Version 1.61.00 |
回路
回路図
電源はPICkit 2から5.0Vを供給し,32.768kHzの水晶発振子でPIC16F84Aを動作させています. 7セグメントLEDの電流制限抵抗には200Ωを使用していますが,330~1kΩ程度の方が良いかもしれません.
回路部品
下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.
番号 | 部品名 | 型番 | 数量 | 参考単価 |
---|---|---|---|---|
U1 | PICマイコン | Microchip PIC16F84A | 1 | |
X1 | 水晶発振子 | 32.768kHz | 1 | |
C1, C2 | セラミック コンデンサ |
22pF | 2 | |
LED1 | 7セグメントLED | PARA LIGHT C-421E (カソードコモン) |
1 | |
R1 | 炭素皮膜抵抗 | 各社 1/4W 10kΩ | 1 | 1円 (互換品) |
R2 - R8 | 炭素皮膜抵抗 | 各社 1/4W 200Ω | 7 | 1円 (互換品) |
その他 | リード線など | 適量 |
プログラム
main.c
下記はソースファイル「main.c」です.参考になれば幸いです.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <xc.h> // 16F84A // CONFIG #pragma config FOSC = LP // Oscillator Selection bits (LP 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) // プロトタイプ宣言 void display7seg(unsigned char font_id); void main( void ) { unsigned char count = 0; PORTA = 0x00; // PORTAを初期化 PORTB = 0x00; // PORTBを初期化 TRISA = 0x00; // PORTAの入出力設定 TRISB = 0x00; // PORTBの入出力設定 while (1){ // 無限ループ display7seg(count); _delay(8192); // 1秒の待ち時間: Fosc / 4 count++; if (count > 9){ count = 0; } } } /* * 7セグメントLED表示関数 * * 引数: * unsigned char font_id 表示するフォントのID * * 復帰値: * なし */ void display7seg(unsigned char font_id) { const unsigned char font[11] = { // gfedcba 7セグメントLED 点灯パターン 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111101, // 6 0b00100111, // 7 0b01111111, // 8 0b01101111, // 9 0b00000000 // 表示なし }; PORTB = font[font_id]; } |