<PIC16F688 LEDにデータ表2>
今回は、PORTAにもLED4個接続し、PORTCの4個と合わせて8bitにして見たいと思います。
<PIC16F688 LEDにデータ表示1>では、下位4bitをPORTCに渡してLEDを表示していました。
今度は、上位4bitをPORTAに渡します。
イメージ的には、'A'だと、次のようになります。
RA3 RA2 RA1 RA0 RC3 RC2 RC1 RC0
〇 ● 〇 〇 〇 〇 〇 ●
従って、PORTC=moji;で、下のように下位4bitを渡せます。
RC3 RC2 RC1 RC0
〇 〇 〇 ●
続いて、PORTA=moji>>4;で、下のように上位4bitを渡せるはずですが、RA3は入力専用なので使えません(-_-;)
RA3 RA2 RA1 RA0
〇 ● 〇 〇
そこで次のようにシフトビットします。
RA0=moji>>4; RA0に〇が入る
RA1=moji>>5; RA1に〇が入る
RA2=moji>>6; RA2に●が入る
RA4=moji>>7; RA4に〇が入る
RA4 RA2 RA1 RA0
〇 ● 〇 〇
プログラム
-----------------------------------------------------------------------------------------
#include
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
__IDLOC(0001);
#define _XTAL_FREQ 31000 //31k
#define JIKAN 1000
main()
{
OSCCON=0x00; //31k
ANSEL=0x00;
CMCON0=0x07;
TRISA=0b00000000; //RORTAを出力に設定
TRISC=0b00000000; //RORTCを出力に設定
PORTA=0b00000000; //RORTAをL(0)にする
PORTC=0b00000000; //RORTCをL(0)にする
char moji;
moji='A';
PORTC=moji;
while(1){
PORTC=moji; //下位4bitが連続で入る
RA0=moji>>4; //上位4bitの0bit目が入る
RA1=moji>>5; //上位4bitの1bit目が入る
RA2=moji>>6; //上位4bitの2bit目が入る
RA4=moji>>7; //上位4bitの3bit目が入る
__delay_ms(JIKAN);
PORTA=0x00;
PORTC=0x00;
__delay_ms(JIKAN);
}
}
-----------------------------------------------------------------------------------------
次はJA3RUAと表示するプログラムです。
RA4 RA2 RA1 RA0 RC3 RC2 RC1 RC0
〇 ● 〇 〇 ● 〇 ● 〇 J
RA4 RA2 RA1 RA0 RC3 RC2 RC1 RC0
〇 ● 〇 〇 〇 〇 〇 ● A
RA4 RA2 RA1 RA0 RC3 RC2 RC1 RC0
〇 〇 ● ● 〇 〇 ● ● 3
RA4 RA2 RA1 RA0 RC3 RC2 RC1 RC0
〇 ● 〇 ● 〇 〇 ● 〇 R
RA4 RA2 RA1 RA0 RC3 RC2 RC1 RC0
〇 ● 〇 ● 〇 ● 〇 ● U
RA4 RA2 RA1 RA0 RC3 RC2 RC1 RC0
〇 ● 〇 〇 〇 〇 〇 ● A
プログラム
-----------------------------------------------------------------------------------------
#include <htc.h>
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
__IDLOC(0001);
#define _XTAL_FREQ 31000 //31k
#define JIKAN 2000
func_moji();
char moji;
main()
{
OSCCON=0x00; //31k
ANSEL=0x00;
CMCON0=0x07;
TRISA=0b00000000; //RORTAを出力に設定
TRISC=0b00000000; //RORTCを出力に設定
PORTA=0b00000000; //RORTAをL(0)にする
PORTC=0b00000000; //RORTCをL(0)にする
while(1){
moji='J';
func_moji();
moji='A';
func_moji();
moji='3';
func_moji();
moji='R';
func_moji();
moji='U';
func_moji();
moji='A';
func_moji();
}
}
func_moji()
{
PORTC=moji; //下位4bitが連続で入る
RA0=moji>>4; //上位4bitの0bit目が入る
RA1=moji>>5; //上位4bitの1bit目が入る
RA2=moji>>6; //上位4bitの2bit目が入る
RA4=moji>>7; //上位4bitの3bit目が入る
__delay_ms(JIKAN);
PORTA=0x00;
PORTC=0x00;
__delay_ms(JIKAN);
}
-----------------------------------------------------------------------------------------
回路図