/******************************************************************************/ /* 项目名称 : TX-1D 16x16点阵动态显示 */ /* 主控芯片 : STC89C52 */ /* 文件名称 : 16x16Led_Static */ /* 文件功能 : 16x16点阵显示 */ /* 文件版权 : 天祥电子 */ /* 文件版本 : */ /******************************************************************************/ /**********************************包含头文件**********************************/ #include #include uchar dot_row, cont; /********************************定义变量和数组********************************/ uchar idata display_temp[2][COL]; /******************************************************************************/ /* 函数名称 : Delay1ms() */ /* 函数描述 : 1毫秒延时函数 */ /* 输入参数 : 无 */ /* 参数描述 : 无 */ /* 返回值 : 无 */ /******************************************************************************/ void Delay1ms(unsigned int t) //@11.0592MHz { unsigned char i, j; for(;t;t--) { _nop_(); i = 2; j = 199; do { while (--j); } while (--i); } } /******************************************************************************/ /* 函数名称 : main */ /* 函数描述 : 主函数 */ /* 输入参数 : 无 */ /* 参数描述 : 无 */ /* 返回值 : 无 */ /******************************************************************************/ void main(void) { uchar i; uint j,k; P2 &= 0x3f; //关数码管 TMOD = 0x01; TH0 = (65536-1000) / 256; TL0 = (65536-1000) % 256; TR0 = 1; ET0 = 1; EA=1; for(i=0;i<16;i++) //将显示缓存清零 { display_temp[0][i] = 0xff; display_temp[1][i] = 0xff; } while(1) { for(cont=0;cont<5;cont++) { for(k=0;k<16;k++) { for(i=0;i<16;i++) { j=Digit_Tab1[cont*2][i] | (Digit_Tab1[cont*2+1][i]<<8); display_temp[0][i] = (display_temp[0][i]>>1) | ((display_temp[1][i]&0x01)<<7); display_temp[1][i] = (display_temp[1][i]>>1) | (((j>>k)&0x01)<<7); } Delay1ms(50); } } } } /******************************************************************************/ /* 函数名称 : Timer0 */ /* 函数描述 : T0中断函数 */ /* 输入参数 : 无 */ /* 参数描述 : 无 */ /* 返回值 : 无 */ /******************************************************************************/ void Timer0(void) interrupt 1 { static uchar dot_row; TH0 = (65536 - 1000) / 256; TL0 = (65536 - 1000) % 256; _138_EN = 1; //关显 P0 = (P0&0xf0)|dot_row; //输出行码 Ser_IN(display_temp[1][(dot_row)%16]); //16位数据输出 Ser_IN(display_temp[0][(dot_row++)%16]); Par_OUT(); _138_EN = 0; //输出显示 } /******************************************************************************/