导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]我的1302为什么会写不进去呀,各位DX帮看下很简单

* 100526: [求助]我的1302为什么会写不进去呀,各位DX帮看下很简单的程序

   雷影 
雷影发表的帖子 

 [求助]我的1302为什么会写不进去呀,各位DX帮看下很简单的程序
各位DX:小弟这两天买了个1302想玩下,可是用下面最简单的程序来先初始化然后再读出时间进行显示,结果是发现1302写不进初始值,但能正常读出时间。请大家帮忙找下程序中的问题。硬件是没有问题的,是用别人已经做成功的板子来写的。先谢谢各位了!
#include  <reg51.h>  
#define uchar unsigned char
#define uint unsigned int
#define ADB P0

sbit ELCD=P2^5;
sbit R_W=P2^6;
sbit RS=P2^7;
sbit clk=P3^3;
sbit da=P3^4;
sbit rst=P3^5;

uchar code discode[]={'0','1','2','3','4','5','6','7','8','9'};//LCD显示0~9的
ASSII码
uchar sec=0;uchar hsec=0;uchar lsec=0;
uchar min=0;
uchar hmin=0;
uchar lmin=0;
uchar hour=0;uchar hhour=0;uchar lhour=0;

initlcd();//LCD初始化
wrcm(uchar a);//LCD写命令字
wrda(uchar b);//LCD写数据
init1302();//1302初始化
void wr1302(uchar adr1302,uchar dat1302);//写1302
uchar re1302(uchar adr302);//读1302
retime();//读时间
dotime();//秒、分、时,时间处理
lcddisp();//LCD显示
Delay();//用延时来代替查询LCD的BF忙信号

main()
{
  initlcd();
  init1302();
  while(1)
{
  retime();
  dotime();
  lcddisp();
 
}
}
//*****************************
retime()
{
 sec=re1302(0x81);
 min=re1302(0x83);
 hour=re1302(0x85);
}
//*****************************
dotime()
{
 hsec=sec&0xf0;
 hsec=hsec>  >  4;
 lsec=sec&0x0f;//拆出秒的十位、个位

 hmin=min&0xf0;
 hmin=hmin>  >  4;
 lmin=min&0x0f;//拆出分的十位、个位

 hhour=hour&0xf0;
 hhour=hhour>  >  4;
 lhour=hour&0x0f;//拆出时的十位、个位
}
//*****************************
lcddisp()
{
 wrcm(0x84);
 wrda(discode[hhour]);
 wrda(discode[lhour]);//显示时
 wrda(0x3a);//显示时和分的分隔符:
 wrda(discode[hmin]);
 wrda(discode[lmin]);//显示分
 wrda(0x3a);//显示分和秒的分隔符:
 wrda(discode[hsec]);
 wrda(discode[lsec]);//显示秒
}
//*****************************
init1302()
{
 wr1302(0x8e,0x00);//打开写保护
 wr1302(0x80,0x80);//秒初始化,关振荡器,但读出时间时发现秒仍旧正常走时。
 wr1302(0x82,0x01);//分初始化
 wr1302(0x84,0x01);//时初始化,分和时读出后显示的是乱码
 
}//说明是初始化时写不进去,这是为什么呢?

//****************************
initlcd()
{
  wrcm(0x00);
  wrcm(0x38);
  wrcm(0x0c);
  wrcm(0x06);
  }
//****************************
wrcm(uchar a)
{
 ELCD=0;
 R_W=0;
 RS=0;
 ELCD=1;
 ADB=a;
 ELCD=0;
 Delay();
 }
//*****************************
wrda(uchar b)
{
 ELCD=0;
 R_W=0;
 RS=1;
 ELCD=1;
 ADB=b;
 ELCD=0;
 Delay();
 }
//******************************
void wr1302(uchar adr1302,uchar dat1302)
{
 char i,m;
 clk=0;
 rst=1;
 for(i=0;i  <8;i++)
 {
  m=adr1302&0x01;
  if(m)
  da=1;
  else da=0;
  clk=0;
  //Delay();
  clk=1;
  adr1302=adr1302>  >  1;
 }
 for(i=0;i  <8;i++)
 {
  m=dat1302&0x01;
  if(m)
  da=1;
  else da=0;
  clk=0;
  //Delay();
  clk=1;
  adr1302=adr1302>  >  1;
 }
 rst=0;
}
//****************************
uchar re1302(uchar adr1302)
{
 uchar i,m;
 clk=0;
 rst=1;
 for(i=0;i  <8;i++)
 {
  if((adr1302>  >  i)&0x01)
  da=1;
  else da=0;
  clk=0;
 // Delay();
  clk=1;
  
 }
  m=0;
  for(i=0;i  <8;i++)
  {//da=1;
   m=m>  >  1;
   clk=1;
   //Delay();
   clk=0;
   if(da)
   m=m|0x80;
   else m=m&0x7f;
  }
  rst=0;
  return(m);
}
//****************************
Delay()
{
 uchar j;
 for(j=0;j  <248;j++);
}
//***************************
 


发表时间:2006年12月11日19:21:21

  
回复该帖

本主题共有 3 帖,分页:>>>>>该主题的所有内容[3]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  100608.[详细][讨论]
摘要:就没有人能发现问题的所在吗?人气不怎么旺呀......(42字)
- [雷影][912次] 2006年12月13日

  100614.[详细]wr1302()函数有错
摘要:wr1302()函数有错 for(i=0;i  <8;i++)  {   m=dat1302&0x01;   if(m)&n......(185字)
- [glgsy][917次] 2006年12月13日

[上一篇帖子]:MSP430系列要多少钱啊哪位大姐大哥知道说声啊
[下一篇帖子]:楼上的,谢了~顺便再想问一个,针对一个I2Cflash器件,如何确定其上拉电阻的阻值?