|
急求各位高手,我设计的是用ET44M210来制作LED单子广告屏,能通过按键实现上、下、左、右滚动,可是发现用按键中断法无法实现按键的切换,程序如下,麻烦各位高手帮我看一下吧,我都快急死了。
//孙,上下移
//********************************************
#include "et44m210C.h"
//#define LCMRS 0x10;
//#define LCMEN 0x08;
//#define ROMCS 0x01;
const unsigned char Table[]=
{0x00,0x7E,0x40,0x20,0x10,0x60,0x30,0x9C,
0x93,0x50,0x30,0x10,0x10,0x10,0x14,0x08,
0x00,0x7E,0x40,0x20,0x10,0x60,0x30,0x9C,
0x93,0x50,0x30,0x10,0x10,0x10,0x14,0x08};
const unsigned char Table1[]=
{0x04,0x04,0x04,0x04,0x04,0x0D,0x15,0x24,
0x64,0x44,0x04,0x04,0x04,0x04,0x05,0x02,
0x04,0x04,0x04,0x04,0x04,0x0D,0x15,0x24,
0x64,0x44,0x04,0x04,0x04,0x04,0x05,0x02};
void delay(void);
void init(void);
void init_LED1(void);
void init_LED2(void);
unsigned char p,count;
//***************************************
void main()
{
unsigned char scan,x;
init();
while(1)
{
KWUBIF=0;
scan=0xfe;
count=0;
for(x=0;x<2;x++)
{
PTC=scan;
delay();
scan=scan<<1;
scan=scan|0x01;
count=count+2;
KWUBIF=0;
}
}
}
//-----------------------------------------------------------
void init()
{
IOCC=0x03;
IOCB=PUCB=KWUBIE=0x03;
IOCE=IOCA=IOCD=0;
INTE=GIE;
}
//-----------------------------------------------------------
//-----------------------------------------------------------
void init_LED1()
{
unsigned int i,j,k,m,scan,scan1;
m=1000;
while(m>0)
{
for(j=0;j<16;j++)
{
k=5;
while(k>0)
{
scan=0x08;
for(i=0;i<2;i++)
{
PTC=scan;
PTA=0;
PTE=Table[i+j];
PTD=Table1[i+j];
delay();
PTD=PTE=0xFF;
scan=scan>>1;
}
scan=0x80;
for(i=2;i<8;i++)
{
PTB=scan;
PTA=0;
PTC=0;
PTE=Table[i+j];
PTD=Table1[i+j];
delay();
PTD=PTE=0xFF;
scan=scan>>1;
}
scan1=0x80;
for(i=8;i<16;i++)
{
PTA=scan1;
PTB=0;
PTE=Table[i+j];
PTD=Table1[i+j];
delay();
PTD=PTE=0xff;
scan1=scan1>>1;
}
k--;
}
}
m--;
}
}
//-----------------------------------------------------------
void init_LED2()
{
unsigned int i,j,k,m,scan,scan1;
m=1000;
while(m>0)
{
for(j=0;j<16;j++)
{
k=5;
while(k>0)
{
scan=0x08;
for(i=16;i<18;i++)
{
PTC=scan;
PTA=0;
PTE=Table[i-j];
PTD=Table1[i-j];
delay();
PTD=PTE=0xFF;
scan=scan>>1;
}
scan=0x80;
for(i=18;i<24;i++)
{
PTB=scan;
PTA=0;
PTC=0;
PTE=Table[i-j];
PTD=Table1[i-j];
delay();
PTD=PTE=0xFF;
scan=scan>>1;
}
scan1=0x80;
for(i=24;i<32;i++)
{
PTA=scan1;
PTB=0;
PTE=Table[i-j];
PTD=Table1[i-j];
delay();
PTD=PTE=0xff;
scan1=scan1>>1;
}
k--;
}
}
m--;
}
}
//-----------------------------------------------------------
void kwu_int(void) interrupt KWUB_VEC
{
p=count;
if(KWUBIF & PTB0) //dataout1();
init_LED1();
p++;
if(KWUBIF & PTB1) //dataout2();
init_LED2();
KWUBIF=0;
}
//-----------------------------------------------------------
void delay()
{
unsigned int dly=1000;
while(dly>0) dly--;
} |
|