595写888程序
- 格式:doc
- 大小:125.50 KB
- 文档页数:8
8 个595驱动 8*8X8 点阵 流动显示0~9(C51)
在proteus电路设计中,有时将整个电路设计分成几个部分,分别画在各自的设计页上。各页间的通过相同的网络名称连接,并保存在一个DSN文件中。这种设计称为多页设计 。
这次试试 proteus 的多页设计。
可以通过工具栏里的工具操作
也可以通过菜单操作
各页的名称可以由 Edit Sheet Properties...编辑
这个设计共4 页
第1 页 AT89C52 和 74HC154 第2 页 8 个74HC595
第3 页 8 * 8X8 绿色LED点阵 第4 页也是8* 8X8 点阵,留着下次做4*16X16的下半组用。
程序清单:
//8* 8X8 LED点阵流动显示 0~9 由于用了154,仿真和程序 与上一例(4*8X8)有所不同
//2011 05 15 E:\DPJ_C\点阵DIY\8X8X8_C\8X8X8.c
#include
#define uchar unsigned char
#define uint unsigned int
sbit SH_CP=P2^0;
sbit DS=P2^1;
sbit ST_CP=P2^2; uchar code tab[ ]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",0
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",1
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",2
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",3
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",4
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",5
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",6
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",7
0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,0x00,//"0",8
0x00,0x00,0x20,0x20,0x7F,0x00,0x00,0x00,//"1",9
0x00,0x21,0x43,0x45,0x45,0x49,0x31,0x00,//"2",10
0x00,0x22,0x41,0x49,0x49,0x49,0x36,0x00,//"3",11
0x00,0x04,0x0C,0x14,0x24,0x7F,0x04,0x00,//"4",12
0x00,0x72,0x51,0x51,0x51,0x53,0x4E,0x00,//"5",13
0x00,0x3E,0x6B,0x49,0x49,0x49,0x26,0x00,//"6",14
0x00,0x40,0x41,0x42,0x4C,0x50,0x60,0x00,//"7",15
0x00,0x36,0x49,0x49,0x49,0x49,0x36,0x00,//"8",16
0x00,0x32,0x49,0x49,0x49,0x4B,0x3E,0x00,//"9",17
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",0
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",1 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",2
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",3
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",4
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",5
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",6
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" ",7
};
//顺向、逐列、阴码 MICROSOFT SANS SERIF 16x12 MATRIX-8X8-GREEN 右旋90度 X轴镜像
void delay_ms(unsigned int ms)
{
uchar j;
while(ms--)
for(j=0;j<123;j++);
}
void WriteByte(uchar dat)
{
uchar k;
for(k=0;k<8;k++)
{
dat=dat>>1;
DS=CY; SH_CP=0;
SH_CP=1;
}
}
void main()
{
uchar num,temp,n,m;
P1=0x00;
while(1)
{
for(n=0;n<144;n++) //
for(m=0;m<12;m++) //重复显示12次
{
temp=0; //这条要加,不然流动极快
for(num=n;num<8+n;num++)
if(temp==8)
{
temp=0;
P1=0x00;
}
else
{ WriteByte(tab[num+72]);
WriteByte(tab[num+64]);
WriteByte(tab[num+56]);
WriteByte(tab[num+48]);
WriteByte(tab[num+40]);
WriteByte(tab[num+32]);
WriteByte(tab[num+24]);
WriteByte(tab[num+16]);
WriteByte(tab[num+8]);
WriteByte(tab[num+0]);
P1=temp;
ST_CP=0;
ST_CP=1;
delay_ms(1);
temp++;
}
}
}
}