搜索
bottom↓
回复: 14

用74LS164减少7段数码管占用的IO(MEGA8)

[复制链接]

出0入0汤圆

发表于 2007-8-25 22:32:52 | 显示全部楼层 |阅读模式
74LS 164是移位寄存器,实现串行转并行,CLK和DATA(Ahe和B接到一起)线,代替8根数据线接到4位数码管,扫描显示。写的时候考虑了移植,便于大家使用。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2007-8-25 22:33:26 | 显示全部楼层
点击此处下载armok01168222.rar

出0入0汤圆

发表于 2007-8-25 22:43:23 | 显示全部楼层
兄弟串红怎么解决啊

出0入0汤圆

发表于 2007-8-26 07:25:56 | 显示全部楼层
用595会更好,两片可以直接驱动8位0.5'数码管,亮度也不错,164会在移位时有关不灭的现象,需要处理一下才有好效果

出0入0汤圆

 楼主| 发表于 2007-8-27 11:42:31 | 显示全部楼层
什么是串红,是没有消影的结果吗?,这种方法的确亮度还不怎么高

出0入0汤圆

发表于 2007-8-27 12:21:06 | 显示全部楼层
确实是用595比较好,就是多了一条线。

出0入0汤圆

发表于 2007-8-27 12:42:23 | 显示全部楼层
164输出都不用加电阻吗?会不会热啊?8段的电流一起进CPU,会不会有问题啊?

出0入0汤圆

发表于 2008-3-8 09:24:45 | 显示全部楼层
谢谢,正学习中

出0入0汤圆

发表于 2008-3-8 09:36:31 | 显示全部楼层
呀呀 你们怎么都不用SD1628 方便极了

出0入0汤圆

发表于 2008-3-8 09:40:53 | 显示全部楼层
用CD4094不会闪,不用电阻,可惜亮度不高

出0入0汤圆

发表于 2008-3-8 09:45:02 | 显示全部楼层
1628我已经大量用在产品上面 暗亮度8级调节

出0入0汤圆

发表于 2008-3-8 09:50:01 | 显示全部楼层
发一小段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: display  progame
*******************************************************************/
display(uint        data)
{
        uchar        BCD[4];
        BCD[0]=0;
        BCD[1]=0;
        BCD[2]=0;
        BCD[3]=0;
        ///////////////////
        while(data>=1000)
                {
                        data=data-1000;
                        BCD[3]++;
                }
        while(data>=100)
                {
                        data=data-100;
                        BCD[2]++;
                }       
        while(data>=10)
                {
                        data=data-10;
                        BCD[1]++;
                }
        BCD[0]=data;
        ///////////////////
        LED4=table[BCD[0]];
        LED3=table[BCD[1]];
        LED2=table[BCD[2]];
        LED1=table[BCD[3]];
        //===========================
        //                设置显示模式
        //===========================
        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;
}
/*******************************************************************

出0入0汤圆

发表于 2009-12-14 23:17:05 | 显示全部楼层
贵兄发的不是林夕依然的例子吗?

出0入0汤圆

发表于 2013-4-30 20:24:01 | 显示全部楼层
谢了!!!

出0入0汤圆

发表于 2013-4-30 22:10:56 来自手机 | 显示全部楼层
164 数码管,很经典的组合。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表