搜索
bottom↓
回复: 5

DS1302的程序,显示有问题,就高手查看,哪里有错????

[复制链接]

出0入0汤圆

发表于 2012-8-3 13:26:17 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sck = P1^7;//
sbit io = P2^3;//
sbit rst = P1^3; //
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit buzzer=P0^6;

uchar time_data[7]={12,3,8,1,20,10,56};       
uchar code dm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};// 段码
uchar code wm[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};          //  位码
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//写数据 地址
uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};         //读数据 地址
uchar disp[8];//用于存放 处理函数处理完得到的十进制数 ,,
void delay(unsigned char z)
{
        while(z--);
}
void write_byte(unsigned char dat)
{
        uchar m;
        for(m=0;m<8;m++)
        {
                sck=0;
                io=dat&0x01;
                dat=dat>>1;
                sck=1;
        }
}

void wtite_ds1302(unsigned char add,unsigned char dat)
{
        rst=0;
        _nop_();
        sck=0;
        _nop_();
        rst=1;
        _nop_();
        write_byte(add);
        write_byte(dat);
        rst=0;
        _nop_();
        io=1;
        sck=1;
}

unsigned char read_ds1302(uchar add)
{
                unsigned char n,value;
                rst=0;
                _nop_();
                sck=0;
                _nop_();
                rst=1;
                _nop_();
                write_byte(add);
                for(n=0;n<8;n++)
                {
                               
                       
                                sck=0;
                                value=value>>1;
                                _nop_();
                                if(io)
                                       
                                value=value|0x80;
                                sck=1;
                               
                        }
                                rst=0;
                                _nop_();
                                sck=0;
                                _nop_();
                                sck=1;
                                io=1;

                        return          value;
}

void set()
{       
                unsigned char z,j;
               
                for(z=0;z<7;z++)
                {
                           j=time_data[z]/10;
                            time_data[z]=time_data[z]%10;
                            time_data[z]=time_data[z]+j*16;
                            
                }
                        wtite_ds1302(0x8e,0x00);
                        for(z=0;z<7;z++)
                {
                wtite_ds1302(write_add[z],time_data[z]);
                }
                wtite_ds1302(0x8e,0x80);
       
}

void read_rtc(void)
{                unsigned char s;
                for(s=0;s<7;s++)
                {
                        time_data[s]=read_ds1302(read_add[s]);
                }

}

/*void time_pros()//处理函数
{
         disp[0]=time_data[4]/16;//时 十位
         disp[1]=time_data[4]%16;//时个位
           disp[2]=3;                           //显示数字1
         disp[3]=time_data[5]/16;//分 十位
         disp[4]=time_data[5]%16;//分个位
         disp[5]=3;                         //显示数字1
         disp[6]=time_data[6]/16;//秒 十位
         disp[7]=time_data[6]%16;//秒 个位

}*/
void display()
{
                unsigned char i;
                P0=0xff;
         disp[0]=time_data[4]/16;//时 十位
         disp[1]=time_data[4]%16;//时个位
           disp[2]=3;                           //显示数字1
         disp[3]=time_data[5]/16;//分 十位
         disp[4]=time_data[5]%16;//分个位
         disp[5]=3;                         //显示数字1
         disp[6]=time_data[6]/16;//秒 十位
         disp[7]=time_data[6]%16;//秒 个位
                for(i=0;i<8;i++)
                {
                        P0=dm[disp[i]];           //段码
                        P25= 1;
                    P26= 1;
                        P27= 1;
                        P25= 0;
                    P26= 0;
                        P27= 0;
                        P0=wm[i];                   //位码
                        P25=0;
                    P26=1;
                        P27=1 ;
                        P25= 0;
                    P26= 0;
                        P27= 0;
                        delay(1000);
                }
}

void main()
{         
        uchar i;
        buzzer = 0;                    //高有效
        P25=1;
        P26=0;
        P27=1;
        P25=0;
        P26=0;
        P27=0;
         set();
         while(1)
         {
                         P25= 0;
                    P26= 0;
                        P27= 0;
                       
                        if(i==50)
                        {
                        read_rtc();       
                                i=0;
                        }
                         i++;
                        display();
               
         }
}

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-8-3 13:51:32 | 显示全部楼层
无图无真相,况且啥问题都不写

出0入0汤圆

发表于 2012-8-3 13:52:21 | 显示全部楼层
本帖最后由 lryxr2507 于 2012-8-3 13:57 编辑

说明显示时出现的问题,最后来张PP,这样长的程序不好看呢. (求助:发错了,怎样删除?)

出0入0汤圆

发表于 2012-8-3 13:52:57 | 显示全部楼层
说明显示时出现的问题,最好来张PP,这样长的程序不好看呢.

出0入0汤圆

发表于 2012-8-3 13:54:55 | 显示全部楼层
如果走着走着就走错了,你肯定是买到假货了

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-26 20:16

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

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