搜索
bottom↓
回复: 1

请帮我看看这DS12c887的程序那里错了

[复制链接]

出0入0汤圆

发表于 2012-5-10 20:55:41 | 显示全部楼层 |阅读模式
对DS12C887仿真的时候就只显示最近的时间,就是不走。
因为带字库的12864仿真不了,所以只仿真887。

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

sbit lcdne=P3^5;
sbit lcdrs=P3^7;
sbit lcdrw=P3^6;

/*DS12C887时实时钟芯片使能位定义*/
sbit dscs=P1^7;
sbit dsas=P1^6;
sbit dsrw=P1^5;
sbit dsds=P1^4;

char e[]="星期";
char f[]="时";
char g[]="分";
char h[]="秒";
char s1[]="一";
char s2[]="二";
char s3[]="三";
char s4[]="四";
char s5[]="五";
char s6[]="六";
char s7[]="日";


void write_ds(uchar add,uchar date);
void write_com(uchar com);
void write_date(uchar date);
uchar miao,shi,fen,xq,ri,yue,nian;


//**屏蔽内容**屏蔽内容****/
void delay(uchar i)   
{
    for(;i>0;i--);   
}

//*屏蔽内容**屏蔽内容***/
void delay1(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}


//*屏蔽内容*****887intel总线写时序***屏蔽内容***/
void write_ds(uchar add,uchar date)
{
    dscs=0;
    dsds=1;
    dsrw=1;
    dsas=1;   


    P0=add;
   
    dsas=0;
    dsrw=0;

    P0=date;
   
    dsrw=1;
    dsas=1;
    dscs=1;               
}       

/*void set_time()
{
write_ds(0x0A,0x20);
write_ds(0x0B,0x26);//第一次使用时钟时打开振荡器用的

write_ds(2,18);//初始化分钟
write_ds(4,19);//初始化小时
write_ds(9,9);//初始化年

write_ds(8,3);//初始化月
write_ds(7,30);//初始化日
write_ds(6,1);

} */

//*屏蔽内容******887intel总线读时序**屏蔽内容***/
uchar read_ds(uchar add)
{
    uchar ds_date;
    dscs=0;
    dsrw=1;
    dsds=1;
    dsas=1;
   
   
   
   
    P0=add;

    dsas=0;
    dsds=0;

    P0=0xff;

    ds_date=P0;

    dsds=1;
    dsas=1;
    dscs=1;
    return ds_date;   
}  



/*//DS12C887初始化函数
void ds_int()
{
        dsas=0; dsds=0; dsrw=0;
        write_ds(0x0a,0x20);//DS12CR887寄存器A功能设置,开启时钟振荡器
        write_ds(0x0b,0x06);//寄存器B功能设置,不开启闹钟中断使能,数据模式为二进制,24小时模式。
        //ds_write(4,0x8);ds_write(2,0x00);ds_write(0,0x00); //给DS12CR887的时分秒赋值,开机后显示8:00:00
}*/       

//*屏蔽内容**12864忙检测***屏蔽内容*/
void buys()
{
   
    P2=0xff;
    lcdrs=0;
    lcdrw=1;
    lcdne=1;
    if(P0^7==1)
    delay1(2);
    lcdne=0;

}       
//*屏蔽内容***12864写命令***屏蔽内容*/
void write_com(uchar com)
{
    buys();
    lcdrw=0;
    lcdrs=0;
    lcdne=1;
        delay1(2);
    P2=com;
        delay1(2);
    lcdne=0;
    P2=0xff;
}  

//*屏蔽内容***12864写数据***屏蔽内容*/
void write_date(uchar date)
{
    buys();
    lcdrw=0;
    lcdrs=1;
    lcdne=1;
        delay1(2);
    P2=date;
        delay1(2);
    lcdne=0;
        delay1(2);
    P2=0xff;
}

//*屏蔽内容***12864初始化***屏蔽内容*/
void init()
{
     delay(50);
      
     write_com(0x30);

     write_com(0x06);
     write_com(0x0c);
     write_com(0x00);
     write_com(0x06);
}

void write_sfs(uchar add,uchar date)
{
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x88+add);
    write_date(0x30+shi);
    write_date(0x30+ge);
}

//*屏蔽内容***星期显示地址,数据***屏蔽内容**//
void write_sfq(uchar add,uchar date)
{
  uchar i;
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x90+add);
    if(ge==1)
     {
       for(i=0;i<2;i++)
       write_date(s1[i]);
     }
    else if(ge==2)
     {
         for(i=0;i<2;i++)
     write_date(s2[i]);
     }
    else if(ge==3)
     {
         for(i=0;i<2;i++)
     write_date(s3[i]);
     }
    else if(ge==4)
     {
         for(i=0;i<2;i++)
     write_date(s4[i]);
     }
    else if(ge==5)
     {
         for(i=0;i<2;i++)
     write_date(s5[i]);
     }
    else if(ge==6)
     {
         for(i=0;i<2;i++)
     write_date(s6[i]);
     }
    else if(ge==7)
     {
         for(i=0;i<2;i++)
     write_date(s7[i]);
     }
  
}
//*屏蔽内容****日显示地址,数据***屏蔽内容****
void write_sfm(uchar add,uchar date)
{
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x80+add);
    write_date(0x30+shi);
    write_date(0x30+ge);
}
   

//*屏蔽内容**屏蔽内容**屏蔽内容**屏蔽内容**屏蔽内容**屏蔽内容**屏蔽内容**屏蔽内容**/
void main()
{
        uchar i;
    delay1(50);
    init();
        //ds_int();
        //set_time();

        write_com(0x90+0x03);
    for(i=0;i<4;i++)
    write_date(e[i]);

    write_com(0x80+1);
    write_date(2+48);
    write_date(48);
   
    write_com(0x88+0x02);
    for(i=0;i<2;i++)
    write_date(f[i]);
   
    write_com(0x88+4);
    for(i=0;i<2;i++)
    write_date(g[i]);
   
    write_com(0x88+6);
    for(i=0;i<2;i++)
    write_date(h[i]);           
        while(1)
        {   
               miao=read_ds(0);    //读秒
            write_sfs(5,miao);
            fen=read_ds(2);     //读分
            write_sfs(3,fen);   
            shi=read_ds(4);     //读时
            write_sfs(1,shi);
            xq=read_ds(6);       //读星期
            write_sfq(5,xq);      
            ri=read_ds(7);       //读日
            write_sfm(6,ri);
            yue=read_ds(8);     //读月
            write_sfm(4,yue);
            nian=read_ds(9);    //读年
            write_sfm(2,nian);                                   
       
            }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-5-10 20:58:18 | 显示全部楼层
就只停在这里不走,是正割程序都有问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表