BASIC4MCU | 8051/PIC | DT-516 강좌 | DT516-103.c 8비트 CLCD 큰숫자
페이지 정보
작성자 키트 작성일2017-08-24 10:55 조회1,198회 댓글0건첨부파일
본문
//-------------------------------------------------------------
// 82G516 E/V BOARD ( DT-516 )
//-------------------------------------------------------------
// XTAL : 22.1184Hz
//-------------------------------------------------------------
// filename: DT516-103.c
// LCD 8비트 CGRAM CLOCK
//-------------------------------------------------------------
#include
#include
//
#define U_C unsigned char
#define U_I unsigned int
#define U_L unsigned long
//
#define I_C idata char
#define I_I idata int
#define I_L idata long
#define I_F idata float
#define IU_C idata unsigned char
#define IU_I idata unsigned int
#define IU_L idata unsigned long
//
#define X_C xdata char
#define X_I xdata int
#define X_L xdata long
#define X_F xdata float
#define XU_C xdata unsigned char
#define XU_I xdata unsigned int
#define XU_L xdata unsigned long
//
#define C_C code char
#define C_I code int
#define C_L code long
#define C_F code float
#define CU_C code unsigned char
#define CU_I code unsigned int
#define CU_L code unsigned long
//
#define lcd_RS P30
#define lcd_E P31
#define lcd_Out P1
//
U_C str1[]= "CGRAM ";
U_C str2[]= "CLOCK Test ";
//CU_C test[10][2][8]={
// 0
0x0E, // 01110
0x1F, // 11111
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x1F, // 11111
0x0E, // 01110// 1
0x06, // 00110
0x06, // 00110
0x0A, // 01010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x02, // 00010
0x1F, // 11111
0x1F, // 11111// 2
0x0E, // 01110
0x1F, // 11111
0x11, // 10001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x04, // 00010
0x04, // 00100
0x08, // 01000
0x08, // 01000
0x10, // 10000
0x10, // 10000
0x1F, // 11111
0x1F, // 11111// 3
0x0E, // 01110
0x1F, // 11111
0x11, // 10001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x0E, // 01110
0x0E, // 01110
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x11, // 10001
0x1F, // 11111
0x0E, // 01110// 4
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x1F, // 11111
0x1F, // 11111
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001// 5
0x1F, // 11111
0x1F, // 11111
0x10, // 10000
0x10, // 10000
0x10, // 10000
0x10, // 10000
0x10, // 10000
0x1E, // 11110
0x1F, // 11111
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x11, // 10001
0x1F, // 11111
0x0E, // 01110// 6
0x0E, // 01110
0x1F, // 11111
0x11, // 10001
0x10, // 10000
0x10, // 10000
0x10, // 10000
0x10, // 10000
0x1E, // 11110
0x1F, // 11111
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x1F, // 11111
0x0E, // 01110// 7
0x1F, // 11111
0x1F, // 11111
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x02, // 00010
0x04, // 00100
0x08, // 01000
0x08, // 01000
0x10, // 10000
0x10, // 10000
0x10, // 10000
0x10, // 10000// 8
0x0E, // 01110
0x1F, // 11111
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x0E, // 01110
0x0E, // 01110
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x1F, // 11111
0x0E, // 01110// 9
0x0E, // 01110
0x1F, // 11111
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x1F, // 11111
0x0F, // 01111
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x01, // 00001
0x11, // 10001
0x1F, // 11111
0x0E // 01110
};//
void delay_us(unsigned int d){ // 안 맞음
unsigned int i;
for(i=0;i
}
//
void delay_ms(unsigned int d){
unsigned int i,j;
for(i=0;i
}
//
void lcdData(U_C d){ lcd_RS=1; lcd_Out=d; lcd_E=1; delay_us(1); lcd_E=0; delay_us(50); }
//
void lcdCmd(U_C c){ lcd_RS=0; lcd_Out=c; lcd_E=1; delay_us(1); lcd_E=0; delay_ms(5); }
//
void lcd_init(void){
delay_ms(50); lcdCmd(0x38); lcdCmd(0x38); lcdCmd(0x38); lcdCmd(0x0C); lcdCmd(0x06); lcdCmd(0x01);
}
//
void lcd_puts(U_C *str){ while(*str)lcdData(*str++); }
//
void main(void){
// U_C buf[30];
U_C sec, min, s1, s10, m1, m10, i;
P3=0; lcd_init();
lcdCmd(0x80); lcd_puts(str1);
lcdCmd(0xC0); lcd_puts(str2);
delay_ms(1000);
while(1){
for(min=0;min<60;min++){
m10=min/10; m1=min%10;
lcdCmd(0x40);
for(i=0;i<16;i++)lcdData(test[m10][0][i]); //m10, 0 1 //분 십의자리 폰트 저장 // 0x40~4F
for(i=0;i<16;i++)lcdData(test[m1 ][0][i]); //m1 , 2 3 //분 일의자리 폰트 저장 // 0x50~5F
//
for(sec=0;sec<60;sec++){
s10=sec/10; s1=sec%10;
lcdCmd(0x60);
for(i=0;i<16;i++)lcdData(test[s10][0][i]); //s10, 4 5 //초 십의자리 폰트 저장 // 0x60~6F
for(i=0;i<16;i++)lcdData(test[s1 ][0][i]); //s1 , 6 7 //초 일의자리 폰트 저장 // 0x70~7F
//
lcdCmd(0x8B); // 첫번째 라인 12번째 위치;i++){>;i++); >lcdData(0); lcdData(2); // 위에서 저장한 분 십의자리, 분 일의자리, 위 데이터 출력
lcdData(0xA5); // 분과 초 사이의 점
lcdData(4); lcdData(6); // 위에서 저장한 초 십의자리, 초 일의자리, 위 데이터 출력
lcdCmd(0xCB); // 두번째 라인 12번째 위치lcdData(1); lcdData(3); // 위에서 저장한 분 십의자리, 분 일의자리, 아래 데이터 출력
lcdData(0xA5); // 분과 초 사이의 점
lcdData(5); lcdData(7); // 위에서 저장한 초 십의자리, 초 일의자리, 아래 데이터 출력
delay_ms(500);
lcdCmd(0x8D); lcdData(' ');
lcdCmd(0xCD); lcdData(' ');
delay_ms(500);
}
}
}
}
//-------------------------------------------------------------CGRAM 크기에 넣을 문자는 8문자 밖에 넣지 못하므로 제약이 있습니다.
LCD 스크롤 시키는 것은 직접 만들어 보세요
댓글 0
조회수 1,198등록된 댓글이 없습니다.