搜索
bottom↓
回复: 11

求助关于TM1620的驱动程序

[复制链接]

出0入0汤圆

发表于 2014-1-10 01:25:43 | 显示全部楼层 |阅读模式
想用1620做一个数码管显示,测试自动地址加1方式正常,测试固定地址模式怎么都通不过,表现为永远都是第一位显示为最后一位的数据,其它位的全部是乱的。附程序如下:


#include<reg52.h>
#define uchar unsigned char

uchar a[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};            

sbit STB=P1^3;        //定义端口
sbit CLK=P1^2;
sbit DIN=P1^0;

void indate(unsigned char p)
{
        unsigned int i;
        STB=0;

        for(i=8;i>0;i--)
        {
                CLK=0;
                if((p&0x01)!=0)
        {
                        DIN=1;
                }
                else
                {
                        DIN=0;
                }
                CLK=1;
                p=p>>1;
                }
}

void display()
{
        DIN=1;
        CLK=1;
        STB=1;        //初始化
        indate(0x44); //固定地址方式
        STB=1;
        indate(0xc0); //传地址
        indate(a[0]); //传数据        
        indate(0xc1); //传地址
        indate(a[1]); //传数据
        indate(0xc2); //传地址
        indate(a[2]); //传数据
        indate(0xc3); //传地址
        indate(a[3]); //传数据
        indate(0xc4); //传地址
        indate(a[4]); //传数据
        indate(0xc5); //传地址
        indate(a[5]); //传数据 第一位永远都是显示这里的数据
        STB=1;
        indate(0x8f); //显示控制命令
        STB=1;
}

void main(void)
{   
        DIN=1;
        CLK=1;
        STB=1;
        indate(0x00);//设置显示模式
        STB=1;       
        display();   //传送地址数据
        while(1);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2014-1-10 03:59:15 | 显示全部楼层
没用过这个芯片,只用过TM1638,看起来比这个简单的多。。。

出0入0汤圆

 楼主| 发表于 2014-1-10 11:52:27 | 显示全部楼层
继续求助啊,哪位高手知道,帮忙一下,谢谢!

出0入0汤圆

发表于 2014-1-10 17:02:39 | 显示全部楼层
本帖最后由 lmt50211 于 2014-1-10 17:04 编辑
imfv 发表于 2014-1-10 11:52
继续求助啊,哪位高手知道,帮忙一下,谢谢!


楼主,显存地址错了。   上面写得很清楚,地址是00H,02H,04H,06H,08H,0AH;而你是从00H--05H;
void tm_display()//写多字节数据
{
    uchar i;
    tm_clk=1;
    tm_dio=1;
    tm_stb=1;
    send_data(0x44);//写数据
   tm_stb=1;
    for(i=0;i<6;i++)
    {
        send_data(0xc0+(i*2));//写地址
        send_data(disbuf);//写数据到显存
        tm_stb=1;
    }
    send_data(0x8f);//开显示,亮度为16/16
    tm_stb=1;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-1-10 17:20:59 | 显示全部楼层
lmt50211 发表于 2014-1-10 17:02
楼主,显存地址错了。   上面写得很清楚,地址是00H,02H,04H,06H,08H,0AH;而你是从00H--05H;
void tm_di ...

是不是地址分别为:0xc0,0xc2,0xc4,0xc6,0xc8,0xca?

出0入0汤圆

 楼主| 发表于 2014-1-10 17:33:20 | 显示全部楼层
lmt50211 发表于 2014-1-10 17:02
楼主,显存地址错了。   上面写得很清楚,地址是00H,02H,04H,06H,08H,0AH;而你是从00H--05H;
void tm_di ...

按照你所说的方法,现在只改了程序里的这部分,现在能够正常显示前4位,后两位不能显示。
void display()
{
        DIN=1;
        CLK=1;
        STB=1; //初始化      
        indate(0x44); //固定地址方式
        STB=1;
        indate(0xc0); //传地址
        indate(a[0]); //传数据
        STB=1;                
        indate(0xc2); //传地址
        indate(a[1]); //传数据
        STB=1;
        indate(0xc4); //传地址
        indate(a[2]); //传数据
        STB=1;          
        indate(0xc6); //传地址
        indate(a[3]); //传数据
        STB=1;
        indate(0xc8); //传地址
        indate(a[4]); //传数据 这位不能显示
        STB=1;
        indate(0xca); //传地址
        indate(a[5]); //传数据 这位不能显示
        STB=1;
        indate(0x8f); //显示控制命令
        STB=1;
}

出0入0汤圆

 楼主| 发表于 2014-1-10 17:37:59 | 显示全部楼层
试了一下,把显示模式改为0x02后都显示出来了,为什么?

出0入0汤圆

 楼主| 发表于 2014-1-10 21:20:51 | 显示全部楼层
终于搞定了,上传全部代码,供其他人参考,程序写的不好,还请高手指教。
/************************************************************

测试环境:STC12C5A16S2  晶振:12M

************************************************************/

#include<reg52.h>
#define uchar unsigned char
uchar a[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};            

sbit STB=P1^3;        //定义端口
sbit CLK=P1^2;
sbit DIN=P1^0;

void indate(unsigned char p)
{
        unsigned int i;
        STB=0;
        for(i=0;i<8;i++)
        {
                CLK=0;
                if((p&0x01)!=0)
        {
                        DIN=1;
                }
                else
                {
                        DIN=0;
                }
                CLK=1;
                p=p>>1;
                }
}

void display()
{
        DIN=1;
        CLK=1;
        STB=1; //初始化      
        indate(0x44); //固定地址方式
        STB=1;
        indate(0xc0); //传第一位地址
        indate(a[0]); //传第一位数据
        STB=1;                
        indate(0xc2); //传第二位地址
        indate(a[1]); //传第二位数据
        STB=1;
        indate(0xc4); //传第三位地址
        indate(a[2]); //传第三位数据
        STB=1;          
        indate(0xc6); //传第四位地址
        indate(a[3]); //传第四位数据
        STB=1;
        indate(0xc8); //传第五位地址
        indate(a[4]); //传第五位数据
        STB=1;
        indate(0xca); //传第六位地址
        indate(a[5]); //传第六位数据
        STB=1;
        indate(0x8f); //传显示控制命令
        STB=1;
}

void main(void)
{   
        DIN=1;
        CLK=1;
        STB=1;
        indate(0x02);//设置显示模式
        STB=1;       
        display();   //传送地址和数据
        while(1);
}

出0入4汤圆

发表于 2014-2-12 23:26:25 | 显示全部楼层
谢谢啦,正在调试tm1668程序,可以参考LZ的代码

出0入0汤圆

发表于 2014-4-17 13:43:50 | 显示全部楼层
在这里记一下!能用的着!

出0入0汤圆

发表于 2019-1-14 19:28:15 | 显示全部楼层
非常不错

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-28 22:54

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

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