打印

msp430 与ds12cr887

[复制链接]
1436|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiongbagan|  楼主 | 2011-10-21 16:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用msp430配合ds12cr887(3.3v)配合做万年历,程序如下:
#include <msp430x14x.h>
#include "BoardConfig.h"
#include "subfuncs.h"
#include "dispdata.h"



uchar count,shi,fen,miao;
uchar day,date,month,year;
uchar s1num;

//数据口全部连P6

#define dscs_1 P3OUT|=BIT4//3.4
#define dscs_0 P3OUT&=~BIT4
#define dsas_1 P3OUT|=BIT5//3.5
#define dsas_0 P3OUT&=~BIT5
#define dsrw_1 P3OUT|=BIT6//3.6
#define dsrw_0 P3OUT&=~BIT6
#define dsds_1 P3OUT|=BIT7//3.7
#define dsds_0 P3OUT&=~BIT7
#define dsirq_1 P5OUT|=BIT3//5.3
#define dsirq_0 P5OUT&=~BIT3

//sbit beep=P2^3;


void init()
{
  P3DIR|=0xf0;//P3.4---P3.7 设置为输出
  P5DIR|=BIT3;//P5.3 设置为输出
}





void write_ds(uchar add,uchar dat)//向ds12c887 里面写数据,参量包括地址和数据
{
   
    dsas_1;
        dsds_1;
        dsrw_1;
    dscs_0;
        P6DIR=0XFF;
    P6OUT=add;
        
    dsas_0;//add 送入芯片内部
    dsrw_0;
        
        P6DIR=0XFF;
    P6OUT=dat;
        
    dsrw_1;//数据送入芯片
    dsas_1;//恢复原状
    dscs_1;//恢复原状
}

uchar read_ds(uchar add)//读取数据
{
    uchar ds_date;
   
    dsas_1;
    dsds_1;
    dsrw_1;
    dscs_0;
        
        P6DIR=0XFF;
    P6OUT=add;
        
   
   
        dsas_0;
    dsds_0;
        
        P6DIR=0XFF;
    P6OUT=0xff;
        
        P6DIR=0X00;
    ds_date=P6IN;
        
    dsds_1;
    dsas_1;
    dscs_1;
        return ds_date;
}

void set_time()
{
    write_ds(4,3);
    write_ds(2,29);
    write_ds(0,50);

    write_ds(6,7);
    write_ds(7,15);
    write_ds(8,10);
    write_ds(9,11);

}

void set_alarm(uchar ashi,uchar afen,uchar amiao)
{
    write_ds(1,amiao);
    write_ds(3,afen);
    write_ds(5,ashi);
}

void main()//主函数是反复执行的。
{
   
        WDTCTL = WDTPW + WDTHOLD;            //关闭看门狗
        Ini_Lcd();
        init();
        
       write_ds(0x0A,0x20);// 设置日历芯片起振
        Delay_Nms(5);
        write_ds(0x0B,0x26);// 设置格式
        set_time();   
    while(1)
    {   
      
        miao=read_ds(0);
        Delay_Nms(5);
        fen=read_ds(2);
        Delay_Nms(5);
        shi=read_ds(4);
        Delay_Nms(5);;
        day=read_ds(6);
        Delay_Nms(5);
               
        date=read_ds(7);
        Delay_Nms(5);
        month=read_ds(8);
        Delay_Nms(5);
        year=read_ds(9);
        Delay_Nms(5);
               
        write_sfm(0x8c,miao);
        write_sfm(0x8a,fen);
        write_sfm(0x88,shi);

        write_sfm(0x90,year);
        write_sfm(0x92,month);
        write_sfm(0x94,date);
        write_sfm(0x86,day);
    }
}

遇到问题如下:
1.我在12864液晶上显示年月日,时分秒,但是秒钟总是冯7变0,如此两次后,遇到7会变24,然后遇到39后,跌落到32。。。。。。但是,分钟显示正常,60秒就会加一。
2.set_time()这个函数设置芯片的起始时间,时分秒的起始时间已经在液晶上正常呈现。但是,年月日的起始时间却不对,很不解为什么。因为大家也看到了,我设置年月日,时分秒的方式其实是一样的。

先谢谢各位大牛!

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

16

帖子

1

粉丝