#define	P_1668DAT_In	RA0   //数据输入端口
#define P_1668DAT LATA0 //数据输出端口
#define P_1668CLK LATA1
#define P_1668CS LATC0 #define TM1668_CS_HIGH P_1668CS = 1
#define TM1668_CS_LOW P_1668CS = 0 #define TM1668_DAT_HIGH P_1668DAT = 1
#define TM1668_DAT_LOW P_1668DAT = 0 #define TM1668_CLK_HIGH P_1668CLK = 1
#define TM1668_CLK_LOW P_1668CLK = 0 //显示模式设置命令
#define V_MDSP1 0x00 //4位13段
#define V_MDSP2 0x01 //5位12段
#define V_MDSP3 0x02 //6位11段
#define V_MDSP4 0x03 //7位10段 //数据命令设置
#define V_MDAT1 0x40 //写数据到显示区
#define V_MDAT2 0x42 //读键扫数据
//#define V_MDAT3 0x40 //自动地址增加
#define V_MDAT4 0x44 //固定地址 //地址命令设置
#define V_ADDR0 0xC0 //地址0
#define V_ADDR1 0xC1 //地址1
#define V_ADDR2 0xC2 //地址2
#define V_ADDR3 0xC3 //地址3
#define V_ADDR4 0xC4 //地址4
#define V_ADDR5 0xC5 //地址5
#define V_ADDR6 0xC6 //地址6
#define V_ADDR7 0xC7 //地址7
#define V_ADDR8 0xC8 //地址8
#define V_ADDR9 0xC9 //地址9
#define V_ADDR10 0xCA //地址10
#define V_ADDR11 0xCB //地址11
#define V_ADDR12 0xCC //地址12
#define V_ADDR13 0xCD //地址13 //显示控制 - 亮度调节
#define V_DIS16_01 0x80 //显示宽度1/16
#define V_DIS16_02 0x81 //显示宽度2/16
#define V_DIS16_03 0x82 //显示宽度3/16
#define V_DIS16_10 0x83 //显示宽度10/16
#define V_DIS16_11 0x84 //显示宽度11/16
#define V_DIS16_12 0x85 //显示宽度12/16
#define V_DIS16_13 0x86 //显示宽度13/16
#define V_DIS16_14 0x87 //显示宽度14/16 #define V_DIS16_OFF 0x80 //显示宽度14/16
#define V_DIS16_ON 0x88 //显示宽度14/16 //---------------------------------------------
#define V_LED_LIGHT (V_DIS16_10|V_DIS16_ON) //显示亮度设置 //----------------------------
#define V_NOP 3//5
//*************************************
// 函数名称:Nop1668
// 函数功能:延时函数
// 入口参数:延时时间
// 出口参数:无
//***************************************
void Nop1668(uint8 T_Dly)
{
while(T_Dly--);
return ;
}
//**************************************
// 函数名称:TM1668_WriteByteData
// 函数功能:TM1668发送一字节数据
// 入口参数:要发送的数据
// 出口参数:
//***************************************
void TM1668_WriteByteData(uint8 Data)
{
uint8 i; Nop1668(V_NOP) ;
for(i=8;i>0;i--)
{
TM1668_CLK_LOW ;
if((Data & 0x01) == 0)
{
TM1668_DAT_LOW ;
}
else
{
TM1668_DAT_HIGH ;
}
Data >>= 1 ;
Nop1668(V_NOP) ; TM1668_CLK_HIGH ;
Nop1668(V_NOP) ;
}
}
//**************************************
// 函数名称:TM1668_ReadByteData
// 函数功能:读TM1668一字节数据
// 入口参数:无
// 出口参数:
// 返回值 : 所读的数据
//***************************************
uint8 TM1668_ReadByteData(void)
{
uint8 i;
uint8 RetValue = 0 ; TM1668_CLK_LOW ;
for(i=0;i<8;i++)
{
Nop1668(V_NOP) ; TM1668_CLK_HIGH ;
RetValue >>= 1 ; //先读出的是低位
if(P_1668DAT_In)
{
RetValue |= 0x80 ;
}
TM1668_CLK_LOW ;
} return (RetValue);
}
//**************************************
// 函数名称:TM1668_WriteCommand
// 函数功能:写设置命令
// 入口参数:设置命令参数
// 出口参数:无
//***************************************
void TM1668_WriteCommand(uint8 Comm)
{
TM1668_CS_LOW ;
Nop1668(V_NOP) ;
TM1668_WriteByteData(Comm);
TM1668_CS_HIGH ;
}
//**************************************
// 函数名称:TM1668_WriteAddrData
// 函数功能:向固定地址写一个数据
// 入口参数:地址 数据
// 出口参数:无
//***************************************
void TM1668_WriteAddrData(uint8 Addr,uint8 Data)
{
TM1668_CS_LOW ;
TM1668_WriteByteData(Addr); //写地址
TM1668_WriteByteData(Data); //写数据
TM1668_CS_HIGH ;
} //----应用实例---------
//**************************************
// 函数名称:TM1668_ReadKey
// 函数功能:TM1668 读按键值
// 入口参数:显示数据缓存区
// 出口参数:
// 备注:
//***************************************
void TM1668_WriteDat(uint8 *InDat)
{
uint8 i ;
uint8 Addr,Tmp2 ; TM1668_WriteCommand(V_MDSP4) ;//7位10段
TM1668_WriteCommand(V_MDAT1) ; //写数据到1668 固定模式
//-----
Addr = V_ADDR2 ;
for(i=0;i<5;i++) //刷显数据
{
if((*InDat) & 0x01)
{
Tmp2 = 0x01 ;
}
else
{
Tmp2 = 0x00 ;
}
TM1668_WriteAddrData(Addr,Tmp2) ;
Addr += 2 ; //地址加2
(*InDat) >>= 1 ;
}
//-----
TM1668_WriteCommand(V_LED_LIGHT) ; //设置亮度 开启显示
}
//**************************************
// 函数名称:TM1668_ReadKey
// 函数功能:TM1668 读按键值
// 入口参数:无
// 出口参数:
// 返回值 : 返回按键值
//***************************************
void TM1668_ReadKey(uint8 *OutDat)
{
uint8 i ; TM1668_CS_LOW ;
Nop1668(V_NOP) ;
TM1668_WriteByteData(V_MDAT2) ; //读按键值 Nop1668(V_NOP) ;
Nop1668(V_NOP) ; TM1668_DAT_HIGH ; //读前数据置高
*OutDat = TM1668_ReadByteData() ;// 只读一个字节 /* for(i=5;i>0;i--) //读所有按键的值
{
*OutDat = TM1668_ReadByteData() ;
OutDat ++ ;
}*/
TM1668_CS_HIGH ;
}

TM1668 Led 驱动芯片源程序的更多相关文章

  1. 精通LED驱动芯片HT1632C指令与编程应用

    HT1632C是一款很常用的LED(数码管或点阵)驱动芯片,虽然官方已经宣布该芯片明年(2021年)即将寿终正寝(停产),但是相同厂家生产的同系列芯片的控制方式通常是相同的(事实上,大多数LED驱动芯 ...

  2. LED恒流驱动IC汇总

    LED恒流驱动IC汇总 2017年09月22日 11:29:01 阅读数:569 这几天在找LED恒流驱动芯片,无意间在LED网论坛上发现这个帖子,分享给大家! LED恒流IC芯片大盘点        ...

  3. 加密芯片ALPU

    加密芯片ALPU 纽文微电子(上海)有限公司 n  公司简介 NEOWINE是一家半导体开发公司,2002年6月成立于韩国,于2011年在中国设法人;  研发总部位于韩国京畿道,并在上海.深圳设办事处 ...

  4. Arduino 入门程序示例之一片 LED(2015-06-11)

    概述 从点到线,从线到面.现在开始要来一片的 LED 了,一大波的 LED 正在到来! 示例程序 因为手头没有现成的模块,手头只有 595,所以这里每一个示例程序都是使用 74HC595 扩展 IO ...

  5. [转帖]中关村:LED屏幕和OLED屏幕有什么区别?答案在这里

    LED屏幕和OLED屏幕有什么区别?答案在这里   中关村在线 01-0810:40 目前的电视市场,更新换代的频率越来越快,无论是国产品牌还是合资品牌,都不约而同的推出了全新产品.这离不开人们对更好 ...

  6. LED点阵书写显示

    LED点阵书写显示屏   摘要:随着时代的发展,数字电子技术已经普及到我们生活,工作,科研,各个领域,而LED显示以其组构方式灵活.显示稳定.功耗低.寿命长.技术成熟.成本低廉等特点在车站.证券所.运 ...

  7. LED驱动电源

    LED驱动电源       LED驱动电源,你了解多少? LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电).低压直 ...

  8. 使用寄存器点亮LED——编程实战

    stm32的编程和stc89c51还是存在着很多思想上的不同的,在51单片机中,我们点亮LED灯,只用给对应IO高低电平就可以了,而stm32中,就一个简单的GPIO,我们也需要配置好几个寄存器,而且 ...

  9. 使用寄存器点亮LED——前言基础知识

    在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...

随机推荐

  1. pyqt中使用matplotlib绘制动态曲线

    一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟 ...

  2. Java笔记1 : 在生产者消费者模式中,线程通信与共享数据,死锁问题与解决办法

    本例定义了4个类,这里说一下,方便下面讲解.分别是Product(产品),Producer(生产者),Consumer(消费者), Test(测试类). 多线程之间通信与共享数据只要引用同一内存区域就 ...

  3. App 性能分析

    关键因素: ---- Instrument 性能分析神器 1. 启动时间 应用启动时间长短对用户第一次体验至关重要,同时系统对应用的启动.恢复等状态的运行时间也有严格的要求,在应用超时的情况下系统会直 ...

  4. html 5 中的 6位 十六进制颜色码 代表的意思

    人的眼睛看到的颜色有两种: ⒈ 一种是发光体发出的颜色,比如计算机显示器屏幕显示的颜色: ⒉ 另一种是物体本身不发光,而是反射的光产生 十六进制颜色码 的颜色,比如看报纸和杂志上的颜色. 我们又知道任 ...

  5. Spring 3整合Quartz 1实现定时任务一:常规整合(基于maven构建)

    Spring配置Quartz例子(基于maven构建) 在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类 ...

  6. JVM 学习笔记(一)

    JVM  ----Java  Virtual Machine   (熟称:JAVA虚拟机),JVM 在执行JAVA程序的过程中将内容划分为若干个区域,其有各自的用途和管理机制.如下图: 1.  程序计 ...

  7. Google DNS劫持背后的技术分析

    0×00 背景 最近世界真是越来越不太平了,尤其是对于大部分普通人而言.昨天又传来噩耗,根据网络监测公司BGPMon,Google的公开DNS服务器 IP 8.8.8.8被劫持到了委内瑞拉和巴西超过2 ...

  8. delphi中EmbeddedWB网页html相互调用(二)

    我们可以通过控件 EmbeddedWB_D5-D2010_Version_14.69.1 来响应html事件,还可以自定义html响应哪些html元素. 控件下载 点击下载 里面有demos文件夹大家 ...

  9. bzoj2333

    好题,先离线把连通块变成连续的区间每次连通块合并就相当于两个区间合并这样就轻易的用线段树解决了 type node=record wh:string[]; x,y:longint; end; ..*] ...

  10. JBPM4.4部署到tomcat6异常解决办法

    java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.ser ...