目录
一.PCF8563简介
1.1简介
![](https://i-blog.csdnimg.cn/direct/62431e58663a4553a6cc645dc1ad4a94.png)
1.2时钟寄存器简介
当电源电压低于 PCF8563 器件的最低供电电压时,VL 为“1”,表明内部完整的时钟周期信号不能被保证,可能导致时钟/日历数据不准确。
1.3通信接口
1.4器件地址
PCF8563 的器件地址为 7’b1010001。
二.实验任务
三.系统框图设计
![](https://i-blog.csdnimg.cn/direct/569a54cd31474a1f9f16fb20b207d128.png)
![](https://i-blog.csdnimg.cn/direct/4b425aeafe9b40a8bf357136ae610514.png)
四.代码解读
4.1pcf8563整体分析
上电后,等待8ms,然后i2c_rh_wl拉低,进入写模式,通过i2c总线向pcf8563写入时间初值。完成初值写操作后,将i2c_rh_wh拉高,随后i2c进入读数据模式,不停的从pcf8563中读取时间,然后传递给lcd实时显示。
4.2pcf8563代码分析
首先当复位信号来临时,时间信息全清零,状态机触发信号i2c_exec为0,i2c读写控制信号为写信号。
在case语句外将i2c_exec清零,保证该信号为脉冲信号。
看4.1图,上电后需要等待8ms方可进行后续操作,因此首先判断等待时间是否足够8ms,足够之后跳转到第1个状态。
当等待时间足够8ms后,i2c_exec拉高,进入i2c_dri模块,i2c_addr为02h,意指将数据写入到秒寄存器内,i2c_data_w写入的是秒数据。同时flow_cnt+1,代表进入下一个状态;
当i2c_done=1,代表一次写操作完成,同时flow_cnt+1,代表进入下一个状态;
以下同理 ,按照分,时,天,月,年的顺序,依次写入分钟寄存器,小时寄存器,天寄存器,月寄存器,年寄存器中。
当年信息写完后,将i2c_rh_wl拉高,进入读数据模式,写无效,状态机回到4'd1,将pcf8563中的年月日信息依次读出。
4.3lcd_display字符显示模块
如下图所示,每个数字的长为16,宽为8,故16x8=128,一个数字占用了128个像素点。
字符第一行显示年月日,字符第二行显示时分秒。
4.4lcd_display代码分析
第一个if()相当于把pixel_xpos,和pixel_ypos限制在上图数字2中的蓝色矩形框内,这里当pixel_xpos=0就开始赋值是因为这是在同步时序下赋值,数据赋值有一个时钟的延迟。
CHAR_HEIGHT+CHAR_POS_Y_1-pixel_ypos:等于17-pixel_ypos,范围是(1~17)相当于遍历数字2蓝色矩形框内的每一行,从第1行遍历到第17行;
pixel_xpos-(CHAR_POS_X_1-1'b1))%8: 遍历数字2蓝色矩形框内的每一列。
以上两小段整合起来就是遍历char[2]中的每个像素点,因为每个数组占用了16x8=128个像素点,故需要遍历128次,检测到某像素点为1,则赋值字符颜色,若像素点为0,则赋值背景颜色。
同理:剩下的年月日信息以此类推。