16乘16点阵屏仿真(4个74hc595)+程序
直接上图吧,51控制,4个74hc595连接。,前面的图片是整体的,后面的是局
部放大,以免看不清
直接复制代码即可运行
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define NUM 1
#define NUN 9
sbit SH_CP=P2^0;
sbit DS=P2^1;
sbit ST_CP=P2^2;
uchar temp=0x80;
uint tem=0;
uchar code tab[NUN][32]= {
0x10,0x08,0x04,0x3F,0x21,0x21,0x3F,0x21,0x21,0x3F,0x01,0x01,0xFF,0x01,0x01,0x01, //单
0x10,0x20,0x40,0xF8,0x08,0x08,0xF8,0x08,0x08,0xF8,0x00,0x00,0xFE,0x00,0x00,0x00, 0x00,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x20,0x20,0x40, //片
0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20, 0x10,0x11,0x11,0x11,0xFD,0x11,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x12,0x12,0x14, //机
0x00,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0x12,0x0E,0x00, 0x20,0x20,0x20,0x20,0xFB,0x20,0x20,0x22,0x22,0x24,0x28,0x20,0x21,0x21,0x22,0x24, //协
0x80,0x80,0x80,0x80,0xF0,0x90,0x90,0x98,0x94,0x92,0x92,0x90,0x10,0x10,0x50,0x20,
0x01,0x01,0x02,0x04,0x08,0x30,0xCF,0x00,0x00,0x7F,0x02,0x04,0x08,0x10,0x3F,0x10, //会 0x00,0x00,0x80,0x40,0x20,0x18,0xE6,0x00,0x00,0xFC,0x00,0x00,0x20,0x10,0xF8,0x08,
0x00,0x00,0xFC,0x04,0x05,0x49,0x2A,0x14,0x10,0x28,0x24,0x45,0x81,0x02,0x04,0x08, //欢 0x80,0x80,0x80,0xFC,0x04,0x08,0x40,0x40,0x40,0xA0,0xA0,0x10,0x10,0x08,0x04,0x02,
0x00,0x20,0x13,0x12,0x02,0x02,0xF2,0x12,0x12,0x12,0x13,0x12,0x10,0x28,0x47,0x00, //迎 0x00,0x80,0x3C,0x24,0x24,0x24,0x24,0x24,0x24,0xB4,0x28,0x20,0x20,0x20,0xFE,0x00,
0x08,0x08,0x08,0x11,0x11,0x32,0x34,0x50,0x91,0x11,0x12,0x12,0x14,0x10,0x10,0x10, //你 0x80,0x80,0x80,0xFE,0x02,0x04,0x20,0x20,0x28,0x24,0x24,0x22,0x22,0x20,0xA0,0x40,
0x03,0x1F,0x3C,0x70,0x6E,0xDA,0xD2,0xC0,0xC0,0xC8,0x6C,0x67,0x70,0x38,0x1E,0x07, //笑脸
0xF0,0xFC,0x1E,0x06,0x3B,0x6B,0x4B,0x03,0x03,0x13,0x33,0xE3,0x06,0x0E,0x18,0xF0,
};
uchar tab1[NUM][32]={0};
bit account=0;
uchar count=0;
uchar code a[ ]= {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay_ms(unsigned int ms)
{
uchar j;
while(ms--)
for(j=0;j<123;j++);
}
void WriteByte(uchar dat)
{
uchar k;
SH_CP=0;
ST_CP=0;
for(k=0;k<8;k++)
{
DS=dat&0x01;
dat=dat>>1;
SH_CP=1;
_nop_();
_nop_();
SH_CP=0;
_nop_(); }
}
void display(uchar dat[][32])
{ uchar i;
for(i=0;i<16;i++)
{
WriteByte(dat[0][i]);
WriteByte(dat[0][i+16]);
if(i<8)
{
WriteByte(a[i]);
WriteByte(0xff);
}
else
{
WriteByte(0xff);
WriteByte(a[i-8]);
}
ST_CP=1;
_nop_();
ST_CP=0;
delay_ms(1);
}
}
void zzh() //将移动数据存在缓冲区
{ uchar i;
for(i=0;i<16;i++)
{
if((tab1[0][16+i]&0x80)==0)
{
tab1[0][i]=(tab1[0][i]<<1)&0xfe;
}
else
{
tab1[0][i]=(tab1[0][i]<<1)|0x01;
}
if(((count%16)<8)&&(tem>1)&0x7f;
if(temp==0x00)
{
temp=0x80;
}
}
void willseveral() //将缓冲区数都存为0x00 { uchar i,j;
for(i=0;i