74LS164是串入并出转换芯片,可以借助串口来实现,也可以用普通IO口模拟实现。举例如下:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}
sbit keyup=P3^6
sbit keydn=P3^7
void delay()
{
int i=1000
while(i--)
}
main()
{
uchar i
i=0
SCON=0x00
TI=1
while(1)
{
SBUF=table[i]
while(TI==0)
TI=0
delay()
if(keyup==0)
{
i++
while(keyup==0)
}
if(keydn==0)
{
if(i>0)i--
while(keydn==0)
}
i%=10
}
}
CLR不用接的可以用串行工作方式0(8位同步输出)
你这显示就用该用动态扫描了,点亮一个数字延时后点亮两一个数字
你第二个图好像不大好用,用一个164足够了,用P1.6P1.7选一下点亮那个管足矣,不用再加两个164的,浪费。
串行口发送8位数据低位在前。
如果164接受数据每一位是从Q7进入的话,可以解释,P3.0给数据D0,时钟有效,数据进入第一片Q7,由于两片同一时钟,而Q7为第二片输入,所以第二片也获得P3.0数据,P3.0给数据D1,D0进入Q6,D1进入Q7 ...
如果164接收数据每一位是从Q0进入的话,我就解释不通了。
我在找找相关资料,你也找找,确定一下164接收的第一位先出现在哪一位。
又看了一下,164接收数据第一位先出现在Q0,然后顺序后移,所以图二中两片164不能同时接收数据,只有给16个脉冲,先发送的8位数据进入第二片,后发送的8位数据进入第一片。
例如你想在第一片显示3,二片显示4,则mov sbuf,#(4段码数据),再mov sbuf,#(3段码数据)。!注意sbuf中的高位将被送入Q0中,即高低位反了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)