微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机ds1302时钟显示

51单片机ds1302时钟显示

时间:10-02 整理:3721RD 点击:
ds1302时钟模块,并在数码管上显示时,分,秒,所用单片机是stc89c52。但程序貌似有点问题,显示不了,麻烦各位帮我看下程序哪里错了,不胜感激!
#include <reg52.h>
#include <intrins.h>
#include "ds1302.h"
unsigned char code table[]={
0x3f  , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d ,0x7d , 0x07 ,
0x7f  , 0x6f , 0x77 , 0x7c ,
0x39 , 0x5e , 0x79 , 0x71 ,0xbf
};
void main()
{
   uchar hour,minute,second;
   write(0x8e,0x00);//开
   write(0x80,0x00);//写秒钟值
   write(0x82,0x00);//写分钟值
   write(0x84,0x00);//写小时值
   write(0x8e,0x80);//关
   while(1)
           {       
            hour=read(0x85);
                minute=read(0x83);
                second=read(0x81);
                display(table[hour],table[minute],table[second]);
               
        }       
}

ds1302.h头文件的内容如下:
#ifndef  DS1302#define  DS1302
#define uchar unsigned char#define uint unsigned int
sbit  sclk= P2^1;               //实时时钟时钟线引脚 sbit  io  = P2^0;              //实时时钟数据线引脚 sbit  rst = P2^5;              //实时时钟复位线引脚  sbit  we=P2^7;sbit  du=P2^6;
delay(uchar i){        uchar j;        for(i;i>0;i--)                for(j=100;j>0;j--);}
//*********发送一个字节(8位)**********void send(uchar dt){  uchar i;   for(i=0;i<8;i++)  {    sclk=0;        io=dt&0x01;//取第一位        dt>>=1;//左移一位        sclk=1;//上升沿有效  }}
//*******写地址、数据*********void write(uchar addr,uchar dat){  rst=0;sclk=0;rst=1;  send(addr);//发送地址  send(dat);//发送数据  rst=0;}
//*****读取8位*******uchar receive(){   uchar i;   uchar dat=0;   //循环8次   for(i=0;i<8;i++)   {              sclk=1;           dat>>=1;         sclk=0;//下降沿读取         io=1;//读引脚前置一         if(io==1)dat|=0x80;
   }//此时dat为16进制比如说0x10   dat=(dat/16)*10+dat%16;   //转化为10进制,现在是10;   return(dat);//返回值
}
//******读时钟*******uchar read(uchar addr){  uchar dat=0;  rst=0;sclk=0;rst=1;  send(addr);     //发送地址  dat=receive();  //接收  rst=0;  return(dat);
}
void display(uchar hour,uchar minute,uchar second){                we=1;        P0=0xfe;        we=0;        P0=0;        du=1;        P0=hour;        du=0;        delay(100);
        we=1;        P0=0xfd;        we=0;        P0=0;        du=1;        P0=minute;        du=0;        delay(100);
        we=1;        P0=0xfb;        we=0;        P0=0;        du=1;        P0=second;        du=0;        delay(100);   }
#endif

不错的资料,值得收藏

不错的资料,值得收藏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top