누구나

B

brennbar67

Guest
누구나
C 코드 또는 어셈블리를 사용하여 도트 매트릭스 LCD는 단일 문자를 표시하는 몇 가지 예를있어??

 
안녕,

액정
및 LCD의 다른 종류의 컨트롤러가 다른 종류의 코드가 필요한 것이다.당신은 언급하지 않았다.만약 누군가가 게시물을 하나의 의미와 당신이 그것이 당신의 종류에 대한 않아 찾아!

 
에 ADSP - 21160 어셈블러 :# ""Def21160.h 포함;
""내 Constants.h 포함 #;

정의 CLEAR_DISPLAY 0x004 #
정의 CURSOR_AT_HOME 0x008 #
정의 ENTRY_MODE_SET_DECR_SH 0x014 #
ENTRY_MODE_SET_INCR_SH 0x01C 정의 #
DISPLAY_ON 0x03C 정의 #
SET_8_BIT_INTERFACE 0x0E0 정의 #정의 CURSOR_SHIFT_R 0x050 #
정의 CURSOR_SHIFT_L 0x040 #
정의 SET_CUR_OFF_BLINK_OFF 0x030 #
정의 SET_CUR_ON_BLINK_OFF 0x038 #
정의 DISPLAY_OFF_C_ON_B_OFF 0x028 #
정의 SHIFT_DISPLAY_LEFT 0x060 #
정의 SHIFT_DISPLAY_RIGHT 0x070 #

.SECTION / seg_dmda에 DM;
. 글로벌 LCD_Data;
. var LCD_Data;

/ / LCD_Data 포맷 : DB7, DB6, DB5, DB4, DB3, DB2는, DB1, DB0, RW를, RS.

. ENDSEG;.SECTION /
오후 seg_pmco;
. 글로벌 LCD_Write, LCD_Test;LCD_Write :

R0 =은 dm (LCD_Data);
R0 = lshift R0 2;
은 dm (LCD_Data) = R0;

의 R1 = 0;
은 dm (AuxRegister) =의 R1;
LCD_Delay 전화;
알투 = 0x001;
R0 = R0 또는 R2를;
은 dm (AuxRegister) = R0;
LCD_Delay 전화;

의 R2 = 0xFFE;
R0 = R0와 R2를;
은 dm (AuxRegister) = R0;
LCD_Delay 전화;
R0 = 0;
은 dm (AuxRegister) = R0;
LCD_Delay 전화;

RTS;LCD_Delay :
lcntr = 300;
LCD_Loop1 얼음까지;
lcntr = 8000;
LCD_Loop2 얼음까지;
LCD_Loop2 : nop;
LCD_Loop1 : nop;
RTS;LCD_Test :

//************************************************ ******************************
/ / Inizializzazione 델 디스플레이 액정
//************************************************ ******************************
R0 = CLEAR_DISPLAY;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

R0 = CURSOR_AT_HOME;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

R0 = SET_8_BIT_INTERFACE;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

/ / visualizza 위원장 cursore
R0 = SET_CUR_ON_BLINK_OFF;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

/ / 비 visualizzare 위원장 cursore
R0 = SET_CUR_OFF_BLINK_OFF;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

//---------------------

//************************************************ ******************************
/ / Scrittura 디 유엔 carattere Sulla 프리마 posizione 델 디스플레이
//************************************************ ******************************

/ / setta
난 DDRAM (POSIZIONE CURSORE : 1 ° 리가, 1 ° 숯불)
당 indirizzo 0HR0 = 0x200;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

/ / scrive 위원장 carattere 'F'ㅡ modulo
R0 = 0x119;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

//************************************************ ******************************
/ / riempie 라 프리마 리가 델 디스플레이, partire 다 destra, 사기꾼 김정일 carattere 'F'
//************************************************ ******************************
R3 = 0x027;
test_var1 :
R3 R3 패스 =;
EQ를 뛰어 end_loop1 경우;

/ / setta
난 당 indirizzo DDRAM
/ / (CURSORE Sulla POSIZIONE 프리마 리가 : dalla posizione Sulla 프리마 destra
/ / 짝수 라 프리마 posizione Sulla sinistra)
R0 = lshift R3 2;
R4 = 0x200;
R0 = R0 또는 R4;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

/ / scrive 위원장 carattere 'F'ㅡ modulo
R0 = 0x119;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

R3 = R3 - 1;
점프 test_var1;

end_loop1 :
/ / scrive 위원장 Nella 프리마 숯불 posizione 디 sinistra
R0 = lshift R3 2;
R4 = 0x200;
R0 = R0 또는 R4;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

/ / scrive 위원장 carattere 'F'ㅡ modulo
R0 = 0x119;
은 dm (LCD_Data) = R0;
전화 LCD_Write;//************************************************ ******************************
/ / riempie 라 리가 델 seconda 디스플레이, partire 다 destra, 사기꾼 김정일 carattere '%'
//************************************************ ******************************

R3 = 0x067;
test_var2 :
R3 R3 패스 =;
EQ를 뛰어 end_loop2 경우;

/ / setta
난 당 indirizzo DDRAM
/ / (CURSORE Sulla POSIZIONE 프리마 리가 : dalla posizione Sulla 프리마 destra
/ / 짝수 라 프리마 posizione Sulla sinistra)
R0 = lshift R3 2;
R4 = 0x200;
R0 = R0 또는 R4;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

/ / scrive 위원장 carattere '%'ㅡ modulo
R0 = 0x095;
은 dm (LCD_Data) = R0;
전화 LCD_Write;

R3 = R3 - 1;
점프 test_var2;

end_loop2 :
RTS;

RTS;. ENDSEG;

 
될 수있는 몇 가지를 사용하여, 당신은 아마 그것을 수정해야 할 것입니다

# 포함 <reg51.h>
# "delay.h"포함

sbit LCD_RS = P1 ^ 0; / / 등록 선택
sbit LCD_E = P1 ^ 1; / / 활성화

, (LCD_E = 0)) LCD_STROBE ((LCD_E = 1) 정의 #

/ / 밀리초 단위의 시간
무효 DelayMs (서명 숯불 CNT의)
(CNT의 = 2 * CNT의;
하다
(DelayUs (500);)
동안 (- CNT의! = 0);
)

/ / 디스플레이를 보내기
무효 lcd_write (서명 숯불 C)
(
서명 숯불 Movit;
Movit = (C>> 2);
P1 = (P1 & 0xC3) | (Movit & 0x3C);
LCD_STROBE;
Movit = (C <<2);
P1 = (P1 & 0xC3) | (Movit & 0x3C);
LCD_STROBE;
DelayUs (60);
)

/ / 지우기와 가정의 LCD
무효 lcd_clear (무효)
(
LCD_RS = 0;
(0x80으로) lcd_write;
DelayMs (2);
)

/ / 문자열을 문자 보내기
무효 lcd_puts (const 숯불 *들)
(
LCD_RS = 1;
동안 (*)
lcd_write (* s );
)

/ / 문자 보내기
무효 lcd_putch (C) 숯불
(
LCD_RS = 1;
lcd_write (C);
)

/ / 커서
lcd_goto (서명 숯불 pos)
무효(
LCD_RS = 0;
lcd_write (0x80으로 pos);
)

/ / 초기화가 LCD - 모드 4 비트
무효 lcd_init (무효)
(
LCD_RS = 0;
DelayMs (40); 지연에 / / 파워
lcd_write (0x28); / / 4 비트 모드, 1 / 16 의무, 5x8 글꼴
LCD_STROBE;
DelayMs (5);
LCD_STROBE;
DelayMs (5);
LCD_STROBE;
(0x28) lcd_write;
lcd_write (0x08); / /
off를 표시
lcd_write (0x0c); / / 디스플레이에, 커서를
lcd_write (0x06); / / 입력 모드
)

헤더 파일
/ *
* 액정 인터페이스 헤더 파일
더 많은 정보를보기 lcd.c
** /

/ LCD는 4 비트 모드 *에서 바이트를 작성 * /

통근자 무효 lcd_write (서명 숯불);

/ * 클리어와 가정의 LCD * /

통근자 무효 lcd_clear (무효);

/ 액정
* 문자의 문자열을 작성 * /

통근자 무효 lcd_puts
* (const 숯불);

/ * 지정된 위치로 이동 * /

통근자 무효 lcd_goto (서명 숯불 pos);

/ 액정 intialize * - 전화 이외의 다른 방법 *
전에 /

통근자 무효 lcd_init (무효);

통근자 무효 lcd_putch (숯불);

/ * 커서의 위치 설정 * /

lcd_cursor 정의
# (x)를 (((x)를
& 0x7F) | 0x80으로) lcd_write

 

Welcome to EDABoard.com

Sponsor

Back
Top