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};
const uch col[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列码
//初始化子程序
void init()
{
ADCON1=0x06;//初始化RA口为普通数字端口
TRISA=0X20;
PORTA=0;
TRISB=0;
PORTB=0;
TRISC=0;
PORTC=0;
TRISD=0;
PORTD=0;
}
//延时子程序
void delay1ms()
{
uch i;
for(i=0;i《150;i++)
{NOP();
}
}
//从右往左显示
void display1()
{
uch i,j,k,t,n;
int m=0;//字符定位变量
for(n=0;n《6;n++)
{
for(offset=0;offset《24;offset++)//偏置最多24位
{
for(t=0;t《4;t++)//每个位置显示4次
{
for(i=0;i《24;i++)//取数,每行24列,故取24个数
{
PORTD=0xff;//一开始先把列置高电平,关显示
PORTC=0x70;
NOP();
PORTC=0;
PORTB=zxhn[i+offset+m];//取行码
if((i+offset)》23)PORTB=zxhn[i+offset+48+m];
RC0=1;
NOP();
RC0=0;
PORTB=zxhn[i+24+offset+m];
if((i+offset)》23)PORTB=zxhn[i+offset+72+m];
RC1=1;
NOP();
RC1=0;
PORTB=zxhn[i+48+offset+m];
if((i+offset)》23)PORTB=zxhn[i+offset+96+m];
RC2=1;
NOP();
RC2=0;
j=i/8;//求需要选通的行线
k=i%8;//求需要选通的列线
PORTD=col[k];
switch(j)
{
case 0: RC4=1; NOP(); RC4=0; break;
case 1: RC5=1; NOP(); RC5=0; break;
case 2: RC6=1; NOP(); RC6=0; break;
}
delay1ms();//视觉暂留
}
}
}
m=m+72;//定位下一个初始字符
}
}
//从左往右显示
void display2()
{
uch i,j,k,t,n,tt1,tt2,tt3;
int m=0;//字符定位变量
for(n=0;n《6;n++)
{
for(offset=24;offset》0;offset--)//偏置最多24位
{
for(t=0;t《4;t++)//每个位置显示4次
{
for(i=24;i》0;i--)//取数,每行24列,故取24个数
{
if((i+offset)》23)
{
tt1=zxhn[i+offset-24+m];
tt2=zxhn[i+offset+m];
tt3=zxhn[i+offset+24+m];
}
else
{
tt1=zxhn[i+offset+m+72];
tt2=zxhn[i+offset+m+96];
tt3=zxhn[i+120+offset+m];
}
PORTD=0xff;//一开始先把列置高电平,关显示
PORTC=0x70;
NOP();
PORTC=0;
PORTB=tt1;//取行码
RC0=1;
NOP();
RC0=0;
PORTB=tt2;
RC1=1;
NOP();