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 끝부분
내가 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 끝부분