如图,我做的是用C51单片机、74HC154和74HC595做的LED点阵显示系统。现在只能两块屏幕上显示相同的汉字,不会写滚动(左移)显示程序,求论坛的大神帮忙知道一下!谢谢
源程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define LineCtrl P2
#define N 2
sbit Shift_CLK_Pin = P0^1;
sbit Serial_Data_Pin = P0^0;
sbit RCK_Pin = P3^7;
sbit Switch_74LS154 = P3^6;
/***********************汉字点阵码*************************/
uchar code FONT[][32]=
{
{0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00},//三
{0x08,0x04,0x08,0x04,0x08,0x04,0x88,0x3F,0x2A,0x04,0xAA,0x24,0x2A,0x25,0x2A,0x15,
0x2A,0x04,0xEA,0x7F,0x2A,0x0A,0x3A,0x0A,0x26,0x11,0x00,0x11,0x80,0x20,0x40,0x40},//峡
{0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,0x80,0x00,
0x40,0x01,0x40,0x01,0x20,0x02,0x20,0x02,0x10,0x04,0x08,0x08,0x04,0x10,0x03,0x60},//大
{0x44,0x10,0x88,0x10,0x88,0x08,0x00,0x04,0xFE,0x7F,0x02,0x40,0x01,0x20,0xF8,0x07,
0x00,0x02,0x80,0x01,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00},//学
{0x10,0x08,0xB8,0x08,0x0F,0x09,0x08,0x09,0x08,0x08,0xBF,0x08,0x08,0x09,0x1C,0x09,
0x2C,0x08,0x0A,0x78,0xCA,0x0F,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},//科
{0x08,0x04,0x08,0x04,0x08,0x04,0xC8,0x7F,0x3F,0x04,0x08,0x04,0x08,0x04,0xA8,0x3F,
0x18,0x21,0x0C,0x11,0x0B,0x12,0x08,0x0A,0x08,0x04,0x08,0x0A,0x8A,0x11,0x64,0x60},//技
{0x44,0x10,0x88,0x10,0x88,0x08,0x00,0x04,0xFE,0x7F,0x02,0x40,0x01,0x20,0xF8,0x07,
0x00,0x02,0x80,0x01,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,0x00},//学
{0x00,0x02,0x1E,0x04,0xD2,0x7F,0x4A,0x40,0x2A,0x20,0x86,0x1F,0x0A,0x00,0x12,0x00,
0xD2,0x7F,0x12,0x09,0x16,0x09,0x0A,0x09,0x82,0x48,0x82,0x48,0x42,0x70,0x22,0x00},//院
};
uchar tmp[64]={
0x00,0x20,0xE4,0x23,0x28,0x22,0x28,0x2A,0xA1,0x2A,0xA2,0x2A,0xA2,0x2A,0xA8,0x2A,
0xA8,0x2A,0xA4,0x2A,0xA7,0x2A,0x84,0x20,0x44,0x21,0x44,0x22,0x24,0x28,0x10,0x10,//测
0x00,0x14,0x04,0x24,0x08,0x24,0x08,0x04,0xE0,0x7F,0x00,0x04,0x0F,0x04,0xE8,0x07,
0x88,0x04,0x88,0x08,0x88,0x08,0xA8,0x08,0x98,0x53,0xE8,0x50,0x40,0x60,0x00,0x40//试
};
//延时约1毫秒
void delay(uint us)
{
uchar d;
for(;us>0;us--)
for(d=0;d<255;d++);
}
//送一个字节的子程序
void SendByte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
Shift_CLK_Pin=0;
if(dat&0x80)Serial_Data_Pin=1;
else Serial_Data_Pin=0;
Shift_CLK_Pin=1;
dat=dat<<1;
}
}
void Display(uchar*dat1)
{
uchar i;
for(i=0;i<16;i++)
{
SendByte(dat1[2*i+33]);SendByte(dat1[2*i+32]);
SendByte(dat1[2*i+1]);SendByte(dat1[2*i]);
RCK_Pin=0;
_nop_();
_nop_();
_nop_();
_nop_();
LineCtrl&=0xF0;
LineCtrl=LineCtrl|i;
RCK_Pin=1;
delay(1);
}
}
void main()
{
uchar i,j,k,l;
Switch_74LS154=0;
while(1)
{
Display(tmp);
delay(1000);
for(i=0;i<22;i++)
{
for(j=0;j<2;j++)
for(k=1;k<9;k++)
{
for(l=0;l<16;l++)
{
tmp[l*N]=tmp[l*N]<<1|tmp[l*N+1]>>7;
tmp[l*N+1]=tmp[l*N+1]<<1|tmp[l*N+32]>>7;
tmp[l*N+32]=tmp[1*N+32]<<1|tmp[1*N+33]>>7;
tmp[l*N+33]=tmp[l*N+33]<<1|FONT[l*N+j]>>(8-k);
}
Display(tmp);
delay(1);
}
}
delay(5000);
}
}
这个程序显示有问题……
|