微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于无字库12864液晶模块的日历钟设计制作

基于无字库12864液晶模块的日历钟设计制作

时间:11-05 来源:互联网 点击:
本文我们要利用无字库12864液晶模块来自制一个小小日历钟,最图终效果图见图1。



这个小小日历钟有什么特点呢?

1、电路简单,使用元件少,容易制作,核心就是单片机ATMega8L和日历钟忡1302。

2、全部使用低压元件,3V电压就可以工作。

3,使用自编的小字模和图形界面使得显示具有特色:在文字界面可以清晰地读出当前的日期和时间,而且加入一个小动画使显示更加生动,在图形界面使用模拟刻度和指针动态指示当前时间,两个界面柙按键切换。



图2电路原理

4、电源制作在独立的小电路板上,调试程序时插入使用USB供电的3.3V稳压电源,完毕后可以取下,插上开关,使用电池供电。

5、不用背光时耗电很小(全机约3mA),可以使用圆片锂电池CR2O32供电。

日历钟安装在一块50mm x50mm小万用板上。外形见图1。

电路原理

电原理图见图2,液晶型号如前述,单片机就是AVR的ATMega8L-8PU(以下简称M8),可以在低电压下工作,M8 的PD口控制液晶,主要就是控制串行写入显示数据。DS13O2(以下简称1302)是常用的日历时钟芯片,32768Hz晶体B是它的振荡源。在它内部有10个命令寄存器用来存储日期、时间的数值并控制芯片工作,M8通过PB0PB1、 PB2控制1302的RST、SCLK、I/O:RST为高时才能读写1302,读写都是让数据在I/O串行传送,当SCLK上升沿时写入1位地址或数据,写入1位地址或数据。写入地址后每当SCLK下降沿时则读出数据。读写都是从最低位开始,受SCLK时钟同步。接通电源后它必须通过单片机程序启动计时,只要有电源或者各用电源存在,它就能一直工作下去,和单片机是否工作无关。连接在M8的PC口的4个轻触按键,S1,S2,S3用于调校时问:分别为确认修改、移动光标,修改数值;S4用于界面切换。电源包插两部分 :圆片电池CR2O32通过二极管VD1连接到1302的VCC1作为后各电源、以便在关机时也能使1302继续工作,另一路可通过开关S5给液晶、MB、1302的VCC2供电,在调试时为了避免消耗电池,接入了另—个5∨转3.3V的小稳压板,用微型∪SB接口从外部取得5V电源。调试好后,取下稳压板,在插孔上插上小拨动开关S5,就可以使用锂电池了。注意二极管VD1不可省略,因为按照1302的说明书,VCC2高于VCC1时由VCC2电,VCC2低于VCC1时由VCC1供电,在用电池时,由于有二吸管,VCC2比VCC1高,电池正常供电,关断电池时,VCC2为0,电池通过二极管作为后各电源,符合要求 ,保证电路正常工作。

硬件制作

这个日历钟电路简单所需元器件很少。集成电路使用双列直插插座,液晶焊上90度插针排和焊在万用板上的90°排针插座插接。6线编程口,电源部分插座使用了圆孔2.54mm间距插座条。电池使用圆锂电池CR2O32。采用一块5cm见方的万用板安装全部元件,首先截取—段90°排针座,焊在电路板背面上方中央,作为液晶插座,M8的IC插座也要装在电路板背面,为此把它的引脚往外弯折,按照液晶插座引脚对应的位置定位IC插座, 先焊上RC复位元件以及—些相关连线,然后把MB插座定位,接焊在电路板焊盘上。1302插座依据M8插座定位,和32768HZ晶体一起也是焊在电路板反面。这种非常规安装虽然不尽合理,但有效利用了万用板的安装面积(否则液晶占用的—块不便利用),而且可使液晶和MB和1302之间的连线变得非常简单,直接用焊锡连通即可。在电路板正面,还要安装轻触按键、电池窠、编程插孔排、电源块插孔。两面元器件布置见图3和图4。另用—小块万用板焊上微型USB插座、滤波电容、低压稳压器LM1117-3.3以及和时钟板电源插孔对应的IC插针。

焊接液晶90°插针排时,可把它先插八已经焊在电路板上的排针座,再焊接液晶上的镀金焊盘,注意保持液晶和电路板的平行,所以插针不能在液晶上插到底。

因为LCD背光对于区区2OOmAh容量的小锂电池来说,50mA电流显得耗电太大,所以就没有安装背光电源接线,如果需要安装最好接到外部电源上而不要使用小电池。

编程

电路虽然简单,但是要让不带字库的LCD、1302在M8的统一领导下有条不紊地工作,所以具体编程必须解决以下问题。





图7程序流程

1、让时钟走动起来,而且可以通过按键设定或修改当前数据。

2、让液晶显示时钟芯片当前提供的信息:年月日时分秒,两个显示界面的按时刷新。

3、制作字模和图形界面编程。

以上第1点,就是用M8控制1302。我们可以按照它的时序要求编列一些函数,另外在程序中建立—个数组DateTme用来存放从1302读出的年月日时分秒,作为数据刷新依据;第2点,主要是在LED上显示这个数组当前的数据(要注意1302存放日期时间的格式是BCD码,所以存取之前必须先进行数制转换)。数据刷新实际上就是查询1302当前“秒”是否等于上次查询结果,如不等于则已经过去1秒,在数组记下新秒,刷新显示“秒”-当然是1秒刷新一次;而且当秒更新为O日寸要更新“分”……·以此类推。第3点上次已有叙述使用,畔畔字模的方法,其中编制了8 x 8小数字、1 2×16数字、16×1 6汉字几种字模用于不同的显示位置,另外有个小鸡啄米的动画,可以在16点阵字模工具中用鼠标点击,分别画出小鸡低头和小鸡抬头两个图案,在秒刷新时交替显示即可。用字模软件制作好所需的字模后,把所有常量字模数组定义放在头文件miniClock中,这些数组全部放在FLASH区。

图形界面的模拟指示针、刻度的制作也不困难,只要事先规划出水平刻度长度,起点和终点坐标画出水平线,垂直刻度则按照刻度位置画出短垂直线,指示地则是在刻度上方或下方垂直直线,它的位置要计算好,根据时间数据刷新而改变。

标题“小小日历钟”是个汉字串,用一个汉字串显示函数Vold show-string1616(ucharx,uchary,uchar * string,uchar string_length);参数是显示起始列、页、字串指针、字串长度,同时要事先定义—个以上指针所指的字串数组,此数组的元素是待显示的字模在字模数组的位置。

整个程序流程见图7,左远是主流程,右边是年日月时分秒更新流程。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top