TM1629驱动程序及显示数据
"TM1629驱动程序用于控制TM1629显示芯片,能够显示数字和符号,适用于电子秤或计数器等设备。该驱动程序包含了定义的模式设置、数据写入模式以及LED和LCD的显示控制命令。同时,提供了预设的字符缓冲区,用于显示货币和重量等信息。程序中还包括了一个用于写入单字节数据的函数`indata`。" TM1629驱动程序主要涉及以下几个关键知识点: 1. **TM1629芯片**:TM1629是一款专为七段数码管显示设计的驱动芯片,它能够驱动9个7段LED或LCD数码管,常用于电子仪器仪表、家用电器等设备的显示部分。 2. **模式设置**:在程序中定义了不同的模式,如`modeset0x00`用于设置TM1629的工作模式,`writeDataMode_z0x40`和`writeDataMode_g0x44`分别表示数据写入的不同模式,可能与数码管的动态扫描有关。 3. **地址设置**:`startAddress0xc0`是起始地址,表明数据将从这个地址开始写入,这可能是TM1629内部的寄存器地址。 4. **读写命令**:`readKeyMode0x42`用于读取按键状态,`ledDisconMode0x8a`和`lcdDisconMode0x94`分别用于关闭LED和LCD的显示。 5. **字符缓冲区**:`codebuf_led`和`codebuf_lcd`数组存储了预设的字符编码,这些编码对应于数码管上要显示的特定字符。例如,`codebuf_led`用于LED显示,而`codebuf_lcd`用于LCD显示。同时,`codebuf_ledp`和`codebuf_lcdp`可能是这些字符的高亮版本。 6. **数据写入函数**:`indata`函数用于向TM1629写入单字节数据,这是驱动程序的核心部分,通过设置STB(Strobe)信号来确保数据正确写入到芯片。 7. **数据缓冲区**:`dataBuf_ser[16]`用于存储待显示的数据,可能包含多个LED或LCD显示单元的数值。 通过这个驱动程序,开发者可以控制TM1629显示任意组合的数字和符号,实现各种定制化的显示功能。在实际应用中,根据需要编写主程序,调用这些预定义的模式和函数,结合硬件电路,即可完成TM1629的显示控制。
#define modeset 0x00 //对于TM1629无效,对于1721都配置为SEG引脚
#define writedatamode_z 0x40 //采用地址自动加一方式写显存
#define writedatamode_g 0x44 //采用固定地址方式写显存
#define startaddress 0xc0 //起始地址
#define readkeymode 0x42 //读按键
#define leddisconmode 0x8a //LED显示控制
#define lcddisconmode 0x94 //LCD显示控制
#define datacount 0x10 //采用地址自动加一方式传输数据的个数
uchar code buf_led[10]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //存放共阴数码管的段代码,不带小数点
uchar code buf_ledp[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF}; //存放共阴数码管的段代码,带小数点
//money
uchar code buf_lcd[10]= {0xEB,0x60,0xC7,0xE5,0x6C,0xAD,0xAF,0xE0,0xEF,0xED}; //存放共阴数码管的段代码,不带小数点
uchar code buf_lcdp[10]={0xFB,0x70,0xD7,0xF5,0x7C,0xBD,0xBF,0xF0,0xFF,0xFD}; //存放共阴数码管的段代码,带小数点
//weight
//uchar code buf_lcd[10]= {0xBE,0x06,0x7C,0x5E,0xC6,0xDA,0xFA,0x0E,0xFE,0xDE};
//uchar code buf_lcdp[10]={0xbf,0x07,0x7d,0x5f,0xC7,0xDb,0xFb,0x0f,0xFf,0xDf};
uchar data buf_ser[16]={0}; //存放送到LED驱动芯片显存中的值
//------------------------------------------------LED串行写1BYTE数据开始----------------------------------------------------------------------
void indata(char p)
{
unsigned int i;
STB=0; //保证“STB”为低电平,程序不依赖于之前端口的状态,保证程序在实际运行中不会出现“端口迷失”
for(i=0;i<8;i++)
{
CLK=0; //先将“CLK”清零
if((p&0x01)!=0)
{
DIO=1; //需要传送的数据的低位为“1”,则把“DIO”清零
else
{
DIO=0; //需要传送的数据的低位为“0”,则把“DIO”置高
}
CLK=1; //送时钟的上升沿
p=p>>1; //准备送下一个BIT
_nop_();
_nop_();
_nop_();
_nop_();
} //送完一个字节后退出循环
}
//------------------------------------------------LED串行写1BYTE数据结束----------------------------------------------------------------------
#ifdef ONKEYSCAN
//------------------------------------------------LED串行读1BYTE数据开始-----------------------------------------------------------------------
//输出8BIT数据
//在时钟的上升沿通过MCU从LED驱动IC――TM16xx读数据
unsigned char outdata()
{
unsigned char i,k=0; //i――控制循环次数,k――临时保存读到的数据
DIO=1; //释放DIO为输入
STB=0; //保证“STB”为低电平,程序不依赖于之前端口的状态,保证程序在实际运行中不会出现“端口迷失”
for(i=0;i<8;i++)
{
CLK=0; //先将“CLK”清零
k=k>>1;
if(DIO==0)
{
k=k&0x7f; //如果“DIO”为低电平,则把k的最高位清“0”,其他各位保持不变
剩余11页未读,继续阅读
- 粉丝: 5
- 资源: 19
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Ansys Comsol实现力磁耦合仿真及其在电磁无损检测中的应用
- 西门子数控系统调试与配置实战案例教程
- ELM多输出拟合预测模型:简易Matlab实现指南
- 一维光子晶体的Comsol能带拓扑分析研究
- Borland-5技术资料压缩包分享
- Borland 6 技术资料分享包
- UE5压缩包处理技巧与D文件介绍
- 机器学习笔记:深入探讨中心极限定理
- ProE使用技巧及文件管理方法分享
- 增量式百度图片爬虫程序修复版发布
- Emlog屏蔽用户IP黑名单插件:自定义跳转与评论限制
- 安装Prometheus 2.2.1所需镜像及配置指南
- WinRARChan主题包:个性化你的压缩软件
- Neo4j关系数据映射转换测试样例集
- 安装heapster-grafana-amd64-v5-0-4所需镜像介绍
- DVB-C语言深度解析TS流