#include<reg52.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit CLK=P3^6;
sbit SRCLK=P3^5;
sbit SER=P3^4;
void sum(u16 i) //延时函数
{
while(i--);
}
//定义一个二维数组显示 每 行 是一个显示
u8 code display[40]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00,
0x18,0x24,0x12,0x12,0x12,0x24,0x18,0x00,
0x00,0x7C,0x02,0x02,0x02,0x7C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//定义一个数组来使 P0口 到 P7口 挨个导通
u8 code P0_P7_Conduction[]={
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe
};
u8 code P1_P7_Conduction[]={
0x7e,0xbd,0xdb,0xe7,0xe7,0xe7,0xdb,0xbd,0x7e
};
//74HC595芯片函数
void lattice(u8 bta)
{
u8 i;
SRCLK=0;
CLK=0;
for(i=0;i<8;i++)
{
SER=bta>>7;
bta<<=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
}
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
void main()
{
TMOD=0x01;//定时器1
TR0=1;
TH0=0xfc;
TL0=0x66;
ET0=1; //使用定时器0为中断口
EA=1; //中断开关
while(1);
}
void weist() interrupt 1 //中断 中断向量地址为1
{
static u8 index=0; //作用:使点阵在一个循环后显示上一个循环的第二列
static u8 tmer=0; //作用:计时
static u8 j=0; //流水灯显示
u8 i=0; // 作用:使P0口挨个导通
TH0=0xfc;
TL0=0x66;
lattice(0x00); //消隐
switch(i) //让点阵动态显示
{
case 0 : P0=P0_P7_Conduction[0]; i++; lattice(display[index+0]); break;
case 1 : P0=P0_P7_Conduction[1]; i++; lattice(display[index+1]); break;
case 2 : P0=P0_P7_Conduction[2]; i++; lattice(display[index+2]); break;
case 3 : P0=P0_P7_Conduction[3]; i++; lattice(display[index+3]); break;
case 4 : P0=P0_P7_Conduction[4]; i++; lattice(display[index+4]); break;
case 5 : P0=P0_P7_Conduction[5]; i++; lattice(display[index+5]); break;
case 6 : P0=P0_P7_Conduction[6]; i++; lattice(display[index+6]); break;
case 7 : P0=P0_P7_Conduction[7]; i=0; lattice(display[index+7]); break;
default : break;
}
tmer++;
if(tmer>=250)
{
tmer=0;
index++;
if(index>=32)
{
index=0;
}
}
}
求问大佬为什么我的代码无法让8*8的led点阵点亮
用的是普中的板子