Pic24Fマイコンボード その6 【7セグLED】
自分だけの勝手ですが、最近は毎週末ちょっとした何か作ってアップしようと思ってやっています。マルツのボードはその何かをちょっと動かすのに手軽なので先日から使っています。
(PICマイコン動かすための設定等が誰かの参考になれば幸いかな、程度の思いはあります。)
さて、今回は7セグメントLEDを動かしてみました。
LEDは秋月の↓のものです。10個150円とかなりお安くなっています。
http://akizukidenshi.com/catalog/g/gI-01492/
LEDはこれでなくても良いのですが、PICで動かすにはアノードコモンが良いです。
理由はアノードコモンはPICのIOでLレベルでの引き込みで制御することができること、そしてIOの電流がLレベルの方が大きくとれることからです。(PICに限らず、Lの方が大きな電流を引けるマイコンが多いと思います。)
回路図は下の通りです。電池はボタン電池をやめて単三電池2本としています。
ソフトは、前回のLEDの物にちょっと手を加えただけです。
#include "P24FJ64GA004.h"
//config
_CONFIG2(0xF9FC);
_CONFIG1(0x3F7F);
//main loop
int main(void)
{
static unsigned char fontdata[] = {
0b00000011, // 0
0b10011111, // 1
0b00100101, // 2
0b00001101, // 3
0b10011001, // 4
0b01001001, // 5
0b01000001, // 6
0b00011111, // 7
0b00000001, // 8
0b00001001, // 9
0b01111111, // 10
0b10111111, // 11
0b11011111, // 12
0b11101111, // 13
0b11110111, // 14
0b11111011, // 15
0b11111110, // 16
};
unsigned int i,t;
//Setup clock
OSCCON = 0x11C0; // FRCPLL
CLKDIV = 0x0030; // 1MIPS SETTING
//IO PORT SETTING
AD1PCFG = 0xffff; // Analog input disable
TRISA = 0x0000; // All output
TRISB = 0x0000; // All output
TRISC = 0x0000; // All output
//Loop
t=25;
while(1){
for (i=0;i<=16;i++) {
Set_Port(fontdata[i]);
Wait_time(t);
}
t *=2;
}
}
// IO PORT CONTROL
void Set_Port(unsigned char val) {
PORTCbits.RC1 = val & 0x0001;
PORTCbits.RC0 = (val & 0x0002)>>1;
PORTBbits.RB3 = (val & 0x0004)>>2;
PORTBbits.RB2 = (val & 0x0008)>>3;
PORTBbits.RB1 = (val & 0x0010)>>4;
PORTBbits.RB0 = (val & 0x0020)>>5;
PORTAbits.RA1 = (val & 0x0040)>>6;
PORTAbits.RA0 = (val & 0x0080)>>7;
}
// WAIT LOOP
void Wait_time(unsigned int t) {
int t0,t1;
for (t0=0;t0<t;t0++) {
for (t1=0;t1<10000;t1++) {
}
}
}
動作は下の動画でご確認ください。
次は複数LEDのダイナミック動作でもやってみようかな。
それではまたです。
コメント