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++;

}

}

}

}