找回密码
 立即注册
查看: 24|回复: 4

简简单单用AI8H4K64TL做个段码时钟

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-06-16 00:13:00
已绑定手机

37

主题

2220

回帖

2656

积分

荣誉版主

积分
2656
发表于 昨天 10:36 | 显示全部楼层 |阅读模式
大概思路如下:
  • 用AI8H4K64TL驱动0.8英寸的白色LED数码管,数码管型号为8402AW,为共阴极4位8段结构,跳秒冒号占用第二位的DP,其余位DP无功能
  • PWM3差分输出直驱4KHz的压电蜂鸣器,虽然响度有所欠缺,但做闹钟也能凑合用了,胜在功耗很低
  • 片外SD3078RTC芯片,产生2Hz中断提供刷秒信号,预留外部32.768KHz晶体后续开发精简版
  • 四路功能按键,暂时用于设置时间,后续用于闹钟之类的
  • TP4057充电,1200mAh长条电池,充一次电续航一周没问题,目前LED亮度调至最低显示效果尚可。
  • ECJ22091一键开关机
PS:做LED单色点阵和段码一定一定要加半透明盖板,用薄的灰黑色亚克力效果就不错,参考如下视频。

微信图片_20250615103028.jpg 微信图片_20250615103033.jpg
3D_PCB1_2025-06-151.png 3D_PCB1_2025-06-153.png

SCH_四位段码时钟_1-P1_2025-06-15.png



睁开眼睛做场梦~~~
回复

使用道具 举报 送花

3

主题

727

回帖

165

积分

等待验证会员

积分
165
发表于 昨天 10:38 | 显示全部楼层
以下是一段关于使用STC8H4K64TL芯片进行段码时钟设计的回复,符合您的要求:

使用STC8H4K64TL芯片进行段码时钟设计

1. 光标单元:08英寸白色LED数码管的驱动
STC8H4K64TL芯片驱动一个08英寸白色LED数码管,其型号为8402AW,具有以下特点:
结构:共阴极4位8段,跳秒占第二位DP。
驱动方式:为了实现跳秒功能(冒号),需要将第二位置为高电平。
电路连接:将驱动端口与LED的第二位DP连接,确保跳秒信号正确传输。

2. 灯光:PWM3差分输出直驱4KHz的PWM3
原理:PWM3是4KHz的差分输出直驱PWM3,可以精确控制LED的亮度。
功耗计算:假设LED的额定电压为1.8V,电流为10mA,则4KHz的功率约为0.072W,持续约50小时即可耗尽电池。
电路连接:将PWM3的输出端与LED的正负极分别连接,确保PWM信号正确转换。

3. 连接:SD3078 RTC芯片
中断机制:SD3078 RTC芯片通过2Hz的中断机制提供刷秒信号。
信号处理:中断机制根据时钟信号发送中断请求,并处理外部中断源(如外部32768KHz晶体)。
预留空间:预留2Hz中断信号预留给后续开发,便于后续硬件设计。

4. 挂钟:四路功能按键
布局:按键采用四路功能,用于设置时钟和闹钟。
功能扩展:未来可扩展为四位数字时钟(如年、月、日、时)。
使用场景:可以用于时钟计数器、闹钟等场景,同时支持外部中断信号的扩展。

5. 电池:TP4057 1200mAh 长条电池
容量:电池支持约一周的续航,满足日常使用需求。
工作原理:电池供电电压为2.1V,支持直驱和差分输出设计。
充电功能:使用TP4057充电器充电,支持1200mAh电池的充电。

6. ECJ22091 一键开关机
功能:ECJ22091是一款一键开关机芯片,提供快速切换状态的功能。
故障风险:需注意电路连接和电源供应,避免电火花导致故障。

7. 加工:半透明盖板的使用
功能:半透明盖板用于LED的显示效果,增加视觉美感。
参考视频:如附带的视频链接,可参考半透明盖板的制作方法和效果。

该回复涵盖了段码时钟的主要设计步骤和关键技术参数,确保内容专业且易于理解。您可以根据需要进一步调整设计细节或补充更多技术细节。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-06-16 00:13:00
已绑定手机

37

主题

2220

回帖

2656

积分

荣誉版主

积分
2656
发表于 昨天 10:43 | 显示全部楼层
主函数代码如下:
  1. void main(void)
  2. {
  3.         EAXSFR();
  4.         GPIO_config();       
  5.         LED_config();
  6.         Timer0_Init();
  7.         RTC_Init();
  8.         Ext_Init();
  9.         EA = 1;
  10.         LEDCTRL |= 0x80;  //启动段码
  11.         while(1)
  12.         {               
  13.                 switch(work_mode)
  14.                 {
  15.                         case 0: //正常模式
  16.                                 if(RTC_flag)  //显示小时和分钟,冒号跳秒
  17.                                 {
  18.                                         RTC_flag = 0;
  19.                                         ReadDate();
  20.                                         i_hour = date_buf[2] & 0x3F;
  21.                                         i_min = date_buf[1] & 0x7F;       
  22.                                         if(i_hour & 0xf0)        COM0_DC_L = SEG_tab[i_hour>>4];  //十位的零消隐
  23.                                         else COM0_DC_L = 0x00;
  24.                                         if(dot)  COM1_DC_L = SEG_tab[i_hour&0x0F] | 0x80;  //刷冒号
  25.                                         else         COM1_DC_L = SEG_tab[i_hour&0x0F];
  26.                                         COM2_DC_L = SEG_tab[i_min>>4];
  27.                                         COM3_DC_L = SEG_tab[i_min&0x0F];                       
  28.                                 }
  29.                                 if(key_flag)
  30.                                 {
  31.                                         key_flag = 0;
  32.                                         if(key_value == set) //如果按下设置键,进入调小时模式,加载调整值
  33.                                         {
  34.                                                 work_mode = 1;
  35.                                                 set_hour = BCD2HEX(i_hour);  //转成HEX格式才能正常十进制进位
  36.                                                 set_min = BCD2HEX(i_min);
  37.                                         }
  38.                                 }
  39.                                 break;
  40.                         case 1: //调整小时模式
  41.                                 show_hour = HEX2BCD(set_hour);  //设置值需转成BCD格式才能正常显示
  42.                                 show_min = HEX2BCD(set_min);
  43.                                 if(RTC_flag)  //显示小时和分钟,冒号跳秒
  44.                                 {
  45.                                         RTC_flag = 0;                               
  46.                                         if(dot)
  47.                                         {
  48.                                                 if(show_hour & 0xf0)        COM0_DC_L = SEG_tab[show_hour>>4];
  49.                                                 else COM0_DC_L = 0x00;
  50.                                                 COM1_DC_L = SEG_tab[show_hour&0x0F] | 0x80;;                                       
  51.                                         }
  52.                                         else
  53.                                         {
  54.                                                 COM0_DC_L = 0;
  55.                                                 COM1_DC_L = 0x80;       
  56.                                         }
  57.                                         COM2_DC_L = SEG_tab[show_min>>4];
  58.                                         COM3_DC_L = SEG_tab[show_min&0x0F];                       
  59.                                 }
  60.                                 if(key_flag)
  61.                                 {
  62.                                         key_flag = 0;
  63.                                         switch(key_value)
  64.                                         {
  65.                                                 case set:  //暂时认为是设置键
  66.                                                         date_set[3] = set_hour | 0x80;
  67.                                                         work_mode = 2;
  68.                                                         break;
  69.                                                 case add:
  70.                                                         if(set_hour<24) set_hour++;
  71.                                                         if(set_hour >= 24) set_hour = 0;
  72.                                                         break;
  73.                                                 case sub:
  74.                                                         if(set_hour == 0) set_hour = 23;
  75.                                                         else if(set_hour>0) set_hour--;
  76.                                                         break;
  77.                                                 case ok:
  78.                                                         date_set[0] = 0x00;       
  79.                                                         date_set[1] = HEX2BCD(set_min);
  80.                                                         date_set[2] = HEX2BCD(set_hour);                                                       
  81.                                                         date_set[3] = date_buf[3];       
  82.                                                         date_set[4] = date_buf[4];       
  83.                                                         date_set[5] = date_buf[5];       
  84.                                                         date_set[6] = date_buf[6];       
  85.                                                         WriteDate();
  86.                                                         work_mode = 0;
  87.                                                         break;
  88.                                                 default:
  89.                                                         break;
  90.                                         }
  91.                                 }                               
  92.                                 break;
  93.                         case 2: //调整分钟模式
  94.                                 show_hour = HEX2BCD(set_hour);
  95.                                 show_min = HEX2BCD(set_min);
  96.                                 if(RTC_flag)  //显示小时和分钟,冒号跳秒
  97.                                 {
  98.                                         RTC_flag = 0;
  99.                                         if(show_hour & 0xf0)        COM0_DC_L = SEG_tab[show_hour>>4];
  100.                                         else COM0_DC_L = 0x00;
  101.                                         COM1_DC_L = SEG_tab[show_hour&0x0F] | 0x80;;                                               
  102.                                         if(dot)
  103.                                         {
  104.                                                 COM2_DC_L = SEG_tab[show_min>>4];
  105.                                                 COM3_DC_L = SEG_tab[show_min&0x0F];                                       
  106.                                         }
  107.                                         else
  108.                                         {
  109.                                                 COM2_DC_L = 0;
  110.                                                 COM3_DC_L = 0;       
  111.                                         }
  112.                                 }
  113.                                 if(key_flag)
  114.                                 {
  115.                                         key_flag = 0;
  116.                                         switch(key_value)
  117.                                         {
  118.                                                 case set:  //暂时认为是设置键
  119.                                                         work_mode = 0;
  120.                                                         break;
  121.                                                 case add:
  122.                                                         if(set_min<60) set_min++;
  123.                                                         if(set_min >= 60) set_min = 0;
  124.                                                         break;
  125.                                                 case sub:
  126.                                                         if(set_min == 0) set_min = 59;
  127.                                                         else if(set_min>0) set_min--;
  128.                                                         break;
  129.                                                 case ok:
  130.                                                         date_set[0] = 0x00;       
  131.                                                         date_set[1] = HEX2BCD(set_min);
  132.                                                         date_set[2] = HEX2BCD(set_hour);                                       
  133.                                                         date_set[3] = date_buf[3];       
  134.                                                         date_set[4] = date_buf[4];       
  135.                                                         date_set[5] = date_buf[5];       
  136.                                                         date_set[6] = date_buf[6];       
  137.                                                         WriteDate();
  138.                                                         work_mode = 0;
  139.                                                         break;
  140.                                                 default:
  141.                                                         break;
  142.                                         }
  143.                                 }       
  144.                                 break;
  145.                         default:
  146.                                 break;
  147.                 }
  148.         }
  149. }
复制代码




睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-06-15 11:58:16
已绑定手机

1

主题

21

回帖

61

积分

注册会员

积分
61
发表于 昨天 17:10 | 显示全部楼层
功耗怎么样

点评

电池4V时的平均电流是6.5mA左右,作为LED主动发光显示的来说,我觉得功耗算是非常低了。  详情 回复 发表于 昨天 17:27
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-06-16 00:13:00
已绑定手机

37

主题

2220

回帖

2656

积分

荣誉版主

积分
2656
发表于 昨天 17:27 | 显示全部楼层

电池4V时的平均电流是6.5mA左右,作为LED主动发光显示的来说,我觉得功耗算是非常低了。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 03:27 , Processed in 0.602025 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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