LED矩阵
注意
将OE与GND短接(用板子上的跳线帽)
使用54HC595模块实现控制8*8LED矩阵模块
#include "reg51.h" #include "intrins.h" typedef unsigned int u16; typedef unsigned char u8; u8 ledNum; sbit SRCLK=P3^6; sbit RRCLK=P3^5; sbit SER=P3^4; sbit LED=P0^7; void delay(u16 i) { while(i--); } void Hc595SendByte(u8 dat) { u8 a; SRCLK = 1; RRCLK = 1; for(a = 0; a < 8; a++) { SER = dat >> 7; dat <<= 1; SRCLK = 0; _nop_(); _nop_(); SRCLK = 1; } RRCLK = 0; _nop_(); _nop_(); RRCLK = 1; } void main() { LED = 0; ledNum = ~0x01; while (1) { Hc595SendByte(ledNum); ledNum = _crol_(ledNum, 1); delay(100); } }
LED矩阵
1、一点(误)
#include "reg51.h" #include "intrins.h" typedef unsigned int u16; typedef unsigned char u8; sbit SRCLK=P3^6; sbit RRCLK=P3^5; sbit SER=P3^4; sbit LED=P0^7; void delay(u16 i) { while(i--); } void Hc595SendByte(u8 dat1, u8 dat2) { u8 a; SRCLK = 1; RRCLK = 1; for(a = 0; a < 8; a++) { SER = dat1 >> 7; dat1 <<= 1; SRCLK = 0; _nop_(); _nop_(); SRCLK = 1; } for(a = 0; a < 8; a++) { SER = dat2 >> 7; dat2 <<= 1; SRCLK = 0; _nop_(); _nop_(); SRCLK = 1; } RRCLK = 0; _nop_(); _nop_(); RRCLK = 1; } void main() { LED = 0; while (1) { Hc595SendByte(0xfe, 0x02); } }
2、0
#include "reg51.h" #include "intrins.h" typedef unsigned int u16; typedef unsigned char u8; u8 ledduan[] = {0x00, 0x00, 0x3E, 0X41, 0X41, 0X41, 0X3E, 0X00}; u8 ledwei[] = {0X7F, 0XBF, 0XDF, 0XEF, 0XF7, 0XFB, 0XFB, 0XFE}; sbit SRCLK=P3^6; sbit RRCLK=P3^5; sbit SER=P3^4; void delay(u16 i) { while(i--); } void LED1(u8 dat1) { P0 = dat1; } void Hc595SendByte(u8 dat) { u8 a; SRCLK = 1; RRCLK = 1; for(a = 0; a < 8; a++) { SER = dat >> 7; dat <<= 1; SRCLK = 0; _nop_(); _nop_(); SRCLK = 1; } RRCLK = 0; _nop_(); _nop_(); RRCLK = 1; } void main() { u8 i; while (1) { for(i = 0; i < 8; i++) { Hc595SendByte(ledwei[i]); LED1(ledwei[i]); delay(10); } } }
3 、爱心
#include "reg51.h" #include "intrins.h" typedef unsigned int u16; typedef unsigned char u8; u8 led_y[] = {0X38, 0X7C, 0X7E, 0X3F, 0X3F, 0X7E, 0X7C, 0X38}; u8 led_x[] = {0X7F, 0XBF, 0XDF, 0XEF, 0XF7, 0XFB, 0XFD, 0XFE}; sbit SRCLK=P3^6; sbit RRCLK=P3^5; sbit SER=P3^4; void delay(u16 i) { while(i--); } void LED1(u8 dat1) { P0 = dat1; } void Hc595SendByte(u8 dat) { u8 a; SRCLK = 1; RRCLK = 1; for(a = 0; a < 8; a++) { SER = dat >> 7; dat <<= 1; SRCLK = 0; _nop_(); _nop_(); SRCLK = 1; } RRCLK = 0; _nop_(); _nop_(); RRCLK = 1; } void main() { u8 i; while (1) { for(i = 0; i < 8; i++) { Hc595SendByte(led_y[i]); LED1(led_x[i]); delay(100); Hc595SendByte(0X00); } } }