
送往595的,不宜直接用时间的数据。
应该用一个显示缓冲数组,把时间先送到数组,再送到595。
想要显示黑屏,就把黑屏的代码,送到数组。
间隔05秒,把时间数据和黑屏代码,轮流送到数组,再送到595,即可看到闪烁的效果。
这是16X16的,自己一改就好了
//74HC595练习程序
//串入并出实现16流水灯效果
//20091228
#include"reg52h"
sbit shcp=P2^0; //数据在上升沿进入移位寄存器
sbit date1=P2^1; //串行数据输入端
sbit clock=P2^2; //上升沿时将数据输出到并行端口
unsigned char tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char tab1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(unsigned int delay)
{
unsigned char i;
for(;delay>0;delay--)
for(i=0;i<125;i++);
}
void send_data(unsigned char date) //发送数据
{
unsigned char i;
for(i=0;i<8;i++) //把每一位数据移入寄存器
{
shcp=0;
date=date<<1;
date1=CY;
shcp=1;
delay(20);
}
}
void main()
{
unsigned char k;
for(k=0;k<16;k++)
{
send_data(tab[k]);
send_data(tab1[k]);
{clock=0;clock=1;};
}
}
74HC595有4个端口很重要:串行输入端、时钟输入端、使能端和串行输出端。如果要级联,那么就是上一级的输出端接下一级的输入端,时钟和使能端分别共用。这样就可以多个级联在一起了。那么点阵显示就是8个位的数据端+n个公共端。如果是两个74HC595级联就是8×8点阵,如果是3个级联就可以是8×16点阵,也就是说一个74HC595做数据端,其他74HC595做公共端控制。然后就是点阵显示,可以串行输出数据接着再串行输出公共端控制(具体看点阵的接法),关键是先数据和公共端都输出后再做使能控制,这样就可以防止串行动作时出现显影。
CHKDAT BIT P30
CHKCLKO BIT P31
CHKSCO BIT P32
DAT1 EQU 50H ; 数据1
DAT2 EQU 51H ; 数据2
DA0: MOV A, DAT1
ACALL HC59500 ; 8位移位输出1
MOV A, DAT2
ACALL HC59500 ; 8位移位输出2
CLR CHKSCO ; 锁存器输出控制
SETB CHKSCO
--------
RET
HC59500: MOV R2, #08H ; 8位移位输出
HC59502: RRC A
MOV CHKDAT, C
CLR CHKCLKO
SETB CHKCLKO
DJNZ R2, HC59502
RET
4块8X8点阵刚好合成16X16点阵,横向两块,纵向两块,横向拼接时列独立,而行对行与前面一块并联,纵向拼接时行独立,而列对列与上面一块并联。直得注意的是你要先测出那些脚是行,那些是列,当然也可以下载对应点阵的datasheet对引脚,拼接好就是16行X16列了,然后两个595驱动列,两个595驱动行就行了
以上就是关于595静态驱动数码管显示时钟,按键让待调整的位闪烁,请教闪烁程序怎么写下面给出一段程序,空白处待问!全部的内容,包括:595静态驱动数码管显示时钟,按键让待调整的位闪烁,请教闪烁程序怎么写下面给出一段程序,空白处待问!、求51单片机驱动16X64点阵,行列用74HC595芯片驱动的程序、51 单片机 74HC595 级联 点阵是怎样实现的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)