标题:
51单片机驱动16x64点阵的问题希望各位朋友帮我解答一下
[打印本页]
作者:
YZYNULL
时间:
2020-11-3 18:36
标题:
51单片机驱动16x64点阵的问题希望各位朋友帮我解答一下
我这个程序只要加入一些延时比如_nop_和for(i=10;i>0;i--)就会造成点阵的闪烁原因不知采用16个74HC595进行驱动
还有我想加入左移功能怎么实现?希望各位帮帮小白我
本程序使用keil4编译,仿真为protues8.6
单片机程序和仿真都在我的附件里方便查看,谢谢各位了(^v^)
16x64点阵.rar
(142.86 KB, 下载次数: 13)
2020-11-3 18:22 上传
点击文件名下载附件
源代码加仿真
/*----------------------------------------------------------------------------------*/
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uhar unsigned char
sbit HC595_SH=P2^0; //数据锁存端
sbit HC595_DS=P2^1; //数据输出端
sbit HC595_ST=P2^2 ;//并行输出端
uhar Mould[8]; //位寄存
uhar Upright[8]; //段寄存
uint code LED[4][32]= //4字数组
{{
0x20,0x18,0x0A,0xAA,0xAA,0xAA,0x0A,0xFE,0x0A,0xAA,0xAA,0xAA,0x0A,0x28,0x18,0x00,
0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
},
{
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x85,0x14,0x0C,0x00,
0x00,0x91,0xA9,0x4D,0xAB,0x99,0xA0,0xAA,0xAA,0xAA,0xBF,0xA9,0xA9,0xA9,0xA0,0x00,
},
{
0x00,0xFC,0x04,0x04,0xFC,0x01,0xFD,0x55,0x57,0x55,0x55,0x55,0xFD,0x01,0x00,0x00,
0x00,0x0F,0x04,0x04,0x8F,0x88,0x89,0x4F,0x59,0x25,0x65,0x57,0x85,0x84,0xE0,0x00,
},
{
0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,
0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x40,0x78,0x00,
}
};
/*----------------------------------------------------------------------------------*/
void HC595_write() //数据输出
{
uhar i,j;
HC595_SH=1;
HC595_DS=1;
HC595_ST=1;
for(j=4;j>0;j--)
{
for(i=0;i<8;i++)
{
HC595_SH=0;
HC595_DS=Mould[j*2-2]&0x80;
Mould[j*2-2]<<=1;
HC595_SH=1;
}
for(i=0;i<8;i++)
{
HC595_SH=0;
HC595_DS=Mould[j*2-1]&0x80;
Mould[j*2-1]<<=1;
HC595_SH=1;
}
for(i=0;i<8;i++)
{
HC595_SH=0;
HC595_DS=Upright[j*2-1]&0x80;
Upright[j*2-1]<<=1;
HC595_SH=1;
}
for(i=0;i<8;i++)
{
HC595_SH=0;
HC595_DS=Upright[j*2-2]&0x80;
Upright[j*2-2]<<=1;
HC595_SH=1;
}
}
HC595_ST=0;
HC595_ST=1;
}
/*----------------------------------------------------------------------------------*/
void LED_DISPLAY() //选择数据
{
static uint i;
static uint k=0x0001;
Mould[6]=~k/256;
Mould[7]=~k%256;
Upright[6]=LED[3][ i];[ i]
Upright[7]=LED[3][i+16];
Mould[4]=~k/256;
Mould[5]=~k%256;
Upright[4]=LED[2][ i];[ i]
Upright[5]=LED[2][i+16];
Mould[2]=~k/256;
Mould[3]=~k%256;
Upright[2]=LED[1][ i];[ i]
Upright[3]=LED[1][i+16];
Mould[0]=~k/256;
Mould[1]=~k%256;
Upright[0]=LED[0][ i];[ i]
Upright[1]=LED[0][i+16];
k=_irol_(k,1);
HC595_write();
i++;
if(i==16)
{
i=0;
}
}
/*----------------------------------------------------------------------------------*/
void main()
{
while(1)
{
while(1)
{
LED_DISPLAY();
}
}
}
/*----------------------------------------------------------------------------------*/
复制代码
屏幕截图(59).png
(159.87 KB, 下载次数: 82)
下载附件
2020-11-3 19:00 上传
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1