BASIC4MCU | 디스플레이 | LCD | LCD 4비트 - AVRstudio
페이지 정보
작성자 키트 작성일2017-08-31 17:43 조회2,275회 댓글0건첨부파일
본문
#define F_CPU 16000000UL#include#include#include#include#include//#define LCD_DATA_DIR DDRB#define LCD_DATA_PORT PORTB#define LCD_CTRL_DIR DDRB#define LCD_CTRL_PORT PORTB#define RIGHT 1#define LEFT 2#define ON 1#define OFF 2#define NO 0#define LCD_E_HIGH (LCD_CTRL_PORT|=0x02)#define LCD_E_LOW (LCD_CTRL_PORT&=0xfd)#define LCD_RS_HIGH (LCD_CTRL_PORT|=0x01)#define LCD_RS_LOW (LCD_CTRL_PORT&=0xfe)//void E_pulse(void){ LCD_E_HIGH; _delay_us(40); LCD_E_LOW; _delay_us(40); }void Command_set4(char s){LCD_RS_LOW;LCD_DATA_PORT=(s&0xf0); E_pulse();LCD_DATA_PORT=(s<<0x4); E_pulse(); _delay_ms(3);}void Data_set4(char s){LCD_RS_HIGH;LCD_DATA_PORT=(s&0xf0)|1; E_pulse();LCD_DATA_PORT=(s<<0x4)|1; E_pulse();}void clrscr4(void){ Command_set4(0x01); }void cursor_at4(char x, char y){switch(y){case 0: y=0x80; break;case 1: y=0xc0; break;case 2: y=0x94; break;case 3: y=0xd4; break;}y=y+x; Command_set4(y);}void writeString_lcd4(char x, char y, char *s){ cursor_at4(x,y); while(*s)Data_set4(*s++); }void cursor_home4 (void){ Command_set4(0x02); _delay_ms(5); }void move_display4(char p){ if(p==LEFT)Command_set4(0x18); if(p==RIGHT)Command_set4(0x1c); }void move_cursor4 (char p){ if(p==LEFT)Command_set4(0x10); if(p==RIGHT)Command_set4(0x14); }void Entry_shift4 (char p){if(p==LEFT )Command_set4(0x07);if(p==RIGHT)Command_set4(0x05);if(p==NO )Command_set4(0x06);}void display_onoff4(unsigned char d, unsigned char c, unsigned char b){unsigned char display=0x08;if(d==ON)d=0x04; else d=0x02;if(c==ON)d=0x02; else d=0x00;if(b==ON)d=0x01; else d=0x00;display=display|d|c|b; Command_set4(display);}void init_lcd4(void){LCD_DATA_PORT=0xff;//Command_set4(0x20);Command_set4(0x28); Command_set4(0x06); Command_set4(0x0C);clrscr4();}//int main(void){unsigned char interruptNo=0;char msg[30];DDRB=0xff; PORTE=0xf0;init_lcd4();writeString_lcd4(0,0,"interrupt No: ");EICRB=0xFF; EIMSK=0xf0; // SREG=0x80;while(1){interruptNo=EIFR;if(interruptNo){switch(interruptNo){case 0x10: interruptNo=4; EIFR|=0x10; break;case 0x20: interruptNo=5; EIFR|=0x20; break;case 0x40: interruptNo=6; EIFR|=0x40; break;case 0x80: interruptNo=7; EIFR|=0x80; break;}sprintf(msg," %4d checked ",interruptNo);interruptNo=0;writeString_lcd4(0,1,msg);}}}
댓글 0
조회수 2,275등록된 댓글이 없습니다.