目的
LEDを光らせる
LCDに応用予定
V Voltage 5V 電源
D Data データ 状態
C Clock クロック 周波
L Latch ラッチ 保持
G Ground グランド 接地
その1
その2
LCD
RSを追加シフトを使用
8ビット系は、引数がcharで正解
最大32256バイトのフラッシュメモリのうち、スケッチが1102バイト(3%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。
#define DW digitalWrite
//UNO
#define swdclk 4 // 4pin
#define swdio 3 // 3pin
#define en 2 // 2pin
void seg1(char ch,char rs)
{
shiftOut(swdio, swdclk, MSBFIRST, ch);
digitalWrite(rs, HIGH);
digitalWrite(en, HIGH);delay(1);digitalWrite(en, LOW);
}
//初期化
void setup() {
//7セグの初期化
pinMode(swdclk,OUTPUT);
pinMode(swdio,OUTPUT);
pinMode(en,OUTPUT);
DW(en,0);
DW(swdclk,0);
}//setup
//ループ
void loop() {
seg1( 0xff,0 ); delay(500); //500秒の待ち
seg1( 0x01,0 ); delay(2000); //500秒の待ち
seg1( 0xaa,0 ); delay(500); //500秒の待ち
seg1( 0x00,0 ); delay(500); //500秒の待ち
}//loop
いつものバージョン
#define DW digitalWrite
//UNO
#define swdclk 4 // 4pin
#define swdio 3 // 3pin
#define en 2 // 2pin
void seg1(int v,int rs)
{
for(int jj=0;jj<8;jj++){
if( (v<<jj) & 0x80 ){
DW(swdio,1); //ビットが1
} else {
DW(swdio,0); //ビットが0
}//endif
DW(swdclk,1);
DW(swdclk,0);
}//for
DW(swdio,rs);
DW(en,1); delay(1);
DW(en,0);
}//seg1
//初期化
void setup() {
//7セグの初期化
pinMode(swdclk,OUTPUT);
pinMode(swdio,OUTPUT);
pinMode(en,OUTPUT);
DW(en,0);
DW(swdclk,0);
}//setup
//ループ
void loop() {
seg1( 0xff,0 ); delay(500); //500秒の待ち
seg1( 0x55,0 ); delay(500); //500秒の待ち
seg1( 0xaa,0 ); delay(500); //500秒の待ち
seg1( 0x00,0 ); delay(500); //500秒の待ち
}//loop
軽量コンパクトのオリジナル
最大32256バイトのフラッシュメモリのうち、スケッチが1098バイト(3%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が17バイト(0%)を使っていて、ローカル変数で2031バイト使うことができます。
#define DW digitalWrite
//UNO
#define swdclk 4 // 4pin
#define swdio 3 // 3pin
#define en 2 // 2pin
//シフトパターン
// 12345678 12345678 12345678 12345678
char b8[8] = {0b10000000,0b01000000,0b00100000,0b00010000,
0b00001000,0b00000100,0b00000010,0b00000001 };
void seg1(char v)
{
for(int jj=0;jj<8;jj++){
if( (v & b8[jj]) == 0 ){
DW(swdio,0); //ビットが0
} else {
DW(swdio,1); //ビットが1
}//endif
DW(swdclk,1);
DW(swdclk,0);
}//for
DW(en,1);
DW(en,0);
}//seg1
//初期化
void setup() {
//7セグの初期化
pinMode(swdclk,OUTPUT);
pinMode(swdio,OUTPUT);
pinMode(en,OUTPUT);
DW(en,0);
DW(swdclk,0);
}//setup
//ループ
void loop() {
seg1( 0xff ); delay(500); //500秒の待ち
seg1( 0x55 ); delay(500); //500秒の待ち
seg1( 0xaa ); delay(500); //500秒の待ち
seg1( 0x00 ); delay(500); //500秒の待ち
}//loop
shiftOutを使ったプログラム
最大32256バイトのフラッシュメモリのうち、スケッチが1104バイト(3%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。
#define DW digitalWrite
//UNO
#define swdclk 4 // 4pin
#define swdio 3 // 3pin
#define en 2 // 2pin
//初期化
void setup() {
//7セグの初期化
pinMode(swdclk,OUTPUT);
pinMode(swdio,OUTPUT);
pinMode(en,OUTPUT);
DW(en,0);
DW(swdclk,0);
}//setup
//ループ
void loop() {
shiftOut(swdio, swdclk, LSBFIRST, 0xff);
digitalWrite(en, HIGH);digitalWrite(en, LOW); delay(500); //500秒の待ち
shiftOut(swdio, swdclk, LSBFIRST, 0x55);
digitalWrite(en, HIGH);digitalWrite(en, LOW); delay(500); //500秒の待ち
shiftOut(swdio, swdclk, LSBFIRST, 0xaa);
digitalWrite(en, HIGH);digitalWrite(en, LOW); delay(500); //500秒の待ち
shiftOut(swdio, swdclk, LSBFIRST, 0x00);
digitalWrite(en, HIGH);digitalWrite(en, LOW); delay(500); //500秒の待ち
}//loop
無駄に高速化
最大32256バイトのフラッシュメモリのうち、スケッチが1240バイト(3%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。
#define DW digitalWrite
//UNO
#define swdclk 4 // 4pin
#define swdio 3 // 3pin
#define en 2 // 2pin
#define on1() DW(swdio,0); //ビットが0
#define off1() DW(swdio,1); //ビットが1
void seg1(char v)
{
if( v & 0b10000000){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
if( v & 0b01000000){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
if( v & 0b00100000){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
if( v & 0b00010000){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
if( v & 0b00001000){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
if( v & 0b00000100){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
if( v & 0b00000010){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
if( v & 0b00000001){
on1(); /*ビットが1*/
} else {
off1(); /*ビットが0*/
}//end if
DW(swdclk,1);DW(swdclk,0);
DW(en,1);
DW(en,0);
}//seg1
//初期化
void setup() {
//7セグの初期化
pinMode(swdclk,OUTPUT);
pinMode(swdio,OUTPUT);
pinMode(en,OUTPUT);
DW(en,0);
DW(swdclk,0);
}//setup
//ループ
void loop() {
seg1( 0xff ); delay(500); //500秒の待ち
seg1( 0x55 ); delay(500); //500秒の待ち
seg1( 0xaa ); delay(500); //500秒の待ち
seg1( 0x00 ); delay(500); //500秒の待ち
}//loop