//芯片1
sbit TM_DAT1 = P0^7; //数据
sbit TM_CLK1 = P0^6; //时钟
//芯片2
sbit TM_DAT2 = P1^1; //数据
sbit TM_CLK2 = P0^0; //时钟
//芯片3
sbit TM_DAT3 = P0^4; //数据
sbit TM_CLK3 = P0^3; //时钟
//芯片4
sbit TM_DAT4 = P1^4; //数据
sbit TM_CLK4 = P1^3; //时钟#define   TM1640_DELAY            0               /* 640ns    *//*段码    7 6 5 4 3 2 1 0数字0   1 1 1 1 1 0 1 0  ==0xFA数字1   0 0 1 0 0 0 1 0  ==0x22数字2   1 0 1 1 1 0 0 1  ==0xB9数字3   1 0 1 0 1 0 1 1  ==0xAB数字4   0 1 1 0 0 0 1 1  ==0x63数字5   1 1 0 0 1 0 1 1  ==0xCB数字6   1 1 0 1 1 0 1 1  ==0xDB数字7   1 0 1 0 0 0 1 0  ==0xA2数字8   1 1 1 1 1 0 1 1  ==0xFB数字9   1 1 1 0 0 0 1 1  ==0xE3
*/
const u8 SegNumTable[11]={0xFA,0x22,0xB9,0xAB,0x63,0xCB,0xDB,0xA2,0xFB,0xE3,0x00};//数字编码(0~9)+关闭显示
static const u8 SegAddr[14]={5,4,3,2,1,0,10,9,8,11,7,6,13,12}; //顺序地址(0~13位)//初始化
static volatile u8 SegDisDat[4][16]={
0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,
0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,
0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,
0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,
};//CLK输出
static void TM1640_CLK(u8 select,u8 dat)
{if(select==0){      TM_CLK1 = dat?1:0;}else if(select==1){TM_CLK2 = dat?1:0;}else if(select==2){TM_CLK3 = dat?1:0;}else if(select==3){TM_CLK4 = dat?1:0;}
}
//DAT输出
static void TM1640_Dat(u8 select,u8 dat)
{if(select==0){      TM_DAT1 = dat?1:0;}else if(select==1){TM_DAT2 = dat?1:0;}else if(select==2){TM_DAT3 = dat?1:0;}else if(select==3){TM_DAT4 = dat?1:0;}
}void TM1640_Init(void)
{u8 i = 0;for ( i = 0; i < 4; i++){TM1640_CLK(i,1);TM1640_Dat(i,1);}P07_PushPull_Mode;P06_PushPull_Mode;P00_PushPull_Mode;P11_PushPull_Mode;P04_PushPull_Mode;P03_PushPull_Mode;P13_PushPull_Mode;P14_PushPull_Mode;
}//开始信号
static void TM1640_Start(u8 select)
{u16 i =0;TM1640_CLK(select,1);for (i = 0; i < TM1640_DELAY; i++){};TM1640_Dat(select,1);for (i = 0; i < TM1640_DELAY; i++){};TM1640_Dat(select,0);for (i = 0; i < TM1640_DELAY; i++){};
}
//结束信号
static void TM1640_Stop(u8 select)
{u16 i = 0;TM1640_CLK(select,0);for (i = 0; i < TM1640_DELAY; i++){};TM1640_Dat(select,0);for (i = 0; i < TM1640_DELAY; i++){};TM1640_CLK(select,1);for (i = 0; i < TM1640_DELAY; i++){};TM1640_Dat(select,1);
}
//发送一字节数据
static void TM1640_SendByte(u8 select,u8 dat)
{u8 n = 0;u16 i = 0;for (n = 0; n < 8; n++){TM1640_CLK(select,0);for (i = 0; i < TM1640_DELAY; i++){};TM1640_Dat(select,dat&0x01);for (i = 0; i < TM1640_DELAY; i++){};TM1640_CLK(select,1);dat>>=1;for (i = 0; i < TM1640_DELAY; i++){};}
}//数据命令模式枚举typedef enum TM1640_Mode{Mode_Fixed=0,Mode_Auto,}TM_ModeENUM;//数据命令1
static void TM1640_Command1(u8 select,TM_ModeENUM mode)
{if(mode>1)mode=1;TM1640_Start(select);TM1640_SendByte(select,0x40|(mode<<2));// 地址模式,固定/自动加一TM1640_Stop(select);
}
//地址命令2
static void TM1640_Command2(u8 select,u8 startAddr,u8*dat,u8 len)
{u8 i = 0;startAddr &=0x0F;TM1640_Start(select);TM1640_SendByte(select,0xC0|startAddr);// 地址位置(0~16)for ( i = 0; i < len; i++){TM1640_SendByte(select,dat[i]); //显示数据}TM1640_Stop(select);
}
//显示控制命令3
static void TM1640_Command3(u8 select,u8 lightLevel,u8 Switch)
{lightLevel &=0x07 ;if(Switch)Switch=1;TM1640_Start(select);TM1640_SendByte(select,0x80|(Switch<<3)|lightLevel);// 亮度(0~7)+开关(0/1)TM1640_Stop(select);
}//地址自动加一
// 数据命令+ (设置地址+显示数据+显示数据+ .... + 显示数据) + 控制显示void TM1640_AutoMode(u8 select,u8 startAddr,u8 *dat,u8 len)
{TM1640_Command1(select,Mode_Auto);         //数据命令-->地址自动加一TM1640_Command2(select,startAddr,dat,len); //显示的数据TM1640_Command3(select,LightLevel  ,1);    //显示亮度+开关
}//固定地址写数据
// 设置数据+ (设置地址+显示数据)+(设置地址+显示数据)+ .... +(设置地址+显示数据) + 控制显示
void TM1640_FixedMode(u8 select,u8 startAddr,u8 dat)
{TM1640_Command1(select,Mode_Auto);         //数据命令-->地址自动加一TM1640_Command2(select,startAddr,&dat,1);  //显示的数据TM1640_Command3(select,LightLevel,1);      //显示亮度+开关
}/*
使用Demo
================================
TM1640_AutoMode(0,0,SegDisDat[0],16); //整个芯片更新
TM1640_AutoMode(1,0,SegDisDat[1],16);
TM1640_AutoMode(2,0,SegDisDat[2],16);
TM1640_AutoMode(3,0,SegDisDat[3],16);TM1640_FixedMode(0,0,SegNumTable[0]); //芯片0,位0,显示数字0
*/

记录-使用TM1640 数码管驱动芯片相关推荐

  1. TM1650数码管驱动芯片

    简介 TM1650是一款国产4位共阴数码管驱动芯片,它还带有矩阵按键扫码功能.它的基本参数如下: 工作电压:3~5V 数码管驱动模式:8段x4位共阴数码管 矩阵按键驱动模式:7x4矩阵按键,不支持组合 ...

  2. tm1650中文资料_[STM8入门资料]第53讲 TM1650 LED数码管驱动芯片工作原理

    刘洋[剑齿虎]STM8开发板学习笔记 第53讲TM1650 LED数码管驱动芯片工作原理 目 录 53.1 特性描述 TM1650是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路.内部 ...

  3. LM1640数码管驱动芯片的使用方法

    目录 一.LM1640引脚说明 二.LM1640时序分析 三.LM1640指令分析 四.LM1620芯片驱动程序分析 1.LM1640的声明文件 2.LM1640读写数据的底层通信程序 3.LM164 ...

  4. 瑞萨开发记录03:数码管定时显示(R5F104FEA芯片)

    03.定时器闪烁lED灯 一.引脚配置 二.编写代码 1.r_cg_userdefine.h 2.r_cg_timer_user.h 3.r_main.c 三.烧录程序   上一篇博客记录了定时器的使 ...

  5. TM1650数码管驱动芯片驱动数码管读取按键程序

    折腾了四五个小时,官方给的datasheet有不少的问题,这里纠正一下按键读取时序错误: 读取的数据跟文档里面的数据提前了一位,在这里给大家提个醒! 下面贴上代码 c文件: #include &quo ...

  6. VK16K33是带键盘扫描的LED数显/数码管驱动芯片多种封装选择驱动电流大,适合高亮显示场合

    品牌:永嘉微电/VINKA 型号:VK16K33       封装形式:SOP28/24/20       年份:新年份 联 系 人:陈锐鸿 KPP1186          概述: VK16K33是 ...

  7. STM32学习记录——74HC595四位数码管显示

    数模管作为STM32的一个重要外设,由于其成本低.稳定,被用于许多场景中.本篇文章来介绍下四位数码管的使用方法. 数码管显示 一.数码管的分类 二.74HC595芯片(串入并出) 三.原理图 四.代码 ...

  8. 数字电路实验 02 - | 译码器及数码管驱动芯片应用

    一.实验目的和任务 掌握3 -8线译码器.4 -10线译码器的逻辑功能和使用方法. 掌握用两片3 -8线译码器连成4 -16线译码器的方法. 掌握使用74LS138实现逻辑函数和做数据分配器的方法. ...

  9. 数码管驱动芯片+语音芯片的应用场景介绍,WT588E02B-24SS

    WT588E语音芯片+数码管的应用场景介绍 前言: WT588E02B语音芯片是一款SPI通讯方式的语音芯片.最大的特点便是客户可以自行通过SPI协议,按照规定的数据更换流程发送语音数据,实现客户可以 ...

  10. LED数显驱动芯片,LED数码管驱动芯片VK1650,LED驱动控制IC,键盘扫描集成电路,内置RC震荡电路

    VINKA/永嘉微电LED显示屏驱动主要应用于以下: 1:VCR.VCD.DVD 及家庭影院等显示屏驱动. 2:电磁炉.微波炉.冰箱.空调 .家庭影院等高段位显示屏驱动. 3:LED显示屏驱动,电子秤 ...

最新文章

  1. vue 可合并表格组件_merge-table
  2. postgresql 删除触发器_PostgreSQL:我没有带闪,不讲武德
  3. Mac下显示隐藏文件
  4. Vue学习(组件的定义及调用、路由)-学习笔记
  5. 用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员
  6. RHEL5实现YUM本地源的配置
  7. 万有引力的意思_万有引力和引力有什么不同?四种基本性质力中电磁力最多
  8. Redis的常用JavaAPI(Jedis)实现
  9. 写好代码,拒绝一传到底的参数类
  10. 支持64位的打印服务器,使用环境打印服务器是32位,添加共享的计算机是64位
  11. 二次元始,跌宕几年,至学术略有成就并步入业界的我与NLP的这七年时光!
  12. 将list中的数据组成用逗号分隔的字符串
  13. 数据挖掘算法原理与实践:k-均值
  14. 科普贴:示波器的组成
  15. 前端页面--瀑布流布局的实现
  16. Windows记事本编码反汇编分析
  17. iOS 组件化/模块化架构设计实践
  18. granite crushers in german
  19. Bryntum Gantt 5.0 JS
  20. 针式打印机连续打印多走纸_针织打印机以及更多开放源代码的艺术品

热门文章

  1. 在n1 ,魔百盒q5盒子上,实现惠普p1008系列的网络共享 打印和airprint服务
  2. Odoo15企业邮箱配置与实现手机端回复亦可自动挂单
  3. 两台电脑怎么互传文件?用它就能搞定!
  4. nvivo服务器项目,【NVivo教程】在Nvivo中设置案例路线图
  5. mesh和wifi中继的区别_科普:路由器的无线中继和Mesh的区别是什么?
  6. NLPIR在线系统介绍
  7. 对计算机专业来说学历真的重要吗?
  8. 采用泰克示波器TBS2000和TCP0030A电流探头准确评估高速DCDC转换器电感的选择
  9. DirectX修复工具使用技巧之一——解除被占用的文件,完整修复C++
  10. kindle电子书去drm_如何将无DRM的电子书加载到Kindle