#include"reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit SER=P3^4; sbit rCLK=P3^5; sbit SRCLK=P3^6; #define LEDDZ_COL_PORT P0 u8 gled_row[8]={0xFF,0xAA,0xEE,0x00,0x7E,0x52,0x52,0x7E};//LED点阵显示数字0的行数据-----想要什么内容就改对应的16进制 u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED点阵显示数字0的列数据 //col的,如0x7f,即为0111 1111,此时只有第一列为0,低电平,有效,led亮。其他均为高电平,led不亮 //row的,如0x21,即为0010 0001,此时为第一列的第三个,第八个为1,高电平,led亮 //... void time_delay(u16 delay_time) { while(delay_time--); } //向74HC595写入一个字节的数据,输入dat //某一行的某个数据,如显示0x21,对应16进制为0010 0001 //0x7c,对应16进制为0111 1100.... void hc595_write_data(u8 dat) { u8 i=0; for(i=0;i<8;i++) { //优先传输一个字节中的高位 SER =dat>>7; dat<<=1; //移位寄存器时钟上升沿将端口数据送入寄存器中 SRCLK=0; time_delay(1); SRCLK=1; time_delay(1); } //存储寄存器时钟上升沿将前面写入到寄存器的数据输出 rCLK=0; time_delay(1); rCLK=1; } void main() { u8 i=0; while(1) { for(i=0;i<8;i++) { LEDDZ_COL_PORT=gled_col[i]; //第一次选择第一列... hc595_write_data(gled_row[i]);//发送第一列对应的行数据,如0x21,对应16进制是0111 1100,变为 time_delay(100);//延时 hc595_write_data(0x00);//消影 } } }