下图依次是两片74HC595级联,8*8点阵图的封装原理图,并给出全部的代码解释,因为keil5直接复制的代码显示乱码,所以有进行完整的代码截图。感谢批评指正。
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
sbit dio =P3^4;//´®ÐÐÊý¾Ý¿Ú
sbit sclk =P3^5;//ÒÆλ¼Ä´æÆ÷ʱÖÓ
sbit rclk =P3^6;//Êä³ö¼Ä´æÆ÷ʱÖÓ
//0x61,0xB5,0xD5,0xF0,0xDE,0xA2,0x7C,0xFE//
//0xFE,0x7C,0xA2,0xDE,0xF0,0xD5,0xB5,0x61//´¹Ö±·×ª
//0x18,0xAA,0xB2,0xBB,0x12,0xB2,0xB6,0x10//
//0x1C,0xB0,0xB2,0x00,0xA4,0xB1,0xA0,0x1B//
//0xF7,0xE1,0xC1,0x80,0x80,0x88,0x9C,0xBE//ÐÄÐÎ
uchar code table[6][8] ={0xFE,0x7C,0xA2,0xDE,0xF0,0xD5,0xB5,0x61,
0x18,0xAA,0xB2,0xBB,0x12,0xB2,0xB6,0x10,
0x1C,0xB0,0xB2,0x00,0xA4,0xB1,0xA0,0x1B,
0xF7,0xE1,0xC1,0x80,0x80,0x88,0x9C,0xBE,
0x73,0x60,0x7B,0x20,0x53,0x20,0x5B,0x0B,
0xE7,0xD7,0xF7,0xF7,0x81,0x7E,0x00,0xE7
};
void delay(uchar x) //@12.000MHz //Ò»ºÁÃëÑÓʱº¯Êý
{
unsigned char i, j;
while(x--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void send_byte(uchar dat)
//Á½Æ¬595Ëø´æÆ÷·¢Ëͺ¯Êý
{
uchar i;
sclk =0;//ÉÏÉýÑØ´æ´¢
rclk =0;//ÊÕ·¢¾ùÏÈÖÃÁã
for(i =0;i<8;i++)
{
if(dat & 0x01) //´ÓÓÒÍù×óÒÀ´ÎÒÆλ·¢³ö
dio =1;
else
dio =0;
sclk =1;//0¡ª¡ª1ÉÏÉýÑØ ·¢Ë͵½595Ëø´æÆ÷
dat>>=1;//ÓÒÒÆһλ
sclk =0;//ÖÃÁã
}
}
void main()
{
uchar j,k,row;
unsigned int l;
while(1)
{
for(k=0;k<6;k++) //k±íʾÊý×éÖеÄÐÐÊý£¬ÖðÐнøÐз¢ËÍ
{
for(l=0;l<600;l++) //µ¥Æ¬»ú´¦ÀíËٶȽϿ죬ִÐÐ600´Î£¬Ê¹ÏÔʾºº×ÖÄܹ»¶ÌÔÝÍ£Áô
{
row =0x80; //ÐÐÖÃλ 1000 0000£¬ÖðÐнøÐз¢ËÍ
for (j =0;j<8;j++)
{
send_byte(table[k][j]);//·¢ËÍÁеÄÐÅÏ¢
send_byte(row); //·¢ËÍÐеÄÐÅÏ¢
rclk =1; //0¡ª¡ª1ÉÏÉýÑØ·¢ËÍ
rclk =0; //ÖÃÁã
row>>=1; //ÐÐÏÂÒÆÒÆλ 1000 0000¡ª¡ª0100 0000¡ª¡ª0010 0000
//delay(800);
}
}
//delay(100);
}
}
}