51单片机写74hc595 32×16点阵共阴led 分别定义p00,p01,p02,p10,p11,p12接口显示桃心
时间: 2023-06-25 14:02:50 浏览: 90
以下是51单片机控制74hc595驱动32×16点阵共阴led显示一个桃心的代码,其中P00~P02接74hc595的DSSHCP、STCP,P10~P1274hc595的OE、MR、1Q```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS = P0^0;
sbit SHCP = P0^1;
sbit STCP = P0^2;
sbit OE = P1^0;
sbit MR = P1^1;
sbit IQ = P1^2;
uchar code heart[32] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void delay(uint t)
{
uint i, j;
for(i=0; i<t; i++)
for(j=0; j<110; j++);
}
void send_byte(uchar dat)
{
uchar i;
for(i=0; i<8; i++)
{
SHCP = 0;
DS = dat & 0x80;
dat <<= 1;
SHCP = 1;
}
}
void send_data(uchar addr, uchar dat)
{
SHCP = 0;
STCP = 0;
send_byte(addr);
send_byte(dat);
STCP = 1;
}
void clear_display()
{
uchar i;
for(i=0; i<32; i++)
heart[i] = 0x00;
}
void write_display()
{
uchar i;
for(i=0; i<32; i++)
send_data(i+1, heart[i]);
}
void set_pixel(uchar x, uchar y)
{
uchar addr, dat;
if(x > 31 || y > 15)
return;
addr = x/8 + (y<<1);
dat = 0x80 >> (x%8);
heart[addr] |= dat;
}
void draw_heart()
{
clear_display();
set_pixel(10, 1);
set_pixel(11, 1);
set_pixel(12, 1);
set_pixel(13, 1);
set_pixel(14, 1);
set_pixel(15, 1);
set_pixel(16, 1);
set_pixel(17, 1);
set_pixel(18, 1);
set_pixel(19, 1);
set_pixel(20, 1);
set_pixel(21, 1);
set_pixel(22, 1);
set_pixel(23, 1);
set_pixel(24, 1);
set_pixel(25, 1);
set_pixel(26, 1);
set_pixel(27, 1);
set_pixel(28, 1);
set_pixel(29, 1);
set_pixel(30, 1);
set_pixel(9, 2);
set_pixel(10, 2);
set_pixel(11, 2);
set_pixel(12, 2);
set_pixel(13, 2);
set_pixel(14, 2);
set_pixel(15, 2);
set_pixel(16, 2);
set_pixel(17, 2);
set_pixel(18, 2);
set_pixel(19, 2);
set_pixel(20, 2);
set_pixel(21, 2);
set_pixel(22, 2);
set_pixel(23, 2);
set_pixel(24, 2);
set_pixel(25, 2);
set_pixel(26, 2);
set_pixel(27, 2);
set_pixel(28, 2);
set_pixel(29, 2);
set_pixel(8, 3);
set_pixel(9, 3);
set_pixel(10, 3);
set_pixel(11, 3);
set_pixel(12, 3);
set_pixel(13, 3);
set_pixel(14, 3);
set_pixel(15, 3);
set_pixel(16, 3);
set_pixel(17, 3);
set_pixel(18, 3);
set_pixel(19, 3);
set_pixel(20, 3);
set_pixel(21, 3);
set_pixel(22, 3);
set_pixel(23, 3);
set_pixel(24, 3);
set_pixel(25, 3);
set_pixel(26, 3);
set_pixel(7, 4);
set_pixel(8, 4);
set_pixel(9, 4);
set_pixel(10, 4);
set_pixel(11, 4);
set_pixel(12, 4);
set_pixel(13, 4);
set_pixel(14, 4);
set_pixel(15, 4);
set_pixel(16, 4);
set_pixel(17, 4);
set_pixel(18, 4);
set_pixel(19, 4);
set_pixel(20, 4);
set_pixel(21, 4);
set_pixel(22, 4);
set_pixel(23, 4);
set_pixel(24, 4);
set_pixel(6, 5);
set_pixel(7, 5);
set_pixel(8, 5);
set_pixel(9, 5);
set_pixel(10, 5);
set_pixel(11, 5);
set_pixel(12, 5);
set_pixel(13, 5);
set_pixel(14, 5);
set_pixel(15, 5);
set_pixel(16, 5);
set_pixel(17, 5);
set_pixel(18, 5);
set_pixel(19, 5);
set_pixel(20, 5);
set_pixel(21, 5);
set_pixel(22, 5);
set_pixel(5, 6);
set_pixel(6, 6);
set_pixel(7, 6);
set_pixel(8, 6);
set_pixel(9, 6);
set_pixel(10, 6);
set_pixel(11, 6);
set_pixel(12, 6);
set_pixel(13, 6);
set_pixel(14, 6);
set_pixel(15, 6);
set_pixel(16, 6);
set_pixel(17, 6);
set_pixel(18, 6);
set_pixel(19, 6);
set_pixel(4, 7);
set_pixel(5, 7);
set_pixel(6, 7);
set_pixel(7, 7);
set_pixel(8, 7);
set_pixel(9, 7);
set_pixel(10, 7);
set_pixel(11, 7);
set_pixel(12, 7);
set_pixel(13, 7);
set_pixel(14, 7);
set_pixel(15, 7);
set_pixel(16, 7);
set_pixel(17, 7);
set_pixel(3, 8);
set_pixel(4, 8);
set_pixel(5, 8);
set_pixel(6, 8);
set_pixel(7, 8);
set_pixel(8, 8);
set_pixel(9, 8);
set_pixel(10, 8);
set_pixel(11, 8);
set_pixel(12, 8);
set_pixel(13, 8);
set_pixel(14, 8);
set_pixel(15, 8);
set_pixel(2, 9);
set_pixel(3, 9);
set_pixel(4, 9);
set_pixel(5, 9);
set_pixel(6, 9);
set_pixel(7, 9);
set_pixel(8, 9);
set_pixel(9, 9);
set_pixel(10, 9);
set_pixel(11, 9);
set_pixel(12, 9);
set_pixel(13, 9);
set_pixel(1, 10);
set_pixel(2, 10);
set_pixel(3, 10);
set_pixel(4, 10);
set_pixel(5, 10);
set_pixel(6, 10);
set_pixel(7, 10);
set_pixel(8, 10);
set_pixel(9, 10);
set_pixel(10, 10);
set_pixel(11, 10);
set_pixel(0, 11);
set_pixel(1, 11);
set_pixel(2, 11);
set_pixel(3, 11);
set_pixel(4, 11);
set_pixel(5, 11);
set_pixel(6, 11);
set_pixel(7, 11);
set_pixel(8, 11);
set_pixel(9, 11);
set_pixel(10, 11);
set_pixel(1, 12);
set_pixel(2, 12);
set_pixel(3, 12);
set_pixel(4, 12);
set_pixel(5, 12);
set_pixel(6, 12);
set_pixel(7, 12);
set_pixel(8, 12);
set_pixel(9, 12);
set_pixel(10, 12);
set_pixel(0, 13);
set_pixel(1, 13);
set_pixel(2, 13);
set_pixel(3, 13);
set_pixel(4, 13);
set_pixel(5, 13);
set_pixel(6, 13);
set_pixel(7, 13);
set_pixel(8, 13);
set_pixel(9, 13);
set_pixel(10, 13);
set_pixel(1, 14);
set_pixel(2, 14);
set_pixel(3, 14);
set_pixel(4, 14);
set_pixel(5, 14);
set_pixel(6, 14);
set_pixel(7, 14);
set_pixel(8, 14);
set_pixel(9, 14);
set_pixel(10, 14);
set_pixel(2, 15);
set_pixel(3, 15);
set_pixel(4, 15);
set_pixel(5, 15);
set_pixel(6, 15);
set_pixel(7, 15);
set_pixel(8, 15);
set_pixel(9, 15);
set_pixel(10, 15);
write_display();
}
void main()
{
clear_display();
OE = 1;
MR = 1;
IQ = 0;
while(1)
{
draw_heart();
delay(1000);
}
}
```
其中,draw_heart()函数用于绘制桃心图案,set_pixel()函数用于设置某一点亮或熄灭。在main()函数中,先清空显示缓存,然后循环绘制桃心并延时1秒钟。注意要先将OE、MR、1Q口拉高,否则会出现闪烁问题。
阅读全文