<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);
}
-----------------------------------------------------------------------------------------

回路図