DS12C887时钟实例

2020-01-30 14:08发布

我也有一个用12864无字库屏+DS12C887的时钟实例,请大家分享。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
miyadai
2020-01-30 20:08
/*
                *******    基于STC89C52RC的万年历     ********
                功能:
                LCM显示使用太阳人SMG12864K9无字库显示屏和
                使用新型时钟日历芯片 DS12C887作为实时电子时钟时源
                (该芯片可以保留时间为10年)

                定义P0口为DS12C887芯片的复用地址数据总线
                    P1口为DS12C887芯片的控制总线
                        P3和P1口为LCM显示屏和DS12C887的控制总线

                作者:戴志波
                版本:Ver 1.0.0
                日期:2011.11.20
                备注:
                硬件平台基于哈工大的郭天祥老师的学习试验版TX-1C环境下
                此程序为学习版本,仅供学员参考使用。
*/

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit dula=P2^6;
sbit wela=P2^7;
sbit BGC = P3^6;                                                                //控制背光灯的按钮
sbit _BG = P3^5;                                                                //控制屏幕背光的控制指令
uchar bdata bgc_flag;
uchar code *hzcode;

extern uchar count,year,month,day,week,sshi,fen,miao;
extern uchar bdata flag;

extern void mcu_init(void);                                                                //系统初始化
extern void initlcm(void);                                                //初始化LCM
extern void lcdclear(uchar dat1,uchar dat2);        //写测试数据到LCM全屏
extern void read_logo_intr();
extern void keyscan();                                                        //键盘扫描函数
extern void delay_us(uint time);
extern void dishz(uchar x_add,uchar y_add,uchar code *p);//显示汉字
extern void dischar(uchar x_add,uchar y_add,uchar code *p);//显示字符
extern void pagelcdclear(uchar page,uchar dat1,uchar dat2);//清空一行内容

extern void write_miao_data(uchar dat);                                        //显示 秒函数
extern void write_fen_data(uchar dat);                                        //显示 分函数
extern void write_shi_data(uchar dat);                                        //显示 时函数
extern void write_day_data(uchar day);                                        //显示 天函数
extern void write_week_data(uchar week);                                //显示 星期函数
extern void write_month_data(uchar month);                                //显示 月函数
extern void write_year_data(uchar year);                                //显示 年函数

/////   DS12C887 相关函数   //////////////
extern void ds_init(void);
extern void write_ds(uchar add,uchar dat);
extern uchar read_ds(uchar add);
//extern void set_time();

void main()
{
        dula=0;                                                                                //  关闭P0口上的LED
        wela=0;                                                                                //        关闭P0口上的LED
        mcu_init();                                                                        //系统初始化
        ds_init();                                                                        //        初始化DS12C887芯片
        initlcm();                                                                        //        初始化SMG12864K9LCM液晶屏
        lcdclear(0x00,0x00);                                                //        打开液晶屏的背光灯
        _BG = 0;
        bgc_flag=0;
        read_logo_intr();
        //set_time();
       
        while(1)
        {
                keyscan();
                if(flag==0)
                {
                        miao=read_ds(0);                                        //读取秒数据                参考 DS12C887的DATASHEET第13页
                        fen=read_ds(2);                                                //读取分数据                Table 2A. Time, Calendar, and Alarm Data Modes—BCD Mode (DM = 0)
                        sshi=read_ds(4);                                        //读取时数据
                        week=read_ds(6);                                        //读取星期数据
                        day=read_ds(7);                                                //读取日数据
                        month=read_ds(8);                                        //读取月数据
                        year=read_ds(9);                                        //读取年数据
                        delay_us(2000);                                                //20ms
                        write_miao_data(miao);                                //向LCM屏幕写秒数据
                        write_fen_data(fen);                                //向LCM屏幕写分数据
                        write_shi_data(sshi);                                //向LCM屏幕写是数据
                        write_week_data(week);                                //向LCM屏幕写星期数据
                        write_day_data(day);                                //向LCM屏幕写日数据
                        write_month_data(month);                        //向LCM屏幕写月数据
                        write_year_data(year);                                //向LCM屏幕写年数据
                }
                if (bgc_flag == 0)
                {
                        if (BGC == 0)                                                   //判断背光控制按钮是否按下
                        {
                                delay_us(2000);                                        //20ms
                                if (BGC == 0)
                                {
                                        while (!BGC);
                                        _BG = 1;
                                        bgc_flag = 1;
                                }                       
                        }
                }
                if (bgc_flag == 1)
                {
                        if (BGC == 0)                                                   //判断背光控制按钮是否按下  
                        {
                                delay_us(2000);                                        //20ms
                                if (BGC == 0)
                                {
                                        while (!BGC);
                                        _BG = 0;
                                        bgc_flag = 0;
                                }                       
                        }
                }
        }
}

一周热门 更多>