8051을 이용한 16*16도트 매트릭스 모듈을 6개 연결해 디스플레이 를 하려고 하는 데 에러가 생깁니다
에러 내용은 8051용량 초과라고 하는데 어떻게 소스를 고쳐야 할까요 ~~도와주세요~~
#include <io51.h>
bit P1_0 = 0x90;
bit P1_1 = 0x91;
bit P1_2 = 0x92;
bit P1_3 = 0x93;
bit P1_4 = 0x94;
bit P1_5 = 0x95;
bit P1_6 = 0x96;
bit P1_7 = 0x97;
#define R_DATA P1_4
#define G_DATA P1_5
#define LATCH P1_6
#define CLOCK P1_7
unsigned int FONT1[16] = {0x0000 , 0xfafa, 0x2222, 0x2622, 0x5253, 0x8a8a, 0x8a8a, 0x8a8a, 0x0000, 0x80fa
0xfe0a, 0x000a, 0x002b, 0x0022, 0x0022, 0x00fa};
static unsigned int FONT2[10], FONT3[10]; //, FONT[16];
unsigned int font1, font2, font3;
// unsigned int font;
unsigned char MatrixCount;
unsigned char NumberOfMatrix;
char addr;
void color (unsigned char color_select)
{
int i;
if(color_select==1){
for(i=0; i<16*NumberOfMatrix; i++){
if(font3 & 0x8000){ //폰트 소스 최상위 비트가 1일때
R_DATA = 1; //R_DATA,G_DATA 1,0일때 적색
G_DATA = 0; //0,1일때 녹색, 1,1일때 오렌지색으로 점등
}
else{ //폰트 소스 최상위 비트가 0일때
R_DATA = 0;
G_DATA = 0;
}
CLOCK = 1;
CLOCK = 0;
font3= font3 << 1;
if(font2 & 0x8000)
font3= 0x0001 | font3;
font2= font2 << 1;
if(font1 & 0x8000)
font2= 0x0001 | font2;
font1= font1 << 1; //폰트 Hex값 1bit를 왼쪽으로 Shift
}
P1= (P1 & 0xf0) | addr;
LATCH= 0;
LATCH= 1;
addr++;
}
else if(color_select==2){
for(i=0 ; i<16; i++){
if(font3 & 0x8000){
R_DATA = 0;
G_DATA = 1;
}
else{
R_DATA = 0;
G_DATA = 0;
}
CLOCK = 1;
CLOCK = 0;
// font = font << 1;
}
P1 = (P1 & 0xf0) |addr;
LATCH = 0;
LATCH = 1;
}
else if(color_select==3) {
for(i=0 ; i<16; i++){
if(font3 & 0x8000){
R_DATA = 1;
G_DATA = 1;
}
else{
R_DATA = 0;
G_DATA = 0;
}
CLOCK = 1;
CLOCK = 0;
// font = font << 1;
}
P1 = (P1 & 0xf0) |addr;
LATCH = 0;
LATCH = 1;
}
}
void shift(unsigned char shift_mode)
{
// unsigned int FONTS;
int i;
if(shift_mode==1){
for(i=0; i<10; i++){ // 라인 증가식
if(FONT3[i] & 0x8000) {
FONT3[i]= FONT3[i] << 1;
if(FONT2[i] & 0x8000)
FONT3[i]= FONT3[i] | 0x0001;
FONT2[i]=FONT2[i] << 1;
if(FONT1[i] & 0x8000)
FONT2[i]= FONT2[i] | 0x0001;
FONT1[i]= FONT1[i] << 1;
FONT1[i]= FONT1[i] | 0x0001;
MatrixCount=0;
}
else{
FONT3[i]= FONT3[i] << 1;
if(FONT2[i] & 0x8000)
FONT3[i]= FONT3[i] | 0x0001;
FONT2[i]=FONT2[i] << 1;
if(FONT1[i] & 0x8000)
FONT2[i]= FONT2[i] | 0x0001;
FONT1[i]= FONT1[i] << 1;
}
}
}
/* else if(shift_mode==2){
for(i=0; i<16; i++) {
if(FONT[i] & 0x0001) {
FONTS = FONT[i] >> 1;
FONTS = FONTS | 0x8000;
FONT[i] = FONTS; }
else{
FONTS = FONT[i] >> 1;
FONT[i] = FONTS;
}
}
} */
}
void main (void)
{
int j;
P1= 0x00;
NumberOfMatrix=6;
MatrixCount=0;
while(1)
{
addr= 0;
for(j=0; j<10; j++){ // 라인 증가식?
font3= FONT3[j];
font2= FONT2[j];
font1= FONT1[j];
color(1);
}
MatrixCount++;
shift(1);
}
}
1. 컴파일러 정품 사용하세요^^;;
정품 아닌 버젼은 코드용량 제한이 있어서 그러한 에러를 발생시킬 수 있습니다.
2. 8051 메모리 모델을 정확히 설정하셨는지요.. 플래시 용량 설정하는 부분이 있을텐데요.