2721|2

89

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

帮我看下程序,为什么显示不出来用DS1302和1602显示 [复制链接]

/*********************************包含头文件********************************/
#include "reg51.h"
#include<intrins.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*********************************端口定义**********************************/
sbit DS1302_CLK = P1^0;
sbit DS1302_IO  = P1^1;
sbit DS1302_RST = P1^2;

sbit dula=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
/******************************定义全局变量*********************************/
unsigned char second,minute,hour,week,day,month,year;  //秒、分、时、星期、日、月、年
unsigned char time[]={0x06,0x03,0x14,0x03,0x12,0x30,0x00}; //初始时间数组
/****************************************************************************
函数功能:数码管扫描延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(uint t)     //50us
{
char i;
for(;t>0;t--)
 for(i=19;i>0;i--);
}

/*****************************************************************************
函数功能:向DS1302送一字节数据子程序
入口参数:
出口参数:
*****************************************************************************/
void InputByte(unsigned char byte1)
{
 char i;
 for(i=8;i>0;i--)
 {
  DS1302_IO=(bit)(byte1&0x01);
  DS1302_CLK=1;
  _nop_();
  DS1302_CLK=0;
  byte1>>=1;
 }
 
}

/*****************************************************************************
函数功能:读DS1302一个字节子程序
入口参数:
出口参数:
*****************************************************************************/
unsigned char outputbyte(void) 
{
 unsigned char i;
 unsigned ucdat=0;
 for(i=8;i>0;i--)
 {
  DS1302_IO=1;
  ucdat>>=1;
  if(DS1302_IO)ucdat|=0x80;
  DS1302_CLK=1;
  _nop_();
  DS1302_CLK=0;
  }
  return(ucdat);
}

/*****************************************************************************
函数功能:向DS1302某地址写一字节数据子程序
入口参数:addr,TDat
出口参数:
*****************************************************************************/
void write_ds1302(unsigned char addr,unsigned char TDat)
{
 DS1302_RST=0;
 _nop_();
 DS1302_CLK=0;
 _nop_();
 DS1302_RST=1;
  InputByte(addr);
 _nop_();
 InputByte(TDat);
 DS1302_CLK=1;
 _nop_();
 DS1302_RST=0;
}

/*****************************************************************************
函数功能:读DS1302地址子程序
入口参数:add
出口参数:timedata
*****************************************************************************/
unsigned char read_ds1302(unsigned char addr)
{
 unsigned char timedata;
 DS1302_RST=0;
 _nop_();
 DS1302_CLK=0;
 _nop_();
 DS1302_RST=1;
 InputByte(addr);
 timedata=outputbyte();
 DS1302_CLK=1;
 _nop_();
 DS1302_RST=0;
 return(timedata);
}

/*****************************************************************************
函数功能:初始化DS1302子程序
入口参数:time[](全局变量)
出口参数:
*****************************************************************************/
void initial_ds1302()
{
 write_ds1302(0x8e,0x00);  //写保护寄存器,在对时钟或RAM写前WP一定要为0
 write_ds1302(0x8c,time[0]);  //年
 write_ds1302(0x88,time[1]);  //月
 write_ds1302(0x86,time[2]);  //日
 write_ds1302(0x8A,time[3]);  //星期
 write_ds1302(0x84,time[4]);  //时
 write_ds1302(0x82,time[5]);  //分
 write_ds1302(0x80,time[6]);  //秒
 write_ds1302(0x8e,0x80);  //写保护寄存器
}

/*****************************************************************************
函数功能:读DS1302时间子程序
入口参数:
出口参数:全局变量(second,minute,hour,week,day,month,year)
*****************************************************************************/
void read_time()
{
 second=read_ds1302(0x81);  //秒寄存器
 minute=read_ds1302(0x83);  //分
 hour=read_ds1302(0x85);   //时
 week=read_ds1302(0x8B);   //星期
 day=read_ds1302(0x87);   //日
 month=read_ds1302(0x89);  //月
 year=read_ds1302(0x8d);   //年
}


void write_com(uchar com)
{
 P0=com;
 rs=0;
 lcden=0;
 _nop_();
 lcden=1;
 _nop_();
 lcden=0;
 
}
//液晶读写程序//
void write_date(uchar date)
{
 P0=date;
 rs=1;
 lcden=0;
 _nop_();
 lcden=1;
 _nop_();
 lcden=0;
 
}

void init()
{
 dula=0;
 wela=0; 
 delay(300);
 write_com(0x38);
 delay(100);
 write_com(0x38);
 delay(100);
 write_com(0x38);
 delay(100);
 write_com(0x38);
 delay(100);
 write_com(0x0f);
 delay(100);
 write_com(0x06);
 delay(100);
 write_com(0x01);
 delay(100);
}
//液晶显示时间程序//
void time_display()
{
 write_com(0x80);
 write_date(year);
  write_com(0x80+5);
 write_date(month);
write_com(0x80+8);
 write_date(day);
 write_com(0x80+11);
write_date(week);

/*****************************************************************************
函数功能:主程序
入口参数:
出口参数:
*****************************************************************************/
void main(void)
{
 init();
 initial_ds1302();    //初始化DS1302
  
 while(1)
 {
  read_time();    //读取时间
  time_display();     //显示时间
 }
}

此帖出自51单片机论坛

最新回复

那谁知道啊。不是没读出来就是没写进去。给你个能用的自己看吧.里面有DS1302和1602液晶,还有其他的,自己找有用的 吧,有protues仿真,自己可以仿真一下看看!  详情 回复 发表于 2012-6-11 21:02
点赞 关注
 

回复
举报

89

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
我显示的都是乱码
此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
那谁知道啊。不是没读出来就是没写进去。给你个能用的自己看吧.里面有DS1302和1602液晶,还有其他的,自己找有用的 吧,有protues仿真,自己可以仿真一下看看!

1302.rar

105.05 KB, 下载次数: 19

此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表