标题: 51单片机驱动CT1642数码管显示源程序 [打印本页]

作者: ak48mi    时间: 2020-8-1 11:35
标题: 51单片机驱动CT1642数码管显示源程序
拆解电视机顶盒找到带CT1642控制的数码管 在网上找到代码修改了一下 没有解决按键检测的问题  可根据自己的需求修改对应引脚

制作出来的实物图如下:

单片机源程序如下:
  1. sbit DAT=P2^2;
  2. sbit CLK=P2^1;
  3. sbit KEY=P2^0;
  4. u8 NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  5. u8 NixieTablepos[]={0,0x02,0x04,0x08};
  6. void CT1642_Write(u8 Pos, u8 Val)
  7. {
  8. u8 i,Posn;
  9. // 1、移18位:对应C1--C4、6位空、Q2--Q9
  10. Posn=~Pos;
  11. for(i=0; i<4; i++)//C1--C4
  12. {
  13.   DAT=Posn & 0x01;
  14.   Posn >>= 1;
  15.   CLK=0;         CLK=1;
  16. }
  17. for(i=0; i<6; i++)//6位空
  18. {
  19.   DAT=1;
  20.   CLK=0;         CLK=1;
  21. }
  22. for(i=0; i<8; i++)//Q2--Q9
  23. {
  24.   DAT=Val & 0x01;
  25.   Val >>= 1;
  26.   CLK=0;         CLK=1;
  27. }
  28. // 2、锁存
  29. CLK=1; DAT=0;         DAT=1;
  30. // 3、输出
  31. CLK=0; DAT=0;         DAT=1;
  32. }

  33. void NixieTabledisplay(unsigned int number)//ct1642数码管显示数字
  34. {
  35.   CT1642_Write(NixieTablepos[1],NixieTable[number%10]);
  36.         number/=10;
  37.         Delayms(1);
  38.   CT1642_Write(NixieTablepos[2],NixieTable[number%10]);
  39.         number/=10;
  40.         Delayms(1);
  41.         CT1642_Write(NixieTablepos[3],NixieTable[number%10]);
  42.         Delayms(1);
  43. }

  44. void NixieTabledisplayonoff(u8 state)
  45. {
  46.         if(state)//显示ON
  47.         {CT1642_Write(NixieTablepos[1],0x37);
  48.         Delayms(1);
  49.         CT1642_Write(NixieTablepos[2],0x5C);
  50.         Delayms(1);
  51.         }
  52.         else//显示OFF
  53.         {
  54.          CT1642_Write(NixieTablepos[1],0x71);
  55.         Delayms(1);
  56.   CT1642_Write(NixieTablepos[2],0x71);
  57.         Delayms(1);
  58.         CT1642_Write(NixieTablepos[3],0x5C);
  59.         Delayms(1);
  60.         }
  61.         
  62. }
复制代码


IMG_20200801_113442.jpg (2.65 MB, 下载次数: 169)

IMG_20200801_113442.jpg

CT1642.zip

1 KB, 下载次数: 37, 下载积分: 黑币 -5


作者: ontheroad    时间: 2021-12-13 18:26
正在研究 Linux 下 CT1642 的驱动,没想到在 51 上也有用到。
作者: qjy822    时间: 2023-4-12 10:28
感谢分享,手上刚好有这个,正好拿来学习下!
作者: joyb    时间: 2023-4-12 14:25
CT1642是一种带键盘扫描接口和LED显示的控制专用电路,内部集成18bit移位寄存器,广泛应用于各种家用电器等各种设备的数码显示驱动电路。




1、引脚说明
      Q2-Q9:表示段输出、接数码管阳极
      C1-C4:位输出,接数码管阴极
      DATA:  数据信号,写入后存于IC寄存器中
2、功能
     主要由18位移位寄存器、18位锁存器、驱动电路组成,芯片上电后Qn端输出低电平,Cn端输出高电平。


2.1   CT1642的数据输出由数据移位、数据锁存和数据输出三个步骤完成:
1)数据移位: 将数据按照上图对应格式写入DATA端,在CLK上升沿的作用下一次性18位数据写入到移位寄存器
2)数据锁存: 将CLK置为1,18位移位寄存器内的数据一次性输出到18位锁存器,同时由于CLK为1,在DATA上升沿的作用D输出为0,输出关闭
3)数据输出: 将CLK置为0, 关闭18BIT锁存器缓冲,同时在DATA上升沿的作用下使D触发器输出为1,打开输出缓冲器。

2.2  控制LED显示:  将18位数据写入DATA口,C1-C4控制LED是否亮,Q2-Q9控制LED显示内容,18bit数据前四位与后八位有效;
       配合始终输出完18位数据之后,拉高时钟,再拉低DATA口,再拉高DATA口产生DATA上升沿,将数据锁存;
       再将CLK置为0,再拉低DATA口,再拉高DATA口形成DATA上升沿将数据输出,从而控制LED显示。

2.3 检测按键处理:  按键可以采用接在Qn端也可以接在Cn端,无论接在哪一端都要确定检测按键的时候LED显示状态是关闭的。也就是说按键接在Qn端时,当进入按键检测时,Cn应输出为高电平关闭LED显示;按键接在Cn端时,当进入按键检测,Qn端应输出低电平,关闭LED显示。
      当按键接在Qn端时, 逐个向Qn发送高电平,读key值,若key值为高,说明相应的键位已按下。
2.4 一些问题:   CT1642纯软件对时间有一定要求,时间达不到显示会很闪。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1