** 더 많은 자료 필요시 문의해주세요.**.
/*
AVR과 가위,바위,보 게임을 LCD문자열로 구성해보자.
*/
#include
#include
#define FUNCSET 0x28 // Function Set
#define ENTMODE 0x06 // Entry Mode Set
#define ALLCLR 0x01 // All Clear
#define DISPON 0x0c // Display On
#define LSHIFT 0x18 // Display Left Shift
#define HOME 0x02 // Cursor Home
#define LINE2 0xC0 // LINE2 USE
#define SW4 0xE0 // SWICH DEF
#define SW5 0xD0 // SWICH DEF
#define SW6 0xB0 // SWICH DEF
#define SW7 0x70 // SWICH DEF
void LCD_init(void);
void LCD_String(char flash *);
void Busy(void);
void Command(unsigned char);
void Data(unsigned char);
char KEY_CURRENT,KEY_OLD;
int A,B,C,G=0,D=1;
int i;
int count=0;
//CG RAM 저장 문자 정의
unsigned int cg_1[56] =
{0x00, 0x15, 0x15, 0x15, 0x15, 0x15, 0x0a, 0x00,
0x00, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00,
0x00, 0x1d, 0x15, 0x15, 0x15, 0x15, 0x17, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int cg_2[56] =
{0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00,
0x00, 0x0e, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00,
0x00, 0x0c, 0x10, 0x10, 0x0e, 0x02, 0x1c, 0x00,
0x00, 0x0c, 0x10, 0x10, 0x0e, 0x02, 0x1c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int cg_3[56] =
{0x00, 0x0e, 0x10, 0x10, 0x10, 0x10, 0x0e, 0x00,
0x00, 0x0e, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00,
0x10, 0x18, 0x14, 0x12, 0x11, 0x10, 0x10, 0x00,
0x01, 0x03, 0x05, 0x09, 0x11, 0x01, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int cg_4[56] =
{0x10, 0x18, 0x14, 0x12, 0x11, 0x10, 0x10, 0x00,
0x01, 0x03, 0x05, 0x09, 0x11, 0x01, 0x01, 0x00,
0x1e, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int cg_5[56] =
{0x00, 0x1e, 0x12, 0x12, 0x1c, 0x12, 0x12, 0x00,
0x1e, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int cg_a[56] =
{0x00, 0x04, 0x0a, 0x11, 0x11, 0x11, 0x11, 0x11,
0x00, 0x00, 0x15, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
0x00, 0x00, 0x08, 0x14, 0x14, 0x14, 0x14, 0x16,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03,
0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x1f,
0x0a, 0x02, 0x02, 0x02, 0x02, 0x04, 0x14, 0x1c
};
unsigned int cg_b[56] =
{0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x00, 0x11, 0x11, 0x11, 0x1a, 0x1a, 0x1a, 0x04,
0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x05, 0x08, 0x08, 0x04, 0x04, 0x03,
0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0x10, 0x18, 0x14, 0x02, 0x02, 0x04, 0x04, 0x18
};
unsigned int cg_c[56] =
{0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x1a, 0x14,
0x0e, 0x0a, 0x1b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
0x00, 0x00, 0x10, 0x10, 0x1e, 0x1a, 0x1a, 0x12,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x12, 0x0a, 0x08, 0x04, 0x02, 0x02, 0x01, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
0x16, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10
};
unsigned int cg_d[64] =
{0x00, 0x07, 0x0C, 0x08, 0x1A, 0x10, 0x10, 0x14,
0x00, 0x18, 0x0E, 0x03, 0x02, 0x02, 0x02, 0x1e,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x0e, 0x02, 0x03, 0x01,
0x14, 0x1c, 0x1b, 0x0c, 0x07, 0x01, 0x01, 0x00,
0x00, 0x00, 0x10, 0x12, 0x12, 0x03, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x02, 0x02, 0x1e, 0x03, 0x00,
0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x1E, 0x00
};
//Key check
char key_check(){
char key_flag = 0;
KEY_CURRENT = (PIND&0xf0); //PIND의 하위 4bit 사용하지 않기 위한 mask
if (KEY_CURRENT != 0xf0) key_flag = 1; //만약 Key가 눌리면
if ((key_flag)&&(KEY_CURRENT != KEY_OLD)){ //만약 키가 눌리고, 키 값이 바꿨으면
KEY_OLD = KEY_CURRENT; //이전 키 값에 현재 키값 저장
return (1); // 키 값이 변경 되었음
}
else if (!key_flag){ //키가 눌리지 않았으면,
KEY_OLD = 0; // 키 값이 변경되지 않았음.
return (0);
}
else return (0); //키가 눌리지 않았음.
}
void main(void) {
DDRD = 0x00;
PORTD = 0xff;
LCD_init();
while(1){
count++;
if(D==1){
for(i = 0;i < 64;i++){
Command(0x40 + i);
Data(cg_d[i]);
}
Command(HOME);
LCD_String(" ");
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
LCD_String(" ");
Data(0x04);
Data(0x05);
Data(0x06);
Data(0x07);
delay_ms(1000);
D=0;
}
if(A==1){
A=0;
if(count==1)G=1;
if(count==2)G=2;
if(count==3)G=3;
}
if(B==1){
B=0;
if(count==1)G=4;
if(count==2)G=5;
if(count==3)G=6;
}
if(C==1){
C=0;
if(count==1)G=7;
if(count==2)G=8;
if(count==3)G=9;
}
if(count==3)count=0;
//경우의 수
if(G==1){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_a[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_a[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_5[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
G=0;
}
//경우의 수 2
if(G==2){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_a[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_b[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_1[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
G=0;
}
//경우의 수
if(G==3){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_a[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_c[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_2[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
G=0;
}
//경우의 수
if(G==4){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_b[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_a[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_2[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
G=0;
}
//경우의 수 5
if(G==5){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_b[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_b[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_5[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
G=0;
}
//경우의 수
if(G==6){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_b[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_c[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_1[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
G=0;
}
//경우의 수
if(G==7){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_c[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_a[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_1[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
G=0;
}
//경우의 수
if(G==8){
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_4[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_c[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_3[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
Data(0x05);
Data(0x06);
delay_ms(1000);
for(i = 0;i < 56;i++){
Command(0x40 + i);
Data(cg_b[i]);
}
Command(HOME);
Data(0x00);
Data(0x01);
Data(0x02);
Data(0x03);
Command(LINE2);
Data(0x04);
등등....