我在网上找的一个比较完整的程序。自己也进行了一点儿完善。注释比较清晰,需要用的拿去
单片机源程序如下:
- /*PCF8563+1602LCD*/
- /*BCD:将一字节二进制空间分为2个4bit来存储数据,每4bit来表示一个一位10进制数*/
- #include<reg52.h>
- #include<stdio.h>
- #include<intrins.h>
- #include"I2C.h"
- #include "lcd1602.h"
- //typedef unsigned int uint;
- //typedef unsigned char uchar;
-
- code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //共阴数码管 0-9 '-' '熄灭‘表
-
- uchar tmpdisplay[8]; //定义显示缓存数组
- /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- /*+++++*/uchar tmpdate[7]={0,39,19,07,6,07,18}; //时间初始化:秒、分、时、日、星期、月、年;+++++++++++/**/
- /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- uchar rtc_address[7]={0x02,0x03,0x04,0x05,0x06,0x07,0x08}; //PCF8563中的秒、分、时、日、星期、月、年寄存器地址
- /**************************************************
- 函数名称:set_rtc()
- 函数功能:BCD处理,将十进制数转化为BCD编码(按十六进制数计算)
- ***************************************************/
- void set_rtc() //设定时钟数据(pcf8563芯片中的数据是以bcd形式存储和处理)
- {
- uchar i,tmp;
- for(i=0;i<7;i++) //BCD处理,将十进制数转化为BCD编码(按十六进制数计算)
- {
- tmp=tmpdate[i]/10; //将十位分离出
- tmpdate[i]=tmpdate[i]%10; //将个位分离出
- tmpdate[i]=tmpdate[i]+tmp*16; //合成1个由2个BCD码组成的数
- }
- ISendStr(0x02,tmpdate,7); //将数据写入PCF8563相应寄存器
- }
- /**************************************************
- 函数名称:rtc_init()
- 函数功能:时钟初始化
- ***************************************************/
- void rtc_init() //时钟初始化
- {
- set_rtc(); //将预设的时间进行DEC->BCD转换
- ISendByte(0x00,0x00);
- }
- /**************************************************
- 函数名称:ead_rtc()
- 函数功能:读时钟函数,将读出的数据存入tmpdate缓存数组中
- ***************************************************/
- void read_rtc() //读时钟函数,将读出的数据存入tmpdate缓存数组中
- {
- IRcvStr(0x02,tmpdate,7);
- tmpdate[0]=tmpdate[0]&0x7f; //秒
- tmpdate[1]=tmpdate[1]&0x7f; //分
- tmpdate[2]=tmpdate[2]&0x3f; //时
- tmpdate[3]=tmpdate[3]&0x3f; //日
- tmpdate[4]=tmpdate[4]&0x07; //星期
- tmpdate[5]=tmpdate[5]&0x0f; //月
- tmpdate[6]=tmpdate[6]&0xff; //年
-
- }
- /**********************主函数*******************************************/
- void main()
- {
- init_lcd1602(); //1602初始化
- // rtc_init(); //时间初始化
-
- while(1)
- {
- read_rtc(); //读时间并处理
- write_firstline(5,tmpdate[6]); //显示年
- write_com(0x80+5);
-
- write_firstline(8,tmpdate[5]); //显示月
- write_com(0x80+8);
-
- write_firstline(11,tmpdate[3]); //显示日
- write_com(0x80+11);
-
- write_firstline(14,tmpdate[4]); //显示星期
- write_com(0x80+14);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
pcf8563 lcd1602.zip
(35.86 KB, 下载次数: 85)
|