导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教HT1380???[fxg520]

 *第21141篇: 请教HT1380???

  
楼 主:fxg520 2004年4月19日22:48
 请教HT1380???
谁HT1380与2051的读写程序,调试过的能好用的。
我刚得了一块,上网查了资料,自己写了程序,但是不行。
我的硬件,HT1380接了32KHZ晶振,电容为4P(不知道4P够不够)
我量了HT1380的X1,X2脚,电压为0。4,0。3V
我的程序如下,有兴趣的帮忙看看,先谢谢了!!!!
#include   <at89x051.h>  
#define din P1_7//max7219//显示用的是MAX7219
#define load P1_6//max7219
#define clok P1_5//max7219
#define clock_clk P1_4//HT1380//脚定义
#define clock_dat P1_3//HT1380
#define clock_rst P1_2//HT1380

#define a0 ACC_0//这些是从网上COPY的程序
#define a1 ACC_1
#define a2 ACC_2
#define a3 ACC_3
#define a4 ACC_4
#define a5 ACC_5
#define a6 ACC_6
#define a7 ACC_7 

unsigned char sec1,sec2,min1,min2,hou1,hou2,dat1,dat2,mon1,mon2,day,yea1,yea2,tem;
//这些变量一看就知道是用来存放时间的了,请不要头疼

void clock_out(unsigned char dd) 
{
    ACC=dd;
    clock_dat=a0;clock_clk=1;clock_clk=0;
    clock_dat=a1;clock_clk=1;clock_clk=0;
    clock_dat=a2;clock_clk=1;clock_clk=0;
    clock_dat=a3;clock_clk=1;clock_clk=0;
    clock_dat=a4;clock_clk=1;clock_clk=0;
    clock_dat=a5;clock_clk=1;clock_clk=0;
    clock_dat=a6;clock_clk=1;clock_clk=0;
    clock_dat=a7;clock_clk=1;clock_clk=0;
}
unsigned char clock_in(void) 
{
    clock_dat=1;
    a0=clock_dat;
    clock_clk=1;clock_clk=0;a1=clock_dat;
    clock_clk=1;clock_clk=0;a2=clock_dat;
    clock_clk=1;clock_clk=0;a3=clock_dat;
    clock_clk=1;clock_clk=0;a4=clock_dat;
    clock_clk=1;clock_clk=0;a5=clock_dat;
    clock_clk=1;clock_clk=0;a6=clock_dat;
    clock_clk=1;clock_clk=0;a7=clock_dat;
    return(ACC);
}
unsigned char read_clock(unsigned char ord) 
{
    unsigned char dd=0;
    clock_clk=0;
    clock_rst=0;
    clock_rst=1;
    clock_out(ord);
    dd=clock_in();
    clock_rst=0;
    clock_clk=1;
    return(dd);
}
void write_clock(unsigned char ord,unsigned char dd) 
{
    clock_clk=0;
    clock_rst=0;
    clock_rst=1;
    clock_out(ord);
    clock_out(dd);
    clock_rst=0;
    clock_clk=1;
}

void send(unsigned char add,unsigned char dat)//这些是MAX7219显示程序,绝对好用
我正用稳着,有想要MAX7219显示程序的,尽管拷去。
{
unsigned char i,j,sen;
load=0;
i=0;
while(i  <16)
{
if(i  <8) sen=add;
else sen=dat;
for(j=0;j  <=7;j++)
  {
   din=sen&0x80;
   clok=1;
   clok=0;
   sen  <  <=1;
  }
i=i+8;
}
load=1;
}

void xianshi()//把读出的数据转换成显示的数据
{
send(0x09,0x0ff);//段码都译码
send(0x0a,0x01);//显示亮度11/32
send(0x0b,0x07);//7dig display
send(0x0c,0x01);//选择NOrmal
  send(0x01,sec1);
  send(0x02,sec2);
  send(0x03,min1);
  send(0x04,min2);
  send(0x05,hou1);
  send(0x06,hou2);
  send(0x07,dat1);
  send(0x08,dat2);
}

void readdat()//读HT1380数据
{
  //读秒
  tem=read_clock(0x81);
  sec1=tem&0x0f;
  tem>  >  =4;
  sec2=tem&0x0f;
  //读分
   tem=read_clock(0x83);
  min1=tem&0x0f;
  tem>  >  =4;
  min2=tem&0x0f0;
//读时
   tem=read_clock(0x85);
  hou1=tem&0x0f;
   tem>  >  =4;
  hou2=tem&0x0f0;
  //读日期
   tem=read_clock(0x87);
  dat1=tem&0x0f;
   tem>  >  =4;
  dat2=tem&0x0f0;
//读月
   tem=read_clock(0x89);
  mon1=tem&0x0f;
   tem>  >  =4;
  mon2=tem&0x0f0;
  //读星期
   tem=read_clock(0x8b);
  day=tem&0x0f;
//读年
   tem=read_clock(0x8d);
  yea1=tem&0x0f;
   tem>  >  =4;
  yea2=tem&0x0f0;
}

void chushi()//这就是对HT1380的初始化
,不知道对不对
{
  write_clock(0x8e,0);//允许写
  write_clock(0x80,0);//开时钟并且写秒为0
  write_clock(0x82,0);//写分为0
  write_clock(0x84,0);//写小时为12
  write_clock(0x86,0x01);//写日期为1号
  write_clock(0x88,0x01);//写月为1月
  write_clock(0x8a,0x06);//写星期为星期六
  write_clock(0x8c,0x02);//写年为2000
}

void main()//主程序
{
chushi();//初始化
while(1)
{
  readdat();//读HT1380数据
  xianshi();//把读出的数据转换成显示的数据
}
}
 


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:单片机开发项目:寻合作

[下一篇主题]:请教一个问题