OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10271|回复: 6

STM8S驱动TM1640代码

[复制链接]

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1835
金钱
1835
注册时间
2014-12-4
在线时间
717 小时
发表于 2016-6-4 15:28:48 | 显示全部楼层 |阅读模式
TM1640驱动8段16位数码管很好用,贴一个已经调试好的代码供大家参考
[mw_shl_code=c,true]/********************  (C) COPYRIGHT****************************
* File Name          : TM1640.c
* Author             :
* Version            : V1.0
* Date               : 2016
* Description        : LED 数码管 驱动函数
****************************************************************/
#include "TM1640.h"
#include "Application.h"

//*************************************************************
//*********START***********************************************
static void TmStart()                  //1640开始
{
        //TMSCLK(0);
        TMDIN(1);
        nop();
        nop();
                nop();
        nop();
        TMSCLK(1);       
        nop();
        nop();
                nop();
        nop();
        TMDIN(0);
        nop();
        nop();
                nop();
        nop();
        TMSCLK(0);
        nop();
        nop();
                nop();
        nop();
}
//**************************************************************
static void TmStop()                         //1640结束
{
        TMSCLK(0);
        nop();
        nop();
                nop();
        nop();
        TMDIN(0);
        TMSCLK(1);
        nop();
        nop();
                nop();
        nop();
        TMDIN(1);
        nop();
        nop();
                nop();
        nop();
        TMSCLK(1);
        nop();
        nop();       
        nop();
                nop();
        nop();
}
//***********************************************************
static void TmWrite(u8 date)                  //1640写字节
{
        u8 i,aa;
        aa=date;
        //TMDIN(0);
        //TMSCLK(0);
        for(i=0;i<8;i++)
        {         
                TMSCLK(0);
                if(aa&0x01)               
                {
                        TMDIN(1);
                        nop();
                        nop();
                                nop();
                        nop();
                }
                else
                {
                        TMDIN(0);
                        nop();
                        nop();
                                nop();
                        nop();
                }
                TMSCLK(1);
                nop();
                        nop();
                nop();
                aa=aa>>1;
        }
        //TMSCLK(0);
        //TMDIN(0);                       
}

/*****************************************************************************************
Description : 向TM1640发送显示数据
*****************************************************************************************/
void SysTmSendAutoAddr(u8 startaddr, u8 endaddr, u8 *dat,u8 light ,bool state)                  
{
        u8 nCount;
        u8 value = 0;
        TmStart();
        //高四位数据类型        低四位是命令
        //设置数据,地址加1模式
        TmWrite(0x40 | 0x00);      
        TmStop();

        TmStart();
        //地址命令设置 高四位数据类型         低四位是显示地址
        TmWrite(0xC0 | startaddr);
        for(nCount=0;nCount <= endaddr - startaddr ;nCount++)
        {
                TmWrite(*dat);
                dat++;
        }      
        TmStop();

        TmStart();
        /*
        显示控制命令:
        MSB                                 LSB
        B7 B6 B5 B4 B3 B2 B1 B0        
        1 0        0 0         1 0 0 0         设置脉冲宽度为 1/16
        1 0 0 0         1 0 0 1         设置脉冲宽度为 2/16
        1 0 0 0         1 0 1 0         设置脉冲宽度为 4/16
        1 0 0 0         1 0 1 1         设置脉冲宽度为 10/16
        1 0 0 0         1 1 0 0         设置脉冲宽度为 11/16
        1 0 0 0         1 1 0 1         设置脉冲宽度为 12/16
        1 0 0 0         1 1 1 0         设置脉冲宽度为 13/16
        1 0 0 0         1 1 1 1         设置脉冲宽度为 14/16
        1 0 0 0         0 X X X                显示开关设置   显示关
        1 0 0 0         1 X X X         显示开关设置   显示开
        */
        //显示控制 高4位命令  低4位B3-B0 B3控制亮灭,B2-B0设置亮度
        LIMIT(0,light,7);
        if(state == TRUE )
        {
                value =0x80 | light | 0x08;
        }
        else
        {
                value =0x80 | light ;
                value = value & (~0x08);//关闭显示
        }
        TmWrite(value);       //控制显示,开显示,脉冲宽度为14/16
        TmStop();
                  
}  

/*****************************************************************************************
Description : 向TM1640发送显示数据设置显示地址
*****************************************************************************************/

void SysTmSendSetAddr(u8 addr, u8 dat, u8 light, bool state)   
{
        //u8 nCount;
        u8 value;
        TmStart();
        //高四位数据类型        低四位是命令
        //设置数据,地址固定
        TmWrite(0x40 | 0x04);      
        TmStop();

        TmStart();
        //地址命令设置 高四位数据类型         低四位是显示地址
        LIMIT(0,addr,11);
        TmWrite(0xC0 | addr);
        TmWrite(dat);     
        TmStop();

        TmStart();
        /*
        显示控制命令:
        MSB                                 LSB
        B7 B6 B5 B4 B3 B2 B1 B0        
        1 0        0 0         1 0 0 0         设置脉冲宽度为 1/16
        1 0 0 0         1 0 0 1         设置脉冲宽度为 2/16
        1 0 0 0         1 0 1 0         设置脉冲宽度为 4/16
        1 0 0 0         1 0 1 1         设置脉冲宽度为 10/16
        1 0 0 0         1 1 0 0         设置脉冲宽度为 11/16
        1 0 0 0         1 1 0 1         设置脉冲宽度为 12/16
        1 0 0 0         1 1 1 0         设置脉冲宽度为 13/16
        1 0 0 0         1 1 1 1         设置脉冲宽度为 14/16
        1 0 0 0         0 X X X                显示开关设置   显示关
        1 0 0 0         1 X X X         显示开关设置   显示开
        */
        //显示控制 高4位命令  低4位B3-B0 B3控制开关,B2-B0设置亮度
        LIMIT(0,light,7);
        if(state == TRUE )
        {
                value =0x80 | light | 0x08;
        }
        else
        {
                value =0x80 | light ;
                value = value & (~0x08);//关闭显示
        }
        TmWrite(value);       //控制显示,开显示,脉冲宽度为14/16
        TmStop();
}[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2012-6-27
在线时间
69 小时
发表于 2019-6-13 16:54:31 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-8-14
在线时间
0 小时
发表于 2019-8-14 11:07:15 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

131

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2019-7-1
在线时间
6 小时
发表于 2019-8-16 13:43:52 | 显示全部楼层
谢谢楼主分享
IIS7站长  http://www.iis7.com/
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2017-11-28
在线时间
5 小时
发表于 2019-8-26 13:13:16 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-9-21
在线时间
9 小时
发表于 2019-11-11 20:38:56 | 显示全部楼层
感谢分享,感谢分享
回复 支持 反对

使用道具 举报

0

主题

34

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5764
金钱
5764
注册时间
2016-2-26
在线时间
551 小时
发表于 2020-4-22 17:54:29 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 03:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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