科百科
当前位置: 首页 范文大全

单片机闹钟的设计(自制低成本闹钟)

时间:2023-07-22 作者: 小编 阅读量: 4 栏目名: 范文大全

电路原理说明这是用查理复用法3个io驱动6个LED的原理图。假设此时P1高,P3低,P2高阻,此时LED6亮,虽然LED1和LED3串联有正向电压,但由于LED6钳位,使得电压不足以同时导通。若P1高,P2、P3都为低,此时LED1和LED6都亮,都亮度不及上面的状态,因为两个LED的电流都流过P3电阻,P3电阻分压加大。然而有80个人看不懂。这里由于按键与热敏电阻共用同一路ADC,为了按键扫描正常,刷新率取比1000Hz稍大的数。

事情是这样的,想做一个成本很低的时钟练手,再带一个闹钟功能。

准备自己设计电路、外壳,再自己写代码、组装成品。

要实现这样一个时钟,硬件方面我需要用到:

  • 查理复用法驱动数码管
  • 外接ds1302时钟芯片
  • 无源“蜂鸣器”:用来播音乐
  • 热敏电阻:用来测量温度

这个时钟还需要兼容:HK32F030M、STM8S003、n76e003at20

最后的成品应该是这样的。

电路原理说明

这是用查理复用法3个io驱动6个LED的原理图。

假设此时P1高,P3低,P2高阻,此时LED6亮,虽然LED1和LED3串联有正向电压,但由于LED6钳位,使得电压不足以同时导通。

若P1高,P2、P3都为低,此时LED1和LED6都亮,都亮度不及上面的状态,因为两个LED的电流都流过P3电阻,P3电阻分压加大。

所以每个限流电阻上并联一个二极管,利用单向导通性,使得电阻在特定电流方向下,两端分压一致,使得同时亮的LED亮度一致。

PCB走线如下

核心算法说明

不是说我代码不开源,而是代码放出来了,即使有100个人下载。然而有80个人看不懂。

那我不如只列出特别的算法,图文并茂地讲解,让更多的人能看懂。

1.ADC超采样

由技术文档可知HK32F030M的ADC有效精度是8bit,如果温度要显示到小数点后1位起码要12bit的ADC,

这怎么办呢?

这时就可以用超采样技术。

第一步,ADC设置成连续转换,EOC转换完成中断

void ADC_init(){GPIO_InitTypeDef GPIO_InitStructure;ADC_InitTypeDef ADC_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_ADC_PIN ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;GPIO_Init(GOIO_ADC_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(GOIO_ADC_PORT,GPIO_PinSource6,GPIO_AF_7);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC ,ENABLE);ADC_DeInit(ADC1);ADC_StructInit(&ADC_InitStructure);ADC_ClockModeConfig(ADC1,ADC_ClockMode_SynClkDiv4);//系统时钟4分频,8MADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//开启连续转换ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward;//向后扫描ADC_Init(ADC1,&ADC_InitStructure);/* ADC1 regular channels configuration */ ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_239_5Cycles);/* Enable EOC interrupt */ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);//转换结束中断使能/* Configure and enable ADC1 interrupt */NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);ADC_GetCalibrationFactor(ADC1);//ADC校准/* Enable ADC1 */ADC_Cmd(ADC1, ENABLE);while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY)); ADC_StartOfConversion(ADC1);}

第二步,在中断里累加ADC读回来的值(反正后面都要求平均数,不如先加起来)。

这里由于按键与热敏电阻共用同一路ADC,为了按键扫描正常,刷新率取比1000Hz稍大的数。

extern uint16_t ntc_data_13b[2];void ADC1_COMP_IRQHandler(void){static uint8_t i=0;if(ADC_GetITStatus(ADC1, ADC_IT_EOC) != RESET){ntc_data_13b[0] =ADC_GetConversionValue(ADC1)>>4;//读取后自动清除EOC标志位i;if(i>=32)//32分频,1041.6Hz{i=0;ntc_data_13b[1]=ntc_data_13b[0];//存入二缓ntc_data_13b[0]=0;//一缓清零}}}

2.数码管上下移动动画

动画特效一大堆,这里举一个简单一点的,用下移做例子

上图展示的是下移的过程,提取重复的部分,只有一个步骤(上移同理)

#define digital_a 0x01#define digital_b 0x02#define digital_c 0x04#define digital_d 0x08#define digital_e 0x10#define digital_f 0x20#define digital_g 0x40uint8_t digital_putdown(uint8_t dat){uint8_t temp=0;temp|=(dat&digital_g)?digital_d:0;//G赋值到Dtemp|=(dat&digital_a)?digital_g:0;//A赋值到Gtemp|=(dat&digital_b)?digital_c:0;//B赋值到Ctemp|=(dat&digital_f)?digital_e:0;//F赋值到Ereturn temp;//其余没赋值的数据丢弃}

3.走时误差校准

首先这个DS1302很多人都反馈不准,其实是有诀窍的:

这个网址可以参考下:http://www.51hei.com/bbs/dpj-177015-1.html

下面的代码调时间的。

//输入最小数值-86400void time_adjust(int32_t sec){uint8_t time_temp[7];uint8_t i;for(i=0;i<7;i)time_temp[i]=bcd2hex(*((uint8_t *)&time_data i));if(sec<0)//直接借一天做减法{sec =86400;time_temp[5]--;//星期是从1到7,不担心溢出}time_temp[0] =sec`;if(time_temp[0]>=60){ time_temp[1] =time_temp[0]/60;time_temp[0]%=60;}time_temp[1] =sec600/60;if(time_temp[1]>=60){time_temp[2] =time_temp[1]/60;time_temp[1]%=60;}time_temp[2] =sec/3600; if(time_temp[2]>=24){time_temp[5] =time_temp[2]/24;time_temp[2]%=24;time_temp[5]%=7;time_temp[5]=time_temp[5]?time_temp[5]:7;//将零偏移到7}for(i=0;i<7;i)*((uint8_t *)&time_data i)=hex2bcd(time_temp[i]);}

由于我这里没有年月日,只有星期,所以轻松一点。不用考虑更多的进制。

和上面网址里的一样,挑一个夜深人静的时候校准。当然校准时有概率会跳过闹钟。但谁会设置午夜凶铃呢?

加一点补充,怕有人不理解自动校准。

比如你的手表一天快了1分钟。当我只观察这个手表时,这个手表走了1天多1分钟时,调慢1分钟,就能和标准时间对上。

当然在校准前一刻快了的59秒。

但每天的累计误差被压缩了。

现在经过我这套算法。

设置好后,一个星期最大相差1秒以内。

一年下来,误差也就一分钟。

4.时间校准方法

每天在同一个固定的时间段来调整时间,先根据第一天的观察来决定要每天偏移多少秒。

输入到AC_DAY的设置里。然后再重新设置时间。

同理,一个星期后再调节AC_WEEK。这样就完成了。

由于校准数据是存在DS1302的内存里的。如果电池没电数据就清空的,建议在PCB上写上校准参数。

外壳制作过程

通过数字的槽内壁喷上一层黑漆,再倒入不同颜色的树脂的方法:

黑漆防止“泛光”,白色树脂将led的光线“匀”开,透明树脂将光投射到上层。

遮盖

喷漆 倒胶 擦拭油漆

喷漆前一天熬夜上头忘记拍喷漆和倒胶了,就只留个倒胶图吧。加上滴胶凝固大约1天关于滴胶之前尝试过按1/3比例配置但比例没控制好,重新试了下发现树脂混合时比较稀的时候效果最好。

成品

滴胶挺硬的,两侧泛光的现象几乎没有,但led的光晕开效果不明显,而且正面效果确实不咋地。

数字面板几乎是全黑的,等想做2.0看先灌白色树脂再喷漆效果如何吧。

文章中所有资料的来源如下

最丐条形时钟 - 嘉立创EDA开源硬件平台


如果你认为这篇文章有用的话

欢迎点赞、关注、转发~

我会持续更新优质开源项目

    推荐阅读
  • 读毛泽东送瘟神二首感怀(读毛泽东送瘟神二首感怀)

    新中国成立之初,血吸虫病来势汹汹,仿佛“瘟神”一般,迅速侵袭南方13个省,上亿的人口的生命安全受到严重的威胁。毛泽东听说了吸血虫病肆虐的地区,患病的百姓相继死亡,人烟凋敝,不禁寝食难安,忧心不已。我们相信,在这三者的结合下,众志成城,一定可以赶走新冠病毒这个“瘟神”,赢得疫情防控战争的全面胜利。

  • 如何优化业务流程管理机制(业务流程持续优化的三个方法)

    也就是说这几张“皮”应合为一张“皮”。上述措施只是从技术上实现了设计的管理体系的整合,而在企业中可能还存在着两张“大皮”之间的脱节。这种方法需要人工执行,可以在统一的业务流程管理平台上设计出整体的流程合规审核制度,以一定的频率和周期,不断对流程中关键的节点进行合规检查,并出具流程合规审核的风险报告。类似于ISO9001中所规定的内审制度。

  • 头发过早变白的原因有什么(头发变白跟什么有关)

    对于年纪大的人来说,身体机能在下降,气血容易亏虚,肾脏等多个脏腑的功能也容易失调,这些都可能会引起长白头发。不仅如此,可能还会引起脱发。对于中老年人来说,想要预防或者缓解白发多的现象,建议平时要注意护肾。抽烟抽烟容易破坏人体内的黑色素,影响到头发的生长。除了吸烟,熬夜、挑食、频繁烫染头发等行为也容易引起早生白发,若中招,尽量早点改掉。对于很多长头发的女性来说,扎头发时建议不要扎得太紧。

  • 腹饱胀嗳气怎么办(上腹不适饱胀恶心)

    胃下垂时间久了不经治疗甚至还会引发患者其他内脏下垂。胃病的出现会让我们人体产生非常大的痛苦,胃下垂就是其中一种。有慢性消耗性疾病或久卧少动者,往往是腹肌张力下降,膈肌悬吊力不足,易患胃下垂。胃下垂的出现其实还和体质有一定的关系,妇女在生产之后,腹部压力突然下降,引起胃部下垂;还有一些身材瘦长的人,也容易得胃下垂,另外长期从事站立工作,或者经常卧床少活动的人,很容易患胃下垂。

  • 围巾常用面料有哪几种(围巾的面料有哪些)

    属于再生纤维的人造丝和人造棉,多半制成较薄且垂坠的款式。当然还有很多混纺的材质,汲取多种材质的优点,制成各式各样的美丽围巾。

  • 三忍原型(历任传说中的三忍)

    更别说初代火影和宇智波斑了,这两人打一个喷嚏估计九尾就变成可爱的小狐狸了。如果给最初的三忍一个定义,华殇君认为是,“爱”、“恨”、“和平”,分别对应的是初代火影千手柱间、宇智波斑、漩涡水户。

  • 微信共同好友评论隐藏(如何操作)

    微信共同好友评论隐藏?登陆微信-发现-朋友圈-点击右上角相机-往下拉有一''谁可以看''-部分可见--选择可以看的朋友即可;这条分享只有打上勾的好友才能看到,相互评论也是,共同好友都是看不到的,接下来我们就来聊聊关于微信共同好友评论隐藏?也可以在微信--通讯录--找到不想让他看的好友-点头像-不让她看我的朋友圈,但是如果是共同朋友,而你的朋友没有设置的话,是可以看到的,得让朋友也同样流程设置一下才行。

  • 为促进中小微企业蓬勃发展(助力中小微企业平稳健康发展)

    5月31日,美团宣布将联合银行等金融机构向上海商家提供免息贷款支持,以缓解受疫情影响商家在复工复产过程中的短期资金周转压力。此前,美团已联合十余家金融机构,通过减费让利、免息展期、提前回款等举措,为深圳、上海、吉林等全国受疫情影响较为严重区域共计超过45万商家提供普惠金融专项扶持。金融助企纾困是近期上海有力有序推动经济加快恢复和重振的一大重点。

  • flash软件界面介绍(曾经无所不能的Flash)

    FlashPlayer作为一个遍布世界的平台级应用,对安全方面实在不够重视,常年被世界各地的安全团队报告漏洞,360和腾讯向Adobe提交的漏洞都卖出去的话预计能有上千万刀收入。。Flash的母公司Adobe在去年7月宣布,将在2020年年底正式停止更新维护FlashPlayer,一代枭雄即将落下帷幕。在iPhone刚刚风靡时,Flash就被乔帮主挡在iPhone之外,原因是Flash不开放、能耗大、安全问题、不适配触摸屏、并且坚持作为第三方独立。多少年后,也许Flash的名字不再被提起。

  • 南京禅境室内温泉度假村上门施工(住进温柔富贵乡)

    珺懋傲途格酒店坐落于汤山之麓、江苏园博园内,比邻威斯汀,两处设施可以共用。甫一预定,酒店前台即致电问候,记下入园、入住时间,赠送园博园门票并贴心叮嘱防疫通关事项。落地窗砌就套房朝南一侧,采光极佳,夜间又可用厚实的电动窗帘完全遮蔽,保障睡眠质量。首屈一指的便是土耳其风格的温泉泡池,“麓泉”名声在外。几人知之,曾经这里是一家水泥厂,园博园是矿山,采掘殆尽后重整环境,才有了江苏园博园与这多家度假酒店。