初级会员
主题
帖子
积分171
阅读权限10
注册时间2012-10-24
最后登录1970-1-1
在线时间 小时
|
本帖最后由 为了毕业设计 于 2012-10-30 23:53 编辑
这是我在论坛里下的一个程序,但是变异的时候总显示55.C(74): error C202: 'Table': undefined identifier
然后我在上面是声明中放入 uchar Table[];后又显示
55.C(42): error C216: subscript on non-array or too many dimensions
C学的不太好,这没弄明白,希望大家能帮我看看~
#include<reg52.h>
#include <stdio.h>
#include"zimo.h"
#define uchar unsigned char
#define uint unsigned int
#define SPEED 5 //定义速度与速度成反比
#define LIGHT 9 //定义亮度:取值范围0--10
#define NUMBER 10 //定义要显示总32X32汉字个数,计算方法:NUMBER=汉字个数
#define RAD1 0 //0123全为红色 0101橙色
#define RAD2 1 //2301全为绿色
#define GREEN1 2 //0231上红下绿
#define GREEN2 3 //2103下红上绿
uchar word=0,col=0,col1=0,disrow=0;//wor为要显字变量,col为位移变量,col1为字节偏移量,disrow为行变量
uchar BUFF__UP[17]; //上半屏显示缓冲 上下缓冲字节数取值=[2*板点阵宽度/8]+1比较保险,即两倍板的点阵字节数.
uchar BUFFDOWN[17]; //下半屏显示缓冲
uchar R_G[6]; //调整颜色
sbit G1=P2^0;
sbit G2=P2^1;//红色数据
sbit R1=P2^2;
sbit R2=P2^3;//绿色数据
sbit CLK=P2^4;
sbit STB=P2^5;
sbit OE =P2^6;//74HC138使能:低有效
uchar Recive=1;
//根据列指针由双字节合并为单字节的子程序模块
uchar Combine_2byte(uchar h1,uchar h2)
{
uchar T_date,tempcol;
tempcol=col1;
T_date=(h1>>tempcol)|(h2<<(8-tempcol));
return T_date;
}
//分别装载上、下半屏点阵数据
void Load_one_line(void)
{
BUFF__UP[0]=Table[word][disrow*4+0];//装载上半屏一线点阵数据
BUFF__UP[1]=Table[word][disrow*4+1];
BUFF__UP[2]=Table[word][disrow*4+2];
BUFF__UP[3]=Table[word][disrow*4+3];
BUFF__UP[4]=Table[word+1][disrow*4+0];
BUFF__UP[5]=Table[word+1][disrow*4+1];
BUFF__UP[6]=Table[word+1][disrow*4+2];
BUFF__UP[7]=Table[word+1][disrow*4+3];
BUFF__UP[8]=Table[word+2][disrow*4+0];
BUFF__UP[9]=Table[word+2][disrow*4+1];
BUFF__UP[10]=Table[word+2][disrow*4+2];
BUFF__UP[11]=Table[word+2][disrow*4+3];
BUFF__UP[12]=Table[word+3][disrow*4+0];
BUFF__UP[13]=Table[word+3][disrow*4+1];
BUFF__UP[14]=Table[word+3][disrow*4+2];
BUFF__UP[15]=Table[word+3][disrow*4+3];
BUFF__UP[16]=Table[word+4][disrow*4+3];
BUFFDOWN[0]=Table[word][64+disrow*4+0];//装载下半屏一线点阵数据
BUFFDOWN[1]=Table[word][64+disrow*4+1];
BUFFDOWN[2]=Table[word][64+disrow*4+2];
BUFFDOWN[3]=Table[word][64+disrow*4+3];
BUFFDOWN[4]=Table[word+1][64+disrow*4+0];
BUFFDOWN[5]=Table[word+1][64+disrow*4+1];
BUFFDOWN[6]=Table[word+1][64+disrow*4+2];
BUFFDOWN[7]=Table[word+1][64+disrow*4+3];
BUFFDOWN[8]=Table[word+2][64+disrow*4+0];
BUFFDOWN[9]=Table[word+2][64+disrow*4+1];
BUFFDOWN[10]=Table[word+2][64+disrow*4+2];
BUFFDOWN[11]=Table[word+2][64+disrow*4+3];
BUFFDOWN[12]=Table[word+3][64+disrow*4+0];
BUFFDOWN[13]=Table[word+3][64+disrow*4+1];
BUFFDOWN[14]=Table[word+3][64+disrow*4+2];
BUFFDOWN[15]=Table[word+3][64+disrow*4+3];
BUFFDOWN[16]=Table[word+4][64+disrow*4+3];
}
//发送屏一线点阵数据
void Send_one_line(void)
{
char s;
uchar TEMP0,TEMP1,i,inc;
if(col<8) inc=0;
if(8<=col&&col<16) inc=1;
if(16<=col&&col<24) inc=2;
if(24<=col&&col<32) inc=3;
for(s=0+inc;s<=8+inc;s++)
{
TEMP0=Combine_2byte(BUFFDOWN,BUFFDOWN[s+1]);
TEMP1=Combine_2byte(BUFF__UP,BUFF__UP[s+1]);
for(i=0;i<8;i++)
{
R_G[0]=~(TEMP1>>i)&0x01; //取出最高位
R_G[1]=~(TEMP0>>i)&0x01; //取出最高位
R_G[2]=0xff;
R_G[3]=0xff;
R_G[4]=0x00;
R_G[5]=0x00;
R1=R_G[RAD1];
R2=R_G[RAD2];
G1=R_G[GREEN1];
G2=R_G[GREEN2];
CLK=0;
CLK=1; //移位时钟
}
}
}
//亮度调节延时
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{for(j=5;j>0;j--)
;
}
}
//亮度调整
void PWM_LIGHT(uchar p)
{
OE=0;
delay(p);
OE=1;
delay(10-p);
}
void UART() interrupt 4
{
EA=1;
if (RI) //RI接受中断标志
{
RI=0;
//清除RI接受中断标志
Recive=SBUF;
//SUBF接受/发送缓冲器
//PWM_LIGHT(Recive);
}
EA=1;
}
//主函数入口
void main(void)
{
uchar i,move;
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xE6;
// //baud*2 /* 波特率9600、数据位8、停止位1。效验位无 (12M)
TL1 = 0xE6;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
TR1=1; //启动定时器1
PS=1; //串口中断优先
R1=0;//数据初始化
R2=0;
G1=0;
G2=0;
while(1)
{
for(col=0;col<32;col++)//循环32次,点亮并移动一个汉字,步进是一位,
{
col1=col%8;
for(i=0;i<SPEED;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
{
for(disrow=0;disrow<16;disrow++)//扫描16行
{
Load_one_line();//装载上下两屏各一线点阵数据
Send_one_line();//发送一线点阵数据
STB=0;
STB=1; // 输出锁存
P1=disrow;// 行扫描
LIGHT
PWM_LIGHT(LIGHT);
}
}
}
word=word+1;// 一个汉字移动后,指向下一个汉字
if(word>=NUMBER)
{
word=0;//移动完NUMBER个汉字后重新开始
}
}
} |
|