qianhailiang 发表于 2005-3-25 18:45:43

请斑竹指教一个问题!!!

<P>#include &lt;reg51.h&gt;
#include &lt;intrins.h&gt; </P>
<P>#define SDA P27   
#define SCL P26   
#define uchar unsigned char
sbit RS=P0^7;
sbit RW=P0^6;
sbit E=P0^5;
sbit P26 = P2^6;      //file://x1226
sbit P27 = P2^7;
sbit rst = P2^1;
void write1(void);
void write2(void);
void Wait(void);
void writeByte(uchar ucDa);
uchar readByte(void);
void write1302(uchar addr,uchar ucDa);
ucharread1302 (uchar addr);
void set(uchar *pSecDa);
void get1302(uchar ucCurtime[]);
void analyze(void);
uchar temp;
uchar a,b;</P>
<P>
void Wait(){
uchar i;
for(i=0;i&lt;10;i++){ _nop_();}
}</P>
<P>void writeByte(uchar ucDa)//file://送一字节数据到slave,并返回确认信号
{
uchar i;
ACC=ucDa;
for(i=0;i&lt;8;i++)
{
    if(ACC &amp; 0x80)
      SDA = 1;
    else
      SDA = 0;</P>
<P>    ACC &lt;&lt;= 1;
    Wait();</P>
<P>    SCL = 1;
    Wait();
    SCL = 0;
    Wait();
}
}</P>
<P>uchar readByte(void)//file://接收1字节数据
{
uchar i;
uchar ACC = 0;</P>
<P>for(i=0;i&lt;8;i++)
{
    SCL = 1;
    Wait();</P>
<P>    ACC &lt;&lt;= 1;</P>
<P>    if(SDA)
    {
      ACC |= 0x01;
    }
    SCL = 0;
    Wait();
}</P>
<P>return (ACC);
}</P>
<P>void write1302(uchar addr,uchar ucDa){
rst=0;
SCL=0;
rst=1;
writeByte(addr);
writeByte(ucDa);
SCL=1;
rst=0;}</P>
<P> ucharread1302 (uchar addr)
{
    uchar ucDa;
    rst=0;
    SCL=0;
    rst=1;
    writeByte(addr);      /* 地址,命令 */
    ucDa = readByte();   /* 读1Byte数据 */
   SCL=1;
   rst=0;
    return(ucDa);
}</P>
<P> void set(uchar *pSecDa){
uchar i;
uchar addr=0x80;
write1302(0x8e,0x00);
for(i=7;i&gt;0;i--){
write1302(addr,*pSecDa);
pSecDa++;
addr+=2;}
write1302(0x8e,0x80);
}</P>
<P>void get1302(uchar ucCurtime[])      
{
    uchari;
    ucharaddr = 0x81;
    for (i=0;i&lt;7;i++)
    {
         ucCurtime<i> = read1302(addr);/*格式为: 秒 分 时 日 月 星期 年 */
         addr += 2;
    }
}
void analyze(void){   //十位的数的话要分两次在LCD上显示,分别是十位和各个位
a=temp&gt;&gt;4;
b=temp&amp;0x0f;}</P>
<P>void main(){
uchar code tab1[]={0x01,0x38,0x0f,0x06} ;      /*01清除屏幕;38设置8位2行; 0f显示屏幕ON,光标ON,闪烁ON;06加一*/
uchar wtime={0x31,0x31,0x31,0x31,0x31,0x31,0x33};
//{0x30,0x43,0x11,0x20,0x06,0x05,0x03};
uchar rtime;
uchar i;
set(wtime);
Wait();
   
    for(i=0;i&lt;4;i++)
      { P1=tab1<i>; write1();}          /* 设置初始状态*/
   P1=0x80;write1();                  /*第一行起始地址*/
while(1){
get1302(rtime);
Wait();
    for(i=0;i&lt;7;i++)
   { temp=rtime<i>;
   analyze();
   P1=a; write2();
   P1=b; write2();}             /* 输出第一行*/</P>
<P>   P1=0x80;write1(); }                   /* 光标位置*/

}
void write1(void)                           /*RS 为0

cpubbs 发表于 2005-3-26 07:52:32

先和仿真器调试,看看你读回来的对不对,好像感觉1302不好用,不如用1307或PCF8563好用多了!用仿真器看看读回来的数据对不对先,不要直接这样子弄,不太好调试的!

qianhailiang 发表于 2005-3-26 17:53:53

<P>好的,谢谢!我再去检查检查, 以后还得请斑竹多多指教啊.</P>
页: [1]
查看完整版本: 请斑竹指教一个问题!!!