BASIC4MCU | 디스플레이 | LCD | 4x4 키 매트릭스 & CLCD(8비트) 프로테우스 ( 코드비전 & AVRstudio)
페이지 정보
작성자 키트 작성일2017-08-31 17:32 조회3,807회 댓글0건첨부파일
본문
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 //=====================================================================//#include <mega128.h>#include <delay.h>#include <stdio.h>//=====================================================================//#define lcd_RS_ON PORTB|=0x01#define lcd_RS_OFF PORTB&=~0x01#define lcd_E_ON PORTB|=0x04#define lcd_E_OFF PORTB&=~0x04#define lcd_Out PORTA//char str1[]= " basic4mcu.com ";char str2[]= " 4x4 key matrix ";char str3[]= " key & lcd test ";//void lcdData(char d){ lcd_RS_ON; lcd_Out=d; lcd_E_ON; delay_us(1); lcd_E_OFF; delay_us(50); }void lcdCmd(char c){ lcd_RS_OFF; lcd_Out=c; lcd_E_ON; delay_us(1); lcd_E_OFF; delay_ms(2); }//void lcd_gotoxy(char x, char y){if (y==0)lcdCmd(0x80+x);else if(y==1)lcdCmd(0xC0+x);else if(y==2)lcdCmd(0x94+x);else if(y==3)lcdCmd(0xD4+x);}//void lcd_puts(char *str){ while(*str)lcdData(*str++); }//void lcd_init(void){DDRA=0xFF; DDRB=7; delay_ms(30);lcdCmd(0x38); lcdCmd(0x38); lcdCmd(0x38);lcdCmd(0x0E); lcdCmd(0x06); lcdCmd(0x01); delay_ms(1);}//char KeyScan(void){char KeyBuf=0xFF; // 키 값이 들어갈 버퍼, 초기값 0xFFDDRC=0; PORTC=0xFF; // 포트 초기값, 입력핀 내부풀업저항 사용//DDRC=0x10; PORTC&=~0x10; delay_us(1); // 1번째 줄 선택if(!(PINC&1))KeyBuf='0';if(!(PINC&2))KeyBuf='1';if(!(PINC&4))KeyBuf='2';if(!(PINC&8))KeyBuf='3';DDRC=0; PORTC=0xFF; // 1번째 줄 해제//DDRC=0x20; PORTC&=~0x20; delay_us(5); // 2번째 줄 선택if(!(PINC&1))KeyBuf='4';if(!(PINC&2))KeyBuf='5';if(!(PINC&4))KeyBuf='6';if(!(PINC&8))KeyBuf='7';DDRC=0; PORTC=0xFF; // 2번째 줄 해제//DDRC=0x40; PORTC&=~0x40; delay_us(5); // 3번째 줄 선택if(!(PINC&1))KeyBuf='8';if(!(PINC&2))KeyBuf='9';if(!(PINC&4))KeyBuf='A';if(!(PINC&8))KeyBuf='B';DDRC=0; PORTC=0xFF; // 3번째 줄 해제//DDRC=0x80; PORTC&=~0x80; delay_us(5); // 4번째 줄 선택if(!(PINC&1))KeyBuf='C';if(!(PINC&2))KeyBuf='D';if(!(PINC&4))KeyBuf='E';if(!(PINC&8))KeyBuf='F';DDRC=0; PORTC=0xFF; // 4번째 줄 해제//return KeyBuf; // Key 없으면 0xFF 리턴}//=====================================================================//// 메인함수void main(void){char buf[30],key;lcd_init();lcd_gotoxy(0,0); lcd_puts(str1);lcd_gotoxy(0,1); lcd_puts(str2);delay_ms(2000);lcd_gotoxy(0,0); lcd_puts(str3);while(1){key=KeyScan();lcd_gotoxy(0,1);if( (key>='0') && (key<='F') ){ sprintf(buf," key %c ",key); lcd_puts(buf); }else lcd_puts(" none ");delay_ms(100);}}//=================================================================//=====================================================================//#define F_CPU 16000000UL // 16 MHz#include <avr/io.h>#include <util/delay.h>#include <stdio.h>//=====================================================================//#define lcd_RS_ON PORTB|=0x01#define lcd_RS_OFF PORTB&=~0x01#define lcd_E_ON PORTB|=0x04#define lcd_E_OFF PORTB&=~0x04#define lcd_Out PORTA//char str1[]= " basic4mcu.com ";char str2[]= " 4x4 key matrix ";char str3[]= " key & lcd test ";//void lcdData(char d){ lcd_RS_ON; lcd_Out=d; lcd_E_ON; _delay_us(1); lcd_E_OFF; _delay_us(50); }void lcdCmd(char c){ lcd_RS_OFF; lcd_Out=c; lcd_E_ON; _delay_us(1); lcd_E_OFF; _delay_ms(2); }//void lcd_gotoxy(char x, char y){if (y==0)lcdCmd(0x80+x);else if(y==1)lcdCmd(0xC0+x);else if(y==2)lcdCmd(0x94+x);else if(y==3)lcdCmd(0xD4+x);}//void lcd_puts(char *str){ while(*str)lcdData(*str++); }//void lcd_init(void){DDRA=0xFF; DDRB=7; _delay_ms(30);lcdCmd(0x38); lcdCmd(0x38); lcdCmd(0x38);lcdCmd(0x0E); lcdCmd(0x06); lcdCmd(0x01); _delay_ms(1);}//char KeyScan(void){char KeyBuf=0xFF; // 키&n
댓글 0
조회수 3,807등록된 댓글이 없습니다.