最近学IIC,拿PCF8563做个钟!在OURAVR得到很多帮助,再次感谢!
冲压发动机2010/06/30电子技术 IP:浙江
IMG_0161.jpg





高手不要笑啊!
+100  科创币    虎哥    2010/06/30 应该详细讲下电路、制作 ..
来自:电子信息 / 电子技术
11
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
冲压发动机 作者
13年11个月前 IP:未同步
230387
哦!那就说说吧!放芯片那板是我用油性笔画的。    电路很简单。相信大家都懂!




#include<reg52.h>
#define uchar unsigned char
sbit sda=P1^7;
sbit scl=P1^6;
sbit w1=P2^0;
sbit w2=P2^1;
sbit w3=P2^2;
sbit w4=P2^3;
sbit w5=P2^4;
sbit w6=P2^5;
sbit w7=P2^6;
sbit w8=P2^7;






unsigned char leddata[]={

                0xC0,  //"0"
                0xF9,  //"1"
                0xA4,  //"2"
                0xB0,  //"3"
                0x99,  //"4"
                0x92,  //"5"
                0x82,  //"6"
                0xF8,  //"7"
                0x80,  //"8"
                0x90,  //"9"
                0x88,  //"A"
                0x83,  //"B"
                0xC6,  //"C"
                0xA1,  //"D"
                0x86,  //"E"
                0x8E,  //"F"
                0x89,  //"H"
                0xC7,  //"L"
                0xC8,  //"n"
                0xC1,  //"u"
                0x8C,  //"[s:9]"
                0xA3,  //"o"
                0xBF,  //"-"
                0xFF,  //熄灭
                0xFF  //自定义

                         };

uchar t, a,month,day,fen,shi,miao;
uchar mo1,mo2,f1,f2,d1,d2,s1,s2;
void disp(uchar mo1,uchar mo2,uchar day1,uchar day2,uchar shi1,uchar shi2,fen1,uchar fen2);
void delay1(uchar x);
void read_8563();
void delay()
{

   ; ;

}

void start()  //开始信号
{    
    
    sda=1;
    delay1(1);
    //delay1(1);
    disp(mo1,mo2,d1,d2,s1,s2,f1,f2);
    scl=1;
    delay1(1);
    //delay1(1);
    disp(mo1,mo2,d1,d2,s1,s2,f1,f2);
    sda=0;
    delay();
    
}

void stop()   //停止
{
    sda=0;
    delay();
    scl=1;
    delay();
    sda=1;
    delay();
}

void respons()  //应答
{
    uchar i;
    scl=1;
    delay();
    while((sda==1)&&(i<250))i++;
    scl=0;
    delay();
}

void init()
{
    sda=1;
    delay();
    scl=1;
    delay();
}

void write_byte(uchar date)
{
    uchar i,temp;
    temp=date;


    for(i=0;i<8;i++)
    {
        temp=temp<<1;
        scl=0;
        delay();
        sda=CY;
        delay();
        scl=1;
        delay();
    //    scl=0;
     //   delay();
    }
    scl=0;
    delay();
    sda=1;
    delay();
}

uchar read_byte()
{
    uchar i,k;
    scl=0;
    delay();
    sda=1;
    delay();
    for(i=0;i<8;i++)
    {
        scl=1;
        delay();    
        k=(k<<1)|sda;
        scl=0;
        delay();    
    }
    return k;
}

void delay1(unsigned int x)
{
    uchar a,b;
    for(a=x;a>0;a--)
     for(b=100;b>0;b--);
}

void write_add(uchar address,uchar date)
{
    start();
    write_byte(0xa2);
    respons();

    write_byte(address);
    respons();
    write_byte(date);
    respons();
    stop();
}

uchar read_add(uchar address)
{
    uchar date;
    start();
    write_byte(0xa2);
    respons();
    write_byte(address);
    respons();
    start();
    write_byte(0xa3);
    respons();
    date=read_byte();
    stop();
    return date;
}


void uart()
{
     TMOD=0x21;//设置定时器1为工作方式2,8位自动重装,设定时器0为16位定时器。    d=0;    
    TH1=0xfd;
    TL1=0xfd;
    TR0=1;
    ET0=1;
    TH0=0x4c;
    TL0=0x00;

    
    
    TR1=1;//启动定时器1
    REN=1;// 允许串行接收。
    
    SM1=1; //方式1,8位UART
    EA=1; //开总中断
    ES=1; //开串行中断



}
void main()
{
    init();
    uart();
    write_add(0x07,0x06);    //月
    delay1(100);
    delay1(100);



    write_add(0x05,0x29); // 日
    delay1(100);
    delay1(100);

  
       write_add(0x04,0x23); //时
    delay1(100);
    delay1(100);


    write_add(0x03,0x29);  //分
    delay1(100);
    delay1(100);


     P2=0xff;


    
    while(1)
    {
    
          mo1=month/10;
           mo2=month%10;
           d1=day/10;
           d2=day%10;
           s1=shi/10;
           s2=shi%10;
           f1=fen/10;
           f2=fen%10;
          
           disp(mo1,mo2,d1,d2,s1,s2,f1,f2);
              
          if(t==20)
          {    
              t=0;
            read_8563();
            ES=0;
            SBUF=miao;
            while(!TI);
            TI=0;
            ES=1;
          
          
            }
     }

}


void disp(uchar mo1,uchar mo2,uchar day1,uchar day2,uchar shi1,uchar shi2,fen1,uchar fen2)
{
w1=0;
P0=leddata[mo1];
delay1(10);
w1=1;
P0=0xff;

w2=0;
P0=leddata[mo2];
delay1(10);
w2=1;
P0=0xff;


w3=0;
P0=leddata[day1];
delay1(10);
w3=1;
P0=0xff;

w4=0;
P0=leddata[day2];
delay1(10);
w4=1;
P0=0xff;

w5=0;
P0=leddata[shi1];
delay1(10);
w5=1;
P0=0xff;

w6=0;
P0=leddata[shi2];
delay1(10);
w6=1;
P0=0xff;

w7=0;
P0=leddata[fen1];
delay1(10);
w7=1;
P0=0xff;

w8=0;
P0=leddata[fen2];
delay1(10);
w8=1;
P0=0xff;    



}

void read_8563()  
   {    
       miao=read_add(0x02)&0x7f;//获取秒数据  
      /* miao=((miao&0xf0)>>4&0x0f)*10+(miao&0x0f);//BCD码转换成10进制数  
   if(miao>=60){miao=0;} */

    

    

   fen=read_add(0x03)&0x7f;//获取分钟  
   fen=((fen&0xf0)>>4&0x0f)*10+(fen&0x0f);//BCD码转换成10进制数  
   if(fen>=60){fen=0;}  
        

   shi=read_add(0x04)&0x3f;//获取小时  
   shi=((shi&0xf0)>>4&0x0f)*10+(shi&0x0f);//BCD码转换成10进制数  
   if(shi>=24){shi=0;}  
    

   day=read_add(0x05)&0x3f;//获取日数据  
        day=(( day&0xf0)>>4&0x0f)*10+( day&0x0f);//BCD码转换成10进制数  
   if( day>=31){ day=0;}  
    

  /* week=read_add(0x06)&0x07;//获取星期  
   if(week>6){week=0;} */
        
   month=read_add(0x07)&0x1f;//获取月  
   month=((month&0xf0)>>4&0x0f)*10+(month&0x0f);//BCD码转换成10进制数  
   if(month>=24){month=0;}  
    
  /* year=read_add(0x08)&0xff;//获取年  
   year=((year&0xf0)>>4&0x0f)*10+(year&0x0f);//BCD码转换成10进制数  
   delay1(100); */  
   }  


void time()    interrupt 1
{
    TH0=0x4c;
    TL0=0x00;
    t++;


}
   void ser() interrupt 4
{
    RI=0;
    P0=SBUF;
    
}
+300
科创币
warmonkey
2010-06-30
原创
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
立蛋
13年11个月前 IP:未同步
230414
没有很好的逻辑思维我,写不出来。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
冲压发动机作者
13年11个月前 IP:未同步
230415
呵!有分加!谢谢!我还要加把油!
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
87685302
13年11个月前 IP:未同步
230443
我有一个老式单片机谁要?我当时花300在武汉力源邮购买的 用BASIC语句的 除了9伏层叠电池没电了之外其他包装盒说明书电脑连接线程序软盘都全新。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
AsyncMaster
13年11个月前 IP:未同步
230449
一个单片机居然要300……无语
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
的卢宝马
13年11个月前 IP:未同步
230467
引用第4楼87685302于2010-06-30 23:49发表的  :
我有一个老式单片机谁要?我当时花300在武汉力源邮购买的 用BASIC语句的 除了9伏层叠电池没电了之外其他包装盒说明书电脑连接线程序软盘都全新。

额 我收集了一套夏普的PC1500,带打印的。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小特斯拉圈圈
13年11个月前 IP:未同步
230497
引用第4楼87685302于2010-06-30 23:49发表的  :
我有一个老式单片机谁要?我当时花300在武汉力源邮购买的 用BASIC语句的 除了9伏层叠电池没电了之外其他包装盒说明书电脑连接线程序软盘都全新。

300.............
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
stitch
13年11个月前 IP:未同步
230540
[s:247] 居然要300大洋……………………什么单片机啊?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
shiaki
13年11个月前 IP:未同步
230585
估计是开发板吧?BASIC stamp?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
nhlijiaming
13年11个月前 IP:未同步
231062
这里是KC,不是ourdev........
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
冲压发动机
笔友
文章
28
回复
174
学术分
0
2006/03/11注册,3年10个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}