数码之家

 找回密码
 立即注册
搜索
查看: 4590|回复: 5

[Arduino] esp8266驱动FD1642芯片的四位数码管程序

[复制链接]
发表于 2021-4-12 14:08:19 | 显示全部楼层 |阅读模式
esp8266小巧便宜适合各种DIY,网上买了一片FD1642芯片的四位数码管,橙色的暖色很好看。只是这个芯的的驱动不好找,网上找了几个51用的驱动。在esp8266上很不好用,网上程序各种坑。折腾了一天,参考官网芯片时序图及说明终于改好了能用的驱动。以后慢慢的做个网络对时时钟也不错哈哈。现将相关程序附上:
  1. #define  P_CT_CLK  14 //CLK接口
  2. #define  P_CT_DATA  13 //DATA 接口
  3. const uint8 Lcd_tab[17] =
  4. {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E}; //共阴极
  5. //Q2接seg A  Q9 接seg G 中间按顺序接
  6. int numb=888;  //测试显示初始数字
  7. void setup()
  8. {
  9.   pinMode(P_CT_DATA, OUTPUT);
  10.   pinMode(P_CT_CLK, OUTPUT);
  11.   digitalWrite(P_CT_DATA, HIGH);
  12.   digitalWrite(P_CT_CLK, LOW);

  13. }

  14. void Nop(uint8 T_Dly)
  15. {
  16.   while (T_Dly--);
  17.   return ;
  18. }

  19. void ct1642_send_data(uint8 ct_dis_data, uint8 ct_com)
  20. {
  21.   uint8 ct_addr;                   //存储数码管位置
  22.   uint8 i;
  23.   switch (ct_com)
  24.   {
  25.     case 0: {
  26.         ct_addr = 0xee; //显示C1位数据 数码管为共阴极,将要点亮的COM置0以显示该COM
  27.         break;
  28.       }

  29.     case 1: {
  30.         ct_addr = 0xed;   //显示C2位数据
  31.         break;
  32.       }
  33.     case 2: {
  34.         ct_addr = 0xeb; //显示C3位数据
  35.         break;
  36.       }
  37.     case 3: {
  38.         ct_addr =  0xe7; //显示C4位数据
  39.         break;
  40.       }
  41.     case 4: {
  42.         ct_addr = 0xff;  //扫描键盘,关闭COM1
  43.         break;
  44.       }
  45.     default: {
  46.         ct_addr = 0xff;
  47.         ct_dis_data = 0x00;
  48.         break;
  49.       }
  50.   }

  51.   for (i = 0; i < 8; i++)            //发送8位地址
  52.   {
  53.     digitalWrite(P_CT_CLK, LOW);
  54.     if ( (ct_addr >> i) & 0x01 )
  55.     {
  56.       digitalWrite(P_CT_DATA, HIGH);
  57.       Nop(1);  //此处根据单片机的指令周期而定
  58.     }
  59.     else
  60.     {
  61.       digitalWrite(P_CT_DATA, LOW);
  62.       Nop(1);
  63.     }
  64.     digitalWrite(P_CT_CLK, HIGH); //上升沿输出一位
  65.     Nop(1);
  66.   }
  67.   //发送两个空位,补足要发送的18位
  68.   digitalWrite(P_CT_CLK, LOW);
  69.   digitalWrite(P_CT_DATA, HIGH);
  70.   Nop(1);
  71.   digitalWrite(P_CT_CLK, HIGH);
  72.   Nop(1);
  73.   digitalWrite(P_CT_CLK, LOW);
  74.   Nop(1);
  75.   digitalWrite(P_CT_CLK, HIGH);
  76.   Nop(1);
  77.   for (i = 0; i < 8; i++) //发送8位数据
  78.   {
  79.     digitalWrite(P_CT_CLK, LOW);
  80.     if ( (ct_dis_data << i) & 0x80)
  81.     {
  82.       digitalWrite(P_CT_DATA, HIGH);
  83.       Nop(1);
  84.     }
  85.     else
  86.     {
  87.       digitalWrite(P_CT_DATA, LOW);
  88.       Nop(1);
  89.     }
  90.     digitalWrite(P_CT_CLK, HIGH);
  91.     Nop(1);
  92.   }
  93.   digitalWrite(P_CT_CLK, HIGH); //输出数据
  94.   digitalWrite(P_CT_DATA, LOW);
  95.   Nop(1);
  96.   digitalWrite(P_CT_DATA, HIGH);
  97.   Nop(1);
  98.   digitalWrite(P_CT_CLK, LOW);
  99.   digitalWrite(P_CT_DATA, LOW);
  100.   Nop(1);
  101.   digitalWrite(P_CT_DATA, HIGH);
  102.   Nop(2);
  103.   return;
  104. }
  105. void FD1642_display(unsigned int k)
  106. {
  107.   ct1642_send_data(Lcd_tab[k % 10], 0);
  108.       k /= 10;
  109.       if (k != 0)
  110.       {
  111.         ct1642_send_data(Lcd_tab[k % 10], 1);
  112.         k /= 10;
  113.         if (k != 0)
  114.         {
  115.           ct1642_send_data(Lcd_tab[k % 10], 2);
  116.           k /= 10;
  117.           if (k != 0)
  118.           {
  119.             ct1642_send_data(Lcd_tab[k % 10], 3);
  120.           }
  121.         }
  122.       }
  123.   }

  124. void loop()
  125. {
  126.   int p=0;
  127.   while(p<5000)
  128.   {
  129.   FD1642_display(numb);
  130.   p++;
  131.   }
  132. numb++;
  133. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +20 收起 理由
家睦 + 20

查看全部打赏

发表于 2021-4-12 14:39:47 | 显示全部楼层
:lol:这数码管是隔壁老王家的?
回复 支持 反对

使用道具 举报

发表于 2021-4-12 16:16:45 | 显示全部楼层
我也买了几个,和CT1642的程序应该是通用的
回复 支持 反对

使用道具 举报

发表于 2021-4-12 16:23:34 来自手机浏览器 | 显示全部楼层
老王家的,我试过,直接用TM1650的库就OK了。这个板子功耗比TM1638大很多,不亮也高,不喜欢用了:sad:
回复 支持 反对

使用道具 举报

发表于 2021-4-12 18:21:44 | 显示全部楼层
老王的声誉还是响当当的呀,有人一眼就能识别出产品的出处:lol:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-24 12:12:36 | 显示全部楼层
dulme 发表于 2021-4-12 14:39
这数码管是隔壁老王家的?

对头啊,买了一堆垃圾,就这么一两个正常能用的
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-12 22:35 , Processed in 0.312001 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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