找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3593|回复: 3
收起左侧

51单片机驱动CT1642数码管显示源程序

[复制链接]
ID:757696 发表于 2020-8-1 11:35 | 显示全部楼层 |阅读模式
拆解电视机顶盒找到带CT1642控制的数码管 在网上找到代码修改了一下 没有解决按键检测的问题  可根据自己的需求修改对应引脚

制作出来的实物图如下:
IMG_20200801_113426.jpg IMG_20200801_113432.jpg
单片机源程序如下:
  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

CT1642.zip

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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:445069 发表于 2021-12-13 18:26 | 显示全部楼层
正在研究 Linux 下 CT1642 的驱动,没想到在 51 上也有用到。
回复

使用道具 举报

ID:48994 发表于 2023-4-12 10:28 | 显示全部楼层
感谢分享,手上刚好有这个,正好拿来学习下!
回复

使用道具 举报

ID:1064915 发表于 2023-4-12 14:25 | 显示全部楼层
CT1642是一种带键盘扫描接口和LED显示的控制专用电路,内部集成18bit移位寄存器,广泛应用于各种家用电器等各种设备的数码显示驱动电路。
20140101214211718.jpg



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

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纯软件对时间有一定要求,时间达不到显示会很闪。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表