컨트롤러"액정에

I

ITP

Guest
안녕,

내가 PIC16F876와 LCD는 인터페이스의 문제에 직면입니다.
그것은 프로 테우스 (ver6.3sp1)와 함께 작동합니다.하지만 그것을 보여줍니다 실제 회로와
일부 정크 문자.

내가 직접 lcd.c 여기에 파일을 붙여넣입니다.그리고 난 모델명
: SCH와 zip 형식의 첨부 파일을 작성.

내가 뭐하고있는 거지 어떤 실수.???친절하게 도와주세요.

감사 감사
ITP# # # # LCD.C 시작 여기 ############

/************************************************* ************************
파일 : LCD.C
************************************************** ************************/

/************************************************* ************************
기능이
************************************************** ************************/

/************************************************* ************************
기능 : LCD_START
매개 변수 : 없음
피드백 : 없음
설명 : 초기화 명령 액정 보내기
************************************************** ************************/
무효 (무효) init_lcd
(
output_bit (PIN_C5, 0);
delay_ms (50);
lcd_command_out (0x33);delay_ms(50); lcd_command_out (0x33);
delay_ms (50);
lcd_command_out (0x33);
delay_ms (50);
lcd_command_out (0x32);
delay_ms (50);
lcd_command_out (0x28);
delay_ms (50);
lcd_command_out (0xe);
delay_ms (50);
lcd_command_out (0x2로);
delay_ms (50);
lcd_command_out (0x1로);
delay_ms (50);
)

/************************************************* ************************
기능 : LCD_CLEAR
매개 변수 : 없음
피드백 : 없음
설명 : CLEAR를 LCD 화면
************************************************** ************************/
무효 lcd_clear (무효)
(lcd_command_out(0x01); )

/************************************************* ************************
기능 : LCD_POSIC
매개 변수 : 바이트 - 새 위치로 커서
피드백 : 없음
설명 : 새 위치를 ON LCD는 커서를 이동
************************************************** ************************/
무효 lcd_posic (서명 숯불 위치)
(
만약 (위치 "((2 * LCD_COLS) -1))
위치 = 0;
만약 (순위 "LCD_COLS)
lcd_command_out (0x80으로 위치);
그 밖의
lcd_command_out (0xC0 (위치 - LCD_COLS));
)/************************************************* ************************
기능 : LCD_DISPLAY
매개 변수 : 바이트 - 키 - 아, 사용, 끄기 - 비활성화
전일 대비 : 비트는 C = 켜기, 비트 B 조 = 끄기
피드백 : 없음
설명 : LCD 디스플레이 켜기 / 끄기
************************************************** ************************/
무효 lcd_display (int1 키)
(
면 () 키를
lcd_command_out (0x0E);
그 밖의
lcd_command_out (0x0A);
)

/************************************************* ************************
기능 : LCD_CURSOR
매개 변수 : 바이트 - 키 - 아, 사용, 끄기 - 비활성화
전일 대비 : 비트 D 조 = 켜기, 비트 B 조 = 끄기
피드백 : 없음
설명 : 액정 CURSOR 켜기 / 끄기
************************************************** ************************/
무효 lcd_cursor (int1 키)
(
면 () 키를
lcd_command_out (0x0F);
그 밖의
lcd_command_out (0x0C);
)/************************************************* ************************
기능 : LCD_SHIFT_CURSOR
매개 변수 : 비트 - 키, 오른쪽 / 왼쪽
피드백 : 없음
설명 : 이동 CURSOR 왼쪽 또는 오른쪽으로
************************************************** ************************/

무효 lcd_shift_cursor (int1 키)
(
면 () 키를
lcd_command_out (0x14);
그 밖의
lcd_command_out (0x10);
)

/************************************************* ************************
기능 : LCD_AUTO_SHIFT_CURSOR
매개 변수 : 비트 - 키, 오른쪽 / 왼쪽
전일 대비 : 비트 S - DONT 이동 스크린
피드백 : 없음
설명 : ESTABILISH 자동 Shift를 커서
************************************************** ************************/
무효 lcd_auto_shift_cursor (int1 키)
(
면 () 키를
lcd_command_out (0x07);
그 밖의
lcd_command_out (0x06);
)
/************************************************* ************************
기능 : LCD_PRINT
매개 변수 : 바이트 * 현악 - (0 종료 현악)
피드백 : 없음
설명 : 액정 (켜기 현재 커서 위치) 현악 보내기
************************************************** ************************/
무효 lcd_print (서명 숯불 * 문자열)
(
(* 문자열) 동안
(lcd_data_out (* 문자열 );}
)/************************************************* ************************
기능 : LCD_PRINT_M
매개 변수 : 바이트 * 현악 - (0 종료 현악)
바이트 - 라인
피드백 : 없음
설명 : 특정 라인에 LCD를 중심으로 현악 보내기
************************************************** ************************/
무효 lcd_print_m (서명 숯불 * 문자열을, 부호없는 숯불 라인)
(
서명 숯불 위치, 크기;

만약 (라인 == 1)
위치 = 0;
그 밖의
위치 = LCD_COLS;
lcd_posic (위치);
(크기 = 0; 크기 "LCD_COLS; 크기 )
lcd_print ( "");
크기 = strlen (문자열) -1;
위치 = (LCD_COLS - 크기) / 2;
만약 (라인 == 2)
위치 = LCD_COLS;
lcd_posic (위치);
lcd_print (문자열);
)
/************************************************* ************************
기능 : LCD_PRINT_WORD
매개 변수 : Word는 - 값이 0xFFFF (0x0000)에
바이트 - 숫자, 포맷 (0
~ 5 자)
피드백 : 없음
설명 : 10 진수 정수 양식 (2 바이트) 도서 검색
************************************************** ************************/
무효 lcd_print_word (서명 int16 값을 서명 숯불 자리)
(
const 서명 분배기 int16 [] = (1,10,100,1000,10000);
서명 숯불 난;

은 (i = 5; 난 "숫자; 난 -) 값에 대한 이름 = 값 % 분배기 [난];
한동안은 (i) (
lcd_data_out (값 / 분배기 [- 난] 4

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="차가운" border="0" />

;
값 이름 = 값 % 분배기 [난];
)
)

/************************************************* ************************
기능 : LCD_PUTBYTE
매개 변수 : 바이트 - 데이터, 0xFF (0x00)에
피드백 : 없음
설명 : LCD는 바이트 16 진수를 ON 양식을 보낼
************************************************** ************************/

무효 lcd_putbyte (서명 숯불 날엔)
(
서명 숯불 보조;
보조 = dat/16;
lcd_data_out ((보조 "9)? (보조 = 0x37) : (보조 = 0x30));
보조 = 날엔 & 0xf;
lcd_data_out ((보조 "9)? (보조 = 0x37) : (보조 = 0x30));
)

/************************************************* ************************
기능 : LCD_PUTWORD
매개 변수 : 바이트 - 데이터, 65535D (0)으로
피드백 : 없음
설명 : 액정 (0xNNNN에) 16 진수 양식 2 바이트를 보낼 수
************************************************** ************************/
무효 lcd_putword (서명 int16 날엔)
(
((서명 숯불) (dat/256)); lcd_putbyte
((서명 숯불) 나타나서) lcd_putbyte;
)

무효 lcd_command_out (서명 숯불 C) / /에서 명령을 쓰는 경우 LCD는
(
output_bit (PIN_C7, 0);
send_char (C);
)

무효 lcd_data_out (서명 숯불 C) / /에 데이터를 기록 액정에
(
output_bit (PIN_C7, 1);
send_char (C);
)

/ / LCD는 명령이나 데이터를 전송

무효 send_char (int8 채널)
(
output_bit (PIN_C5, 0);
output_bit (PIN_C4 (채널 & (1 ""4)));
output_bit (PIN_C3 (채널 & (1 ""5)));
output_bit (PIN_C2 (채널 & (1 ""6)));
output_bit (PIN_C1 (채널 & (1 ""7)));
delay_us (10);
output_bit (PIN_C5, 1);
delay_us (10);
output_bit (PIN_C5, 0);
delay_ms (1);
output_bit (PIN_C4 (채널 & (1 ""0)));
output_bit (PIN_C3 (채널 & (1 ""1)));
output_bit (PIN_C2 (채널 & (1 ""2)));
output_bit (PIN_C1 (채널 & (1 ""3)));
delay_us (10);
output_bit (PIN_C5, 1);
delay_us (10);
output_bit (PIN_C5, 0);
)

무효 send_nibble (서명 숯불 채널)
(
output_bit (PIN_C5, 0);
output_bit (PIN_C4 (채널 & (1 ""0)));
output_bit (PIN_C3 (채널 & (1 ""1)));
output_bit (PIN_C2 (채널 & (1 ""2)));
output_bit (PIN_C1 (채널 & (1 ""3)));
delay_us (10);
output_bit (PIN_C5, 1);
delay_us (10);
output_bit (PIN_C5, 0);
delay_ms (1);
)####### LCD.C 끝부분

 
미안하지만, 당신이 첨부 파일을 보려면 로그인이 필요합니다

 
내가 CCS는 오전에 대한 전문가는 아니라고합니다 (내가 사용하는 하이 - 테크의 PIC 용)하지만 난 당신 send_char 함수에서 나는 당신이 당신의 LCD를 보내 비트의 순서를 반대로 믿어 봐요.

비트 7 - "LCD는 비트 0 비트 6 -"LCD는 비트 1 ...

비트 3 - "LCD는 비트 0, 비트 2 -"LCD는 비트 1 ...

내가 이런식으로해야한다고 생각 :
비트 7 - "액정 비트 3 비트 6 -"LCD는 비트 2 ...

비트 3 - "액정 비트 3 비트 2 -"LCD는 비트 2 ...

또한 내가 네 lcd_data_out 보면 그게 인자로 단일 바이트 그리고 당신과 같은 문자열 lcd_test.c에서 사용하는 것으로 볼 작동하지 않습니다.

당신 CCS는 포럼에서 모양 또한 :
http://www.ccsinfo.com/forum

희망이 도움이 최고의 안부

 
안녕하세요 C - 맨,

링크를 주셔서 감사합니다.그 포럼을 검색하고 유용한 링크 있어요.난 이것을해볼 것이다.

내가 그렇게 연결되어있는 LCD는 비트 전송 순서가 올바른지입니다.그것은 프로 테우스의 시뮬레이션.
PIN_C7 = RS
PIN_C5 = 설정
PIN_C4 = D4
PIN_C3 = D5를
PIN_C2 = D6
PIN_C1 = D7

낮은 RW에 묶여있다.

나는 다른 사람 또한 유용하게 쓸 수도있어 링크를 누릅니다.

http://www.vermontficks.org/gps3c.htm

또한 회원이 친절하게 게시 코드에서 문제를 sortout 도움을 요청합니다.

감사 감사
ITP

 
안녕하세요 C - 맨,

그 링크를 날 위해 일했던!.<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="아주 행복한" border="0" />감사 감사
ITP

 
어쩌면 당신은 무효 send_char delay_ms (1) (2)에서 (int8 채널) 시간 increse해야합니다.

 
안녕하세요 ITP,

그것은 평소 안이나 PIC는 데이터 비트를 이런식으로 nibbles 공유 할당 실제 :
인용구 :내가 그렇게 연결되어있는 LCD는 비트 전송 순서가 올바른지입니다.
그것은 프로 테우스의 시뮬레이션.

PIN_C7 = RS

PIN_C5 = 설정

PIN_C4 = D4

PIN_C3 = D5를

PIN_C2 = D6

PIN_C1 = D7낮은 RW에 묶여있다.

 
안녕하세요 여러분,

그래픽에 대한 모든 라이브러리를 액정이 아닌 문자를 하나?C 또는 어셈블리 8051 시리즈.

들으 없나

 
안녕하세요 Humber555, 난 당신이 무슨 뜻인지 있어요.답장을 보내주셔서 감사합니다.나도 연결 내가 기판에서 일하고 변경할 수없습니다.나는 이전 포스트에서 언급한 링크가 나를 위해 작동합니다.

rozerf, 당신은 GLCD이 포럼을 검색하실 수있습니다.

감사 감사
ITP

 

Welcome to EDABoard.com

Sponsor

Back
Top