BASIC4MCU | 질문게시판 | atmega128 lcd 질문드려요
페이지 정보
작성자 코딩이싫은사람 작성일2021-06-06 19:46 조회10,638회 댓글2건본문
G_LCD 헤더파일 내용입니다.
typedef unsigned char byte;
void lcd_iw(byte inst) //LCD 명령 출력함수
{
PORTD=0X04; //0b100, CONTROL INPUT PORT LCD 를 명령쓰기 모드로 설정 E=1(활성화)) , R/W=0(쓰기)), RS=0(명령레지스터))
PORTA=inst; //Data Input PORT 명령어 전송
PORTD&=0xfb; //0b11111111 . LCD Disable (E=0) 2번비트를 0으로 설정 (E=0)비활성화
delay_ms(2); //입력이 수행되는 최대시간이 1.6MS이므로 넉넉하게 2MS의 딜레이를 준다
}
void lcd_dw(byte dw) //LCD데이터 출력함수 E=1(활성화),R/W=0(쓰기), RS=1(데이터레지스터))
{
PORTD=0x05; //0b101 , LCD를 데이터쓰기 모드로 설정
PORTA=dw; // 데이터 전송
PORTD&=0xfb; //0b11111011 , LCD Disable (E=0) 2번비트를 0으로 설정 (E=0)비활성화
delay_us(40);
}
void init_lcd(void) //LCD 초기화함수
{
lcd_iw(0x20); //0b100000
lcd_iw(0x38); //0b111000, 8비트로 데이터 전송 DL=1 8비트 사용, N=1 LCD 2라인표시 5*8 문자폰트 사용
lcd_iw(0x06); //0b110, LCD 표시창에 문자표시커서를 오른쪽으로 이동 I/D=1 오른쪽으로 이동, S=0 화면은 이동하지않고 커서를 오른쪽으로 이동
lcd_iw(0x0c); //0b1100, DISPLAY on D=1 LCD를 문자에표시 C=0 커서 표시안함 B=0 커서 위치에서 문자 깜빡이지않음
lcd_iw(0x01); //LCD 표시창을 올클리어 ,커서를 첫줄의 첫칸에 위치
}
void lcd_str(char *str)
{
while(*str)
{
lcd_dw(*str++);
delay_ms(2);
소스파일입니다.
#include <mega128.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>
위자드 마법사 사용해 16 클록으로하고 portc를 입력으로해서 스위치에 연결하고 풀업저항을 사용 ,portA와 PORT D를 출력으로하고 PORT A 를 LCD DATA에 연결하고 PORTD를 LCD CONTROL 연결했습니다
#include "g_lcd.h"unsigned char c1=0; //첫번째 문자열
unsigned char c2=0;//두번째 문자열
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
if(PINC.0==0)
{
lcd_iw(0x01); //디스플레이 clear
}
if(PINC.1==0)
{
lcd_iw(0x01); //디스플레이 clear
}
if(PINC.2==0)
{
lcd_iw(0x01); //디스플레이 clear
}
if(PINC.3==0)
{
lcd_iw(0x01); //디스플레이 clear
}
if(PINC.4==0)
{
lcd_iw(0x01); //디스플레이 clear
}
if(PINC.5==0)
{
lcd_iw(0x01); //디스플레이 clear
}
if(PINC.6==0)
{
lcd_iw(0x01); //디스플레이 clear
}
if(PINC.7==0)
{
lcd_iw(0x01); // clear display
}
Void main (void)
{
while(PINC != 0xFF);
}
printf("\n1st word : ");
scanf("%c",&str1);
printf("\n2nd word : ");
scanf("%c",&str2);
printf("\n Print out on LCD");
lcd_iw(0x80); //LCD의 커서의 위치를 (1,1)로 옮긴다 0x80 | 0x00(1,1) = 0x80
lcd_str(str1); // 커서로부터 만들었던 STR1을 써준다
lcd_iw(0xc0); //DDRAM의 주소값, 커서의 위치를 (2,1)로 옮긴다. 0x80|0x40(2,1) = 0xc0
lcd_str(str2); //옮겨진 커서로부터 만들었던 OCR벨류를 STR2에 써준다.
preMODE = 0; //lcd가 깨끗하게 디스플레이
}
시리얼 통신을 받아서 두개의 단어를 입력받아서 LCD 첫번째 줄과 두번째줄에 출력되도록하고 스위치를 누르면 LCD 화면이 지워지는걸 해볼려는데
lcd 코드는 짯고 스위치 누르면 lcd 화면 지워지는 코드까지는 짯는데 단어 두개 입력받아서 lcd 화면에 출력하는 것에서 꽉막혔습니다. ..
댓글 2
조회수 10,638master님의 댓글
master 작성일
메인함수에서 무한루프가 보이지 않습니다.
이번에 처음 프로그램을 작성하시나봅니다.
https://cafe.naver.com/circuitsmanual/153187
기초 예제부터 차근차근 공부하셔야 합니다.
grey님의 댓글
grey 작성일나는 최근에 비슷한 문제에 부딪혔는데, 나는 그것을 해결하기 위해 노력하고 있다