BASIC4MCU | 질문게시판 | 74HC165 LCD 출력 문의
페이지 정보
작성자 맑은날 작성일2021-10-26 17:34 조회16,963회 댓글4건첨부파일
본문
안녕하세요.
74HC165 3개를 이용하여 단선 체크를 하려고 합니다.
출력 데이터는 시리얼모니터에는 나오는데
LCD 출력 시 8개만 인식하고 16개는 인식을 못합니다.
LCD 출력에
byte incoming = shiftIn(data, clock, MSBFIRST);
이것이 문제인 것 같은데, 어떻게 변경하면 좋을까요?
#include <ShiftIn.h>
// Init ShiftIn instance with one chip.
// The number in brackets defines the number of daisy-chained 74HC165 chips
// So if you are using two chips, you would write: ShiftIn<2> shift;
ShiftIn<3> shift;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define enable 9 //15p
#define load 8 //1p
#define clock 12 //2p
#define data 11 //9p
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("HRS TEST KIT");
lcd.setCursor(0, 1);
lcd.print("Disconnect check");
delay(5000);
lcd.clear();
pinMode(enable, OUTPUT);
pinMode(load, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(data, INPUT);
digitalWrite(load, HIGH);
digitalWrite(enable, HIGH);
Serial.begin(9600);
// declare pins: pLoadPin, clockEnablePin, dataPin, clockPin
shift.begin(8, 9, 11, 12);
}
void displayValues() {
for (int i = 0; i < shift.getDataWidth(); i++)
Serial.print( shift.state(i) ); // get state of button i
Serial.println();
}
void loop() {
if (shift.update()) // read in all values. returns true if any button has changed
displayValues();
digitalWrite(load, LOW);
delayMicroseconds(5);
digitalWrite(load, HIGH);
delayMicroseconds(5);
digitalWrite(clock, HIGH);
digitalWrite(enable, LOW);
byte incoming = shiftIn(data, clock, MSBFIRST);
digitalWrite(enable, HIGH);
for (int i = 23; i >= 0; i--)
{
if (bitRead(incoming, i) == 1)
{
lcd.setCursor(i, 0);
lcd.print("O");
}
else
{
lcd.setCursor(i, 0);
lcd.print("X");
}
}
delay(50);
}
댓글 4
조회수 16,963master님의 댓글
master 작성일
byte incoming
여기서 byte 는 8비트 데이터형입니다.
맑은날님의 댓글
맑은날
어떤 문구로 바꿔야 할까요?
master님의 댓글
master 작성일
void loop(){
byte in1,in2,in3;
if(shift.update())displayValues();
digitalWrite(load,LOW); delayMicroseconds(5);
digitalWrite(load,HIGH); delayMicroseconds(5);
digitalWrite(clock,HIGH);
digitalWrite(enable,LOW);
in1=shiftIn(data,clock,MSBFIRST);
in2=shiftIn(data,clock,MSBFIRST);
in3=shiftIn(data,clock,MSBFIRST);
digitalWrite(enable,HIGH);
lcd.setCursor(0,0);
for(int i=7;i>=0;i--){
if(bitRead(in1,i)==1)lcd.print("O"); else lcd.print("X");
}
for(int i=7;i>=0;i--){
if(bitRead(in2,i)==1)lcd.print("O"); else lcd.print("X");
}
lcd.setCursor(0,1);
for(int i=7;i>=0;i--){
if(bitRead(in3,i)==1)lcd.print("O"); else lcd.print("X");
}
delay(50);
}
제대로 동작할런지 모르겠지만 이 코드로 돌려보세요
맑은날님의 댓글
맑은날
제가 아두이노 초짜여서 해결을 못했는데,
Master님 조언으로 많은 부분을 해결 했습니다.
정말 감사드립니다.