捡了一块电子称上的段码LCD液晶,驱动器为TM1621。一直未测试其好坏,今天抽空搜了下资料,点亮了LCD,其中有块液晶缺段,可能是LCD有问题,也可能是TM1621性能不良。
移植的mbed测试代码
- #include "mbed.h"
- DigitalOut HT1621_CS(P0_28);
- DigitalOut HT1621_WR(P0_16);
- DigitalOut HT1621_DAT(P0_17);
- #define uchar unsigned char
- #define uint unsigned int
- #define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com
- #define SYSDIS 0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
- #define SYSEN 0X02 //0b1000 0000 0010 打开系统振荡器
- #define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压
- #define LCDON 0X06 //0b1000 0000 0110 打开LCD偏压
- #define XTAL 0x28 //0b1000 0010 1000 外部接时钟
- #define RC256 0X30 //0b1000 0011 0000 内部时钟
- #define TONEON 0X12 //0b1000 0001 0010 打开声音输出
- #define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
- #define WDTDIS 0X0A //0b1000 0000 1010 禁止看门狗
- uchar Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00};
- void Ht1621_Init(void); // - - 初始化 HT1621
- void Ht1621Wr_Data(uchar Data,uchar cnt); // - - HT1621 写入数据函数
- void Ht1621WrCmd(uchar Cmd); // - - HT1621 写入命令函数
- void Ht1621WrOneData(uchar Addr,uchar Data); // - - HT1621 在指定地址写入数据函数
- void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt); // - - HT1621 连续写入数据函数
- void Ht1621_Init(void)
- {
- HT1621_CS=1;
- HT1621_WR=1;
- HT1621_DAT=1;
- wait_ms(500); // - - 延时使LCD工作电压稳定
- Ht1621WrCmd(BIAS);
- Ht1621WrCmd(RC256); // - - 使用内部振荡器
- Ht1621WrCmd(SYSDIS); // - - 关振系统荡器和LCD偏压发生器
- Ht1621WrCmd(WDTDIS); // - - 禁止看门狗
- Ht1621WrCmd(SYSEN); // - - 打开系统振荡器
- Ht1621WrCmd(LCDON); // - - 打开声音输出
- }
- void Ht1621Wr_Data(uchar Data,uchar cnt)
- {
- uchar i;
- for (i=0;i
- {
- HT1621_WR=0;
- wait_us(10);
- HT1621_DAT=Data&0x80;
- wait_us(10);
- HT1621_WR=1;
- wait_us(10);
- Data<<=1;
- }
- }
- void Ht1621WrCmd(uchar Cmd)
- {
- HT1621_CS=0;
- wait_us(10);
- Ht1621Wr_Data(0x80,4); // - - 写入命令标志100
- Ht1621Wr_Data(Cmd,8); // - - 写入命令数据
- HT1621_CS=1;
- wait_us(10);
- }
- void Ht1621WrOneData(uchar Addr,uchar Data)
- {
- HT1621_CS=0;
- Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101
- Ht1621Wr_Data(Addr<<2,6); // - - 写入地址数据
- Ht1621Wr_Data(Data<<4,4); // - - 写入数据
- HT1621_CS=1;
- wait_us(10);
- }
- void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
- {
- uchar i;
- HT1621_CS=0;
- Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101
- Ht1621Wr_Data(Addr<<2,6); // - - 写入地址数据
- for (i=0;i
- {
- Ht1621Wr_Data(*p,8); // - - 写入数据
- p++;
- }
- HT1621_CS=1;
- wait_us(10);
- }
- int main() {
-
- uchar i,j,t;
- Ht1621_Init(); // - - 上电初始化LCD
- wait(5); // - - 延时一段时间
- wait(2);
- Ht1621WrAllData(0,Ht1621Tab,16); // - - 清除1621寄存器数据,清屏
- for (i=0;i<32;i++)
- {
- t=0x01;
- for (j=0;j<4;j++)
- {
- Ht1621WrOneData(i,t);
- t<<=1;
- t++;
- wait_ms(500);
- }
- }
- while(1){
- }
- }
复制代码
|