用74LS164减少7段数码管占用的IO(MEGA8)
74LS 164是移位寄存器,实现串行转并行,CLK和DATA(Ahe和B接到一起)线,代替8根数据线接到4位数码管,扫描显示。写的时候考虑了移植,便于大家使用。 点击此处下载armok01168222.rar 兄弟串红怎么解决啊 用595会更好,两片可以直接驱动8位0.5'数码管,亮度也不错,164会在移位时有关不灭的现象,需要处理一下才有好效果 什么是串红,是没有消影的结果吗?,这种方法的确亮度还不怎么高 确实是用595比较好,就是多了一条线。 164输出都不用加电阻吗?会不会热啊?8段的电流一起进CPU,会不会有问题啊? 谢谢,正学习中 呀呀 你们怎么都不用SD1628 方便极了 用CD4094不会闪,不用电阻,可惜亮度不高 1628我已经大量用在产品上面 暗亮度8级调节 发一小段SM1628代码:/*******************************************************************
函数描述:写入一个字节到SM1628
函数原型: void wbyte_1628()
*******************************************************************/
write_1628(uchar data)
{
uchar k;
STB=0;
nop;
for(k=8;k>0;k--)
{
CLK=0;
if(data&0x01)
DIO=1;
else
DIO=0;
nop;nop;
CLK=1;
data=data>>1;
}
}
/*******************************************************************
函数描述:读取SM1628
函数原型: void read_1628()
*******************************************************************/
read_1628()
{
uchar k,data;
STB=0;
TRISB=0b00000001;
nop;nop;
for(k=8;k>1;k--) //for(k=8;k>0;k--)陷入
{
CLK=0;
nop;nop;nop;
if(DIO)
data=data|0x80;
else
data=data&0x7f;
data=data>>1;
CLK=1;
nop;nop;nop;nop;nop;nop;
}
nop;nop;nop;nop;
TRISB=0x00;
return(data);
}
/*******************************************************************
数码管显示函数
函数原型: void display();
Function: displayprogame
*******************************************************************/
display(uint data)
{
uchar BCD;
BCD=0;
BCD=0;
BCD=0;
BCD=0;
///////////////////
while(data>=1000)
{
data=data-1000;
BCD++;
}
while(data>=100)
{
data=data-100;
BCD++;
}
while(data>=10)
{
data=data-10;
BCD++;
}
BCD=data;
///////////////////
LED4=table];
LED3=table];
LED2=table];
LED1=table];
//===========================
// 设置显示模式
//===========================
write_1628(0b00000011); //7位,10段
STB=1;
nop;nop;nop;nop;
//===========================
// 设置数据
//===========================
write_1628(0b01000000);
STB=1;
nop;nop;nop;nop;
//===========================
// 设置地址
//===========================
write_1628(0b11000000);
//===========================
// 传输显示数据
//===========================
write_1628(LED4);//第四位数码管
write_1628(0xff);//
write_1628(LED1);//第一位数码管
write_1628(0xff);//
write_1628(LED2);//第二位数码管
write_1628(0xff);//
write_1628(LED3);//第三位数码管
write_1628(0xff);
write_1628(LED5);//LED灯
STB=1;
nop;nop;nop;nop;
//===========================
// 控制显示
//===========================
if(!flag)
write_1628(0b10001011);//后3位亮度调节
else
write_1628(0b10000000);//关显示
//write_1628(0b10001011);//后3位亮度调节
STB=1;
}
/******************************************************************* 贵兄发的不是林夕依然的例子吗? 谢了!!! 164 数码管,很经典的组合。
页:
[1]