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

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

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

电路原理说明这是用查理复用法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开源硬件平台


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

欢迎点赞、关注、转发~

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

    推荐阅读
  • 163邮箱怎么发邮件(163邮箱发邮件步骤)

    163邮箱怎么发邮件?163邮箱发邮件步骤如下如果没有邮箱的,先去浏览器里下载一个或者直接使用网页版,我来为大家科普一下关于163邮箱怎么发邮件?以下内容希望对你有帮助!163邮箱怎么发邮件163邮箱发邮件步骤如下。进入邮箱后,点击绿色字体“写信”。进入邮件书写页面,填写收件人,邮件主题,邮件内容。填写完成后,可以选择下方的“发送”,或者是邮件上方的“发送”。

  • 万寿菊用什么土养好 万寿菊适合什么土壤

    万寿菊对土壤的要求并不严格,一般的园土就能维持正常生长。不过若是能用肥沃且排水性能较好的沙质土更好,植株生长的会更旺盛。如果是盆栽养护的可用腐叶土,园土和河沙进行混合配制,这样的土质更利于生长。另外,注意使用前要先给土壤消毒,避免里面有病菌,细菌。

  • 毛豆烧豆腐的做法(怎样做毛豆烧豆腐)

    接下来我们就一起去研究一下吧!毛豆烧豆腐的做法毛豆280克、老豆腐310克、生抽适量、白糖1勺半、盐适量、鸡精适量。将老豆腐放在案板上切开,待用。烧锅倒油烧热,下入淘洗好的毛豆翻炒翻炒。随后,合入切开的老豆腐翻动一下。然后,加适量的生抽,加一勺半白糖。煮至汤汁浓稠,即成。

  • 十大丧尸电影排名(十大丧尸电影排名是什么)

    十大丧尸电影排名1.《活死人之夜》非常经典的丧尸电影了,具有人类的外形却早已失掉了人类的本性,这就是活死人了,这部电影为此后的丧尸片提供了非常好的样板,也是美国丧尸片排行榜首位,非常值得一看哦。也是2019十大好评丧尸片之一。在美国十大恐怖片排行榜也只能排第九的位置。

  • 欧吉桑是什么意思(欧吉桑的含义)

    欧吉桑为日语“叔叔”的汉字谐音原是中性词,因为年轻男性忌讳被人说自己老,所以这个词在特定场合或多或少有一些贬义,今天小编就来聊一聊关于欧吉桑是什么意思?接下来我们就一起去研究一下吧!欧吉桑是什么意思欧吉桑为日语“叔叔”的汉字谐音。很多偶像剧里头的欧吉桑与欧巴桑一般是用来骂人很三八,很八婆。翻译成老先生比较礼貌。也有一些人把欧吉桑定义为跟不上时代步伐,具有传统思想的人。

  • 山东最美公路排名(最网红的山东在这里)

    石桥石料源于泰山石,即使经由日晒风吹,依然不裂不毁。在这场战役中,解放军以六千余人的伤亡,歼敌近六万,成功破解国民党军队南北夹击的战略计划。该战役也被列入世界战争史100个经典案例。粟裕将军离开莱芜,进入沂源县。这片区域里,蒙山、鲁山、沂山、尼山、沂水、沐水各据一方,与无数起伏不定的丘陵组成一片独特的丘陵地貌区。

  • 粑粑柑是寒性吗(粑粑柑是不是寒性)

    粑粑柑是寒性吗?下面内容希望能帮助到你,我们来一起看看吧!耙耙柑其实就是春见杂柑,是柑橘的一个特殊品种,其性凉,味甘、酸,入胃经、大肠经,有清热生津、止渴、利尿的功效,适合口干口渴、烦热、食少气逆、小便不利的人群食用。而且耙耙柑富含碳水化合物、纤维素、维生素C、维生素B族、胡萝卜素、钾、镁、钙、磷、铁等多种营养物质,食用能够为机体提供能量、提高机体免疫力,是一种优质的健康水果。

  • 五月份开四停四(江苏再次开启停产限电)

    三季度末受限电政策影响,下游织造、印染企业大面积停车,需求急剧缩减,涤纶长丝面临累库风险。综上,国庆期间成本支撑、供应缩减双重利好提振下,涤纶长丝市场持续上涨。而限电政策或延续至年末,因此涤纶长丝供需或维持低位。然连续拉涨使得下游用户抵触情绪升温,目前产销量已明显下降,因此涤纶长丝涨幅或小幅放缓。

  • 大叶芹怎么冷冻保鲜(怎样冷冻大叶芹)

    接下来我们就一起去研究一下吧!大叶芹怎么冷冻保鲜可用新鲜的大白菜叶子包好,放在阴凉的地方,可保鲜数天。将湿润的纸巾放入叶子上吸收水分,等到纸巾较干时将其取出,再将大叶芹放入保鲜袋中冷藏。冰箱里面存放时,要根部朝下放入冰箱冷藏室,可有效延长保存时间,留住新鲜大叶。将其放入保膜袋或食品袋中,封口不要封得太死,留点呼吸口,分几处多扎几个小口就可以达到对流,可以保持大叶芹新鲜。

  • 江雪古诗赏析是什么(关于江雪古诗赏析)

    江雪古诗赏析是什么诗中运用典型概括的手法,选择千山万径,人鸟绝迹这种最能表现山野严寒的典型景物,描绘大雪纷飞,天寒地冻的图景;接着勾画独钓寒江的渔翁形象,借以表达诗人在遭受打击之后不屈而又深感孤寂的情绪。全诗构思独特,语言简洁凝练,意蕴丰富。孤舟蓑笠翁,独钓寒江雪。一叶孤舟上,一位身披蓑衣头戴斗笠的渔翁;独自在漫天风雪中垂钓。