记录-使用TM1640 数码管驱动芯片
//芯片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 数码管驱动芯片相关推荐
- TM1650数码管驱动芯片
简介 TM1650是一款国产4位共阴数码管驱动芯片,它还带有矩阵按键扫码功能.它的基本参数如下: 工作电压:3~5V 数码管驱动模式:8段x4位共阴数码管 矩阵按键驱动模式:7x4矩阵按键,不支持组合 ...
- tm1650中文资料_[STM8入门资料]第53讲 TM1650 LED数码管驱动芯片工作原理
刘洋[剑齿虎]STM8开发板学习笔记 第53讲TM1650 LED数码管驱动芯片工作原理 目 录 53.1 特性描述 TM1650是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路.内部 ...
- LM1640数码管驱动芯片的使用方法
目录 一.LM1640引脚说明 二.LM1640时序分析 三.LM1640指令分析 四.LM1620芯片驱动程序分析 1.LM1640的声明文件 2.LM1640读写数据的底层通信程序 3.LM164 ...
- 瑞萨开发记录03:数码管定时显示(R5F104FEA芯片)
03.定时器闪烁lED灯 一.引脚配置 二.编写代码 1.r_cg_userdefine.h 2.r_cg_timer_user.h 3.r_main.c 三.烧录程序 上一篇博客记录了定时器的使 ...
- TM1650数码管驱动芯片驱动数码管读取按键程序
折腾了四五个小时,官方给的datasheet有不少的问题,这里纠正一下按键读取时序错误: 读取的数据跟文档里面的数据提前了一位,在这里给大家提个醒! 下面贴上代码 c文件: #include &quo ...
- VK16K33是带键盘扫描的LED数显/数码管驱动芯片多种封装选择驱动电流大,适合高亮显示场合
品牌:永嘉微电/VINKA 型号:VK16K33 封装形式:SOP28/24/20 年份:新年份 联 系 人:陈锐鸿 KPP1186 概述: VK16K33是 ...
- STM32学习记录——74HC595四位数码管显示
数模管作为STM32的一个重要外设,由于其成本低.稳定,被用于许多场景中.本篇文章来介绍下四位数码管的使用方法. 数码管显示 一.数码管的分类 二.74HC595芯片(串入并出) 三.原理图 四.代码 ...
- 数字电路实验 02 - | 译码器及数码管驱动芯片应用
一.实验目的和任务 掌握3 -8线译码器.4 -10线译码器的逻辑功能和使用方法. 掌握用两片3 -8线译码器连成4 -16线译码器的方法. 掌握使用74LS138实现逻辑函数和做数据分配器的方法. ...
- 数码管驱动芯片+语音芯片的应用场景介绍,WT588E02B-24SS
WT588E语音芯片+数码管的应用场景介绍 前言: WT588E02B语音芯片是一款SPI通讯方式的语音芯片.最大的特点便是客户可以自行通过SPI协议,按照规定的数据更换流程发送语音数据,实现客户可以 ...
- LED数显驱动芯片,LED数码管驱动芯片VK1650,LED驱动控制IC,键盘扫描集成电路,内置RC震荡电路
VINKA/永嘉微电LED显示屏驱动主要应用于以下: 1:VCR.VCD.DVD 及家庭影院等显示屏驱动. 2:电磁炉.微波炉.冰箱.空调 .家庭影院等高段位显示屏驱动. 3:LED显示屏驱动,电子秤 ...
最新文章
- vue 可合并表格组件_merge-table
- postgresql 删除触发器_PostgreSQL:我没有带闪,不讲武德
- Mac下显示隐藏文件
- Vue学习(组件的定义及调用、路由)-学习笔记
- 用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员
- RHEL5实现YUM本地源的配置
- 万有引力的意思_万有引力和引力有什么不同?四种基本性质力中电磁力最多
- Redis的常用JavaAPI(Jedis)实现
- 写好代码,拒绝一传到底的参数类
- 支持64位的打印服务器,使用环境打印服务器是32位,添加共享的计算机是64位
- 二次元始,跌宕几年,至学术略有成就并步入业界的我与NLP的这七年时光!
- 将list中的数据组成用逗号分隔的字符串
- 数据挖掘算法原理与实践:k-均值
- 科普贴:示波器的组成
- 前端页面--瀑布流布局的实现
- Windows记事本编码反汇编分析
- iOS 组件化/模块化架构设计实践
- granite crushers in german
- Bryntum Gantt 5.0 JS
- 针式打印机连续打印多走纸_针织打印机以及更多开放源代码的艺术品
热门文章
- 在n1 ,魔百盒q5盒子上,实现惠普p1008系列的网络共享 打印和airprint服务
- Odoo15企业邮箱配置与实现手机端回复亦可自动挂单
- 两台电脑怎么互传文件?用它就能搞定!
- nvivo服务器项目,【NVivo教程】在Nvivo中设置案例路线图
- mesh和wifi中继的区别_科普:路由器的无线中继和Mesh的区别是什么?
- NLPIR在线系统介绍
- 对计算机专业来说学历真的重要吗?
- 采用泰克示波器TBS2000和TCP0030A电流探头准确评估高速DCDC转换器电感的选择
- DirectX修复工具使用技巧之一——解除被占用的文件,完整修复C++
- kindle电子书去drm_如何将无DRM的电子书加载到Kindle