打印

C51程序

[复制链接]
1397|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hrg13579|  楼主 | 2011-3-31 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题中为什么液晶上电只能保存秒,而分和时都不能被保存呢?程序代码如下,写的有点乱,高手别丢砖!
/*按S1为调时间确定键,按S1第一次调时间秒,按S1第二次调时间分,按S1第三次调时间时,按S1第四次打开中断运行时间.按S2调时间加,按S3调时间减.*/
#include<reg52.h>   
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="2011-03-21";
uchar code table1[]="00:00:00";
uchar code table2[]="0123456789";
bit write=0;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit rd=P3^7;
sbit sda=P2^0;
sbit scl=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit beep=P2^3;
uchar num1,num2,s1num;t=0,sec1=0,sec2=0,sec3=0,b1=11,b2=3,b3=21;
uint b;
void keyscan();
void display();
void write_miao();
void write_fen();
void write_shi();
unsigned int keyboar();
void delayns()
{;;}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void di()
{   beep=0;
    delay(100);
beep=1;
}
/////////////////////////////////////////////////////////////////////////
void start()  //开始信号
{
sda=1;
delayns();
scl=1;
delayns();
sda=0;
delayns();
}
void stop()   //停止
{
sda=0;
delayns();
scl=1;
delayns();
sda=1;
delayns();
}
void respons()  //应答
{
uchar i;
scl=1;
delayns();
while((sda==1)&&(i<250))i++;
scl=0;
delayns();
}
void init1()
{
sda=1;
delayns();
scl=1;
delayns();
}
void write_byte(uchar date1)
{
uchar i,temp;
temp=date1;
for(i=0;i<8;i++)
{
  temp=temp<<1;
  scl=0;
     delayns();
  sda=CY;
  delayns();
  scl=1;//高电平保持CY送给SDA数据稳定的通信
  delayns();
// scl=0;
     //   delay();
}
scl=0;//数据安全稳定的通信完后,低电平期间使得数据改变进行再次通信
delayns();
sda=1;//数据线为高点平,释放总线,进行下一位的数据传送
delayns();
}
uchar read_byte()
{
uchar i,k;
scl=0;
delayns();
sda=1;
delayns();
for(i=0;i<8;i++)
{
  scl=1;
  delayns();
  k=(k<<1)|sda;
  scl=0;
  delayns();
}
return k;
}
/*
void write_add(uchar address1,uchar date1)
{   start();
    write_byte(0xa0);
respons();
write_byte(address1);
respons();
write_byte(date1);
respons();
stop();
}
uchar read_add(uchar address1)
{   uchar date1;
    start();
write_byte(0xa0);
respons();
write_byte(address1);
respons();
start();
write_byte(0xa1);
respons();
date1=read_byte();
    stop();
return date1;
} */
/////////////////////////////////////////////////////////////////////////////////
void write_com(uchar com) //写命令
{
lcdrs=0;//选择写命令模式
//rs=0;//rs一直是地
P0=com;//将要写的命令字送到数据总线上
delay(5);//稍做延时以待数据稳定
lcden=1;//使能端给一高脉冲,因为初始化函数中已经将lcden置为0
delay(5);//
lcden=0;   //将使能端置为0以完成高脉冲
}
void write_data(uchar date)//写数据
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void initLCD()
{   rd=0;//软件将矩阵按键第4列一端置低用以分解出独立按键
    dula=0; // 数码管关了,防止影响LCD
wela=0; // 数码管关了,防止影响LCD
lcden=0;
write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);//设置开显示,不显示光标
write_com(0x06);//写一个字符后地址指针自动加1
write_com(0x01);//显示清0,数据指针清0
}
//////////////////////////////////////////////////////////////////
void main()
{ init1();
initLCD();
    start();
write_byte(0xa0);
respons();
write_byte(3);
respons();
start();
write_byte(0xa1);
respons();
sec3=read_byte();
stop();
if(sec3>60)
    sec3=0;
/////////////////////////////////////////////
    delay(100);
  start();
write_byte(0xa0);
respons();
write_byte(3);
respons();
start();
write_byte(0xa1);
respons();
sec2=read_byte();
stop();
if(sec2>60)
    sec2=0;
/////////////////////////////////////////
    delay(100);
start();
write_byte(0xa0);
respons();
write_byte(3);
respons();
start();
write_byte(0xa1);
respons();
sec1=read_byte();
stop();
if(sec1>24)
    sec1=0;  
/////////////////////////////////////////
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
write_com(0x80);//将数据指针定位到第一行第一个字处,然后写完第一行要显示的字,在每两个字之间做简短延时,这个时间可以自行测试,时间太长会影响写入及显示速度,太短会影响控制器接收数据的稳定性。
for(num1=0;num1<10;num1++)  //共11个字符,写11次
{
  write_data(table[num1]);
  delay(5);
}
write_com(0x80+0x40); //当写第行时需要重新定位数据指针:write_com(0x80+0x40)
for(num2=0;num2<8;num2++)
{
  write_data(table1[num2]);
  delay(5);
}
  while(1)
  {   keyscan();
      display();
   if(write==1)
   {  write=0;
      start();
         write_byte(0xa0);
         respons();
         write_byte(3);
         respons();
         write_byte(sec3);//写入数据0xaa
         respons();
         stop();
////////////////////////////////////
            delay(100);
      start();
            write_byte(0xa0);
            respons();
            write_byte(3);
            respons();
            write_byte(sec2);
            respons();
            stop();
   delay(100);
/////////////////////////////////////
            start();
            write_byte(0xa0);
            respons();
            write_byte(3);
            respons();
            write_byte(sec1);
            respons();
            stop();  
   }
   
  }
}
void t0()interrupt 1 //中断函数中的程序运行时间不能超过1S,不然就会有累积误差
{   
    TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
void display()
{ if(t==20)
{  t=0;   
    sec3++;
    write=1;
    if(sec3==60)
       sec3=0;
    write_miao();
    if(sec3==0)
       {  sec2++;
       if(sec2==60)
       sec2=0;
    write_fen();
    if(sec2==0)
    {  sec1++;
       if(sec1==24)
       sec1=0;
    write_shi();
    if(sec1==0) //如果24小时到了,那么b3加一天
    {  b3++;
       if(b3==30) //
       b3=0;
    write_com(0x80+0x09);
             write_data(table2[b3/10]);
             delay(5);
             write_com(0x80+0x08);
             write_data(table2[b3%10]);
    if(b3==0)  //如果30天到了
    {  b2++;
       if(b2==12); //如果12个月底到了,月份清0显示
          b2=0;
       write_com(0x80+0x06);
                write_data(table2[b2/10]);
                delay(5);
                write_com(0x80+0x05);
                write_data(table2[b2%10]);
       if(b2==0)//如果12个月到了
       {  b1++;         
       write_com(0x80+0x03);
                   write_data(table2[b1/10]);
                   delay(5);
                   write_com(0x80+0x02);
                   write_data(table2[b1%10]);
       }
    }
    }
    }   
    }
}
}
/////////////////////////////////////////////////////////////////////////////////////
void keyscan()
{   if(s1==0)
    {  delay(5);
    if(s1==0)
    {  s1num++; //第一次按键按下后加1,
       while(!s1);
    di();
    if(s1num==1)//关闭定时器,写入新的数据秒
    {  TR0=0;
       write_com(0x80+0x40+7);
    write_com(0x0f);
    }
    if(s1num==2)
    {  write_com(0x80+0x40+4);
       write_com(0x0f);
    }
    if(s1num==3)
    {  write_com(0x80+0x40+1);
       write_com(0x0f);
    }
   
    if(s1num==4)
    {  s1num=0;
       write_com(0x0c);
    TR0=1;
    }
    }
  }
///////////////按S2加////////////////////////////////
  if(s1num!=0)
    {  if(s2==0)
       {  delay(5);
       if(s2==0)
    {  while(!s2);
       di();
    if(s1num==1)
    {  sec3++;      
       if(sec3==60)
          sec3=0;
       write_miao();         
    }
    if(s1num==2)
    {  sec2++;
       if(sec2==60)
          sec2=0;
       write_fen();
    }
    if(s1num==3)
    {  sec1++;
       if(sec1==24)
         sec1=0;
       write_shi();
    }
    }
    }
   }
////////////////按S3减/////////////////////////////////
        if(s1num!=0)
    {  if(s3==0)
       {  delay(5);
       if(s3==0)
    {  while(!s3);
       di();
    if(s1num==1)
    {  sec3--;      
       if(sec3==0)
          sec3=60;
       write_miao();         
    }
    if(s1num==2)
    {  sec2--;
       if(sec2==0)
          sec2=60;
       write_fen();
    }
    if(s1num==3)
    {  sec1--;
       if(sec1==0)
         sec1=24;
       write_shi();
    }
    }
    }
   }
}
void write_miao()//写入秒
{   write_com(0x80+0x46);
write_data(table2[sec3/10]);
delay(5);
write_com(0x80+0x47);
write_data(table2[sec3%10]);
delay(5);
}
void write_fen() //写入分
{  write_com(0x80+0x43);
   write_data(table2[sec2/10]);
   delay(5);
   write_com(0x80+0x44);
   write_data(table2[sec2%10]);
   delay(5);
}
void write_shi() //写入时
{ write_com(0x80+0x40);
write_data(table2[sec1/10]);
delay(5);
write_com(0x80+0x41);
write_data(table2[sec1%10]);
delay(5);
}

相关帖子

沙发
hrg13579|  楼主 | 2011-3-31 15:03 | 只看该作者
自己搞定了,程序适用于TX-1C兼容板,正确程序如下:
/*带**1602液晶显示的时钟程序按S1为调时间确定键,按S1第一次调时间秒,按S1第二次调时间分,按S1第三次调时间时,按S1第四次打开中断运行时间.按S2调时间加,按S3调时间减.*/
#include<reg52.h>          
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="2011-03-21";
uchar code table1[]="00:00:00";
uchar code table2[]="0123456789";
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit rd=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit beep=P2^3;
uchar num1,num2,s1num;t=0,sec1=0,sec2=0,sec3=0,b1=11,b2=3,b3=21;
uint b;
void keyscan();
void display();
void write_miao();
void write_fen();
void write_shi();
unsigned int keyboar();
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void di()
{   beep=0;
    delay(100);
        beep=1;
}

void write_com(uchar com) //写命令
{
        lcdrs=0;//选择写命令模式
        //rs=0;//rs一直是地
        P0=com;//将要写的命令字送到数据总线上
        delay(5);//稍做延时以待数据稳定
        lcden=1;//使能端给一高脉冲,因为初始化函数中已经将lcden置为0
        delay(5);//
        lcden=0;   //将使能端置为0以完成高脉冲
}
void write_data(uchar date)//写数据
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void init()
{   rd=0;//软件将矩阵按键第4列一端置低用以分解出独立按键
    dula=0;        // 数码管关了,防止影响LCD
        wela=0;        // 数码管关了,防止影响LCD
        lcden=0;
        write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
        write_com(0x0c);//设置开显示,不显示光标
        write_com(0x06);//写一个字符后地址指针自动加1
        write_com(0x01);//显示清0,数据指针清0
}       
void main()
{
        init();
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        write_com(0x80);//将数据指针定位到第一行第一个字处,然后写完第一行要显示的字,在每两个字之间做简短延时,这个时间可以自行测试,时间太长会影响写入及显示速度,太短会影响控制器接收数据的稳定性。
        for(num1=0;num1<10;num1++)         //共11个字符,写11次
        {
                write_data(table[num1]);
                delay(5);
        }
        write_com(0x80+0x40); //当写第行时需要重新定位数据指针:write_com(0x80+0x40)
        for(num2=0;num2<8;num2++)
        {
                write_data(table1[num2]);
                delay(5);
        }
         while(1)
         {   keyscan();
             display();
         }
}

void t0()interrupt 1 //中断函数中的程序运行时间不能超过1S,不然就会有累积误差
{   
    TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t++;
}
void display()
{        if(t==20)
        {  t=0;
           sec3++;
           if(sec3==60)
              sec3=0;
           write_miao();
           if(sec3==0)
       {  sec2++;
              if(sec2==60)
                     sec2=0;
                  write_fen();
                  if(sec2==0)
                  {  sec1++;
                     if(sec1==24)
                            sec1=0;
                         write_shi();
                         if(sec1==0) //如果24小时到了,那么b3加一天
                         {  b3++;
                            if(b3==30) //
                                   b3=0;
                                write_com(0x80+0x09);
                    write_data(table2[b3/10]);
                    delay(5);
                    write_com(0x80+0x08);
                    write_data(table2[b3%10]);
                                if(b3==0)  //如果30天到了
                                {  b2++;
                                   if(b2==12); //如果12个月底到了,月份清0显示
                                      b2=0;
                                   write_com(0x80+0x06);
                       write_data(table2[b2/10]);
                       delay(5);
                       write_com(0x80+0x05);
                       write_data(table2[b2%10]);
                                   if(b2==0)//如果12个月到了
                                   {  b1++;                                     
                                          write_com(0x80+0x03);
                          write_data(table2[b1/10]);
                          delay(5);
                          write_com(0x80+0x02);
                          write_data(table2[b1%10]);
                                   }
                                }
                         }
                  }   
           }
        }
}
/////////////////////////////////////////////////////////////////////////////////////
void keyscan()
{   if(s1==0)
    {  delay(5);
           if(s1==0)
           {  s1num++;        //第一次按键按下后加1,
              while(!s1);
                  di();
                  if(s1num==1)//关闭定时器,写入新的数据秒
                  {  TR0=0;
                     write_com(0x80+0x40+7);
                         write_com(0x0f);
                  }
                  if(s1num==2)
                  {  write_com(0x80+0x40+4);
                     write_com(0x0f);
                  }
                  if(s1num==3)
                  {  write_com(0x80+0x40+1);
                     write_com(0x0f);
                  }
                  
                  if(s1num==4)
                  {  s1num=0;
                     write_com(0x0c);
                         TR0=1;
                  }
           }
         }
///////////////按S2加////////////////////////////////
         if(s1num!=0)
           {  if(s2==0)
              {  delay(5);
                     if(s2==0)
                         {  while(!s2);
                            di();
                                if(s1num==1)
                                {  sec3++;                                  
                                   if(sec3==60)
                                      sec3=0;
                                   write_miao();                                            
                                }
                                if(s1num==2)
                                {  sec2++;
                                   if(sec2==60)
                                      sec2=0;
                                   write_fen();
                                }
                                if(s1num==3)
                                {  sec1++;
                                   if(sec1==24)
                                     sec1=0;
                                   write_shi();
                                }
                         }
                  }
          }
////////////////按S3减/////////////////////////////////
        if(s1num!=0)
           {  if(s3==0)
              {  delay(5);
                     if(s3==0)
                         {  while(!s3);
                            di();
                                if(s1num==1)
                                {  sec3--;                                  
                                   if(sec3==0)
                                      sec3=60;
                                   write_miao();                                            
                                }
                                if(s1num==2)
                                {  sec2--;
                                   if(sec2==0)
                                      sec2=60;
                                   write_fen();
                                }
                                if(s1num==3)
                                {  sec1--;
                                   if(sec1==0)
                                     sec1=24;
                                   write_shi();
                                }
                         }
                  }
          }
}
void write_miao()//写入秒
{   write_com(0x80+0x46);
        write_data(table2[sec3/10]);
        delay(5);
        write_com(0x80+0x47);
        write_data(table2[sec3%10]);
        delay(5);
}
void write_fen() //写入分
{  write_com(0x80+0x43);
   write_data(table2[sec2/10]);
   delay(5);
   write_com(0x80+0x44);
   write_data(table2[sec2%10]);
   delay(5);
}
void write_shi() //写入时
{        write_com(0x80+0x40);
        write_data(table2[sec1/10]);
        delay(5);
        write_com(0x80+0x41);
        write_data(table2[sec1%10]);
        delay(5);
}

使用特权

评论回复
板凳
hrg13579|  楼主 | 2011-3-31 15:07 | 只看该作者
不好意思,正确的程序为三楼。
/*按S1为调时间确定键,按S1第一次调时间秒,按S1第二次调时间分,按S1第三次调时间时,按S1第四次打开中断运行时间.按S2调时间加,按S3调时间减.*/
#include<reg52.h>          
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="2011-03-21";
uchar code table1[]="00:00:00";
uchar code table2[]="0123456789";
//bit write=0;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit rd=P3^7;
sbit sda=P2^0;
sbit scl=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit beep=P2^3;
uchar num1,num2,s1num;t=0,sec1=0,sec2=0,sec3=0,b1=11,b2=3,b3=21;
uint b;
void keyscan();
void display();
void write_miao();
void write_fen();
void write_shi();
unsigned int keyboar();
void delayns()
{;;}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void di()
{   beep=0;
    delay(100);
        beep=1;
}
/////////////////////////////////////////////////////////////////////////
void start()  //开始信号
{       
        sda=1;
        delayns();
        scl=1;
        delayns();
        sda=0;
        delayns();
}

void stop()   //停止
{
        sda=0;
        delayns();
        scl=1;
        delayns();
        sda=1;
        delayns();
}

void respons()  //应答
{
        uchar i;
        scl=1;
        delayns();
        while((sda==1)&&(i<250))i++;
        scl=0;
        delayns();
}

void init1()
{
        sda=1;
        delayns();
        scl=1;
        delayns();
}

void write_byte(uchar date1)
{
        uchar i,temp;
        temp=date1;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
            delayns();
                sda=CY;
                delayns();
                scl=1;//高电平保持CY送给SDA数据稳定的通信
                delayns();
        //        scl=0;
     //   delay();
        }
        scl=0;//数据安全稳定的通信完后,低电平期间使得数据改变进行再次通信
        delayns();
        sda=1;//数据线为高点平,释放总线,进行下一位的数据传送
        delayns();
}

uchar read_byte()
{
        uchar i,k;
        scl=0;
        delayns();
        sda=1;
        delayns();
        for(i=0;i<8;i++)
        {
                scl=1;
                delayns();       
                k=(k<<1)|sda;
                scl=0;
                delayns();       
        }
        return k;
}
void write_add(uchar address1,uchar date1)
{   start();
    write_byte(0xa0);
        respons();
        write_byte(address1);
        respons();
        write_byte(date1);
        respons();
        stop();
}
uchar read_add(uchar address1)
{   uchar date1;
    start();
        write_byte(0xa0);
        respons();
        write_byte(address1);
        respons();
        start();
        write_byte(0xa1);
        respons();
        date1=read_byte();
    stop();
        return date1;
}       
/////////////////////////////////////////////////////////////////////////////////
void write_com(uchar com) //写命令
{
        lcdrs=0;//选择写命令模式
        //rs=0;//rs一直是地
        P0=com;//将要写的命令字送到数据总线上
        delay(5);//稍做延时以待数据稳定
        lcden=1;//使能端给一高脉冲,因为初始化函数中已经将lcden置为0
        delay(5);//
        lcden=0;   //将使能端置为0以完成高脉冲
}
void write_data(uchar date)//写数据
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void initLCD()
{   rd=0;//软件将矩阵按键第4列一端置低用以分解出独立按键
    dula=0;        // 数码管关了,防止影响LCD
        wela=0;        // 数码管关了,防止影响LCD
        lcden=0;
        write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口
        write_com(0x0c);//设置开显示,不显示光标
        write_com(0x06);//写一个字符后地址指针自动加1
        write_com(0x01);//显示清0,数据指针清0
}
//////////////////////////////////////////////////////////////////       
void main()
{        init1();
        initLCD();
   
        write_com(0x80);//将数据指针定位到第一行第一个字处,然后写完第一行要显示的字,在每两个字之间做简短延时,这个时间可以自行测试,时间太长会影响写入及显示速度,太短会影响控制器接收数据的稳定性。
        for(num1=0;num1<10;num1++)         //共11个字符,写11次
        {
                write_data(table[num1]);
                delay(5);
        }
        write_com(0x80+0x40); //当写第行时需要重新定位数据指针:write_com(0x80+0x40)
        for(num2=0;num2<8;num2++)
        {
                write_data(table1[num2]);
                delay(5);
        }
/////////////////////////////////////////////////////
        sec3=read_add(1);
        stop();
        if(sec3>60)
           sec3=0;
        write_miao();
/////////////////////////////////////////////
    delay(100);
        sec2=read_add(2);
        if(sec2>60)
           sec2=0;
    write_fen();
/////////////////////////////////////////
    delay(100);
        sec1=read_add(3);
        if(sec1>24)
           sec1=0;         
    write_shi();
/////////////////////////////////////////
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
         {   
             keyscan();
             display();
         }
}

void t0()interrupt 1 //中断函数中的程序运行时间不能超过1S,不然就会有累积误差
{   
    TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t++;
}
void display()
{        if(t==20)
        {  t=0;          
           sec3++;
           if(sec3==60)
              sec3=0;
           write_miao();//写入秒到液晶和24C02
           if(sec3==0)
       {  sec2++;
              if(sec2==60)
                     sec2=0;
                  write_fen();//写入分到液晶和24C02
                  if(sec2==0)
                  {  sec1++;
                     if(sec1==24)
                            sec1=0;
                         write_shi(); //写入时到液晶和24C02
                         if(sec1==0) //如果24小时到了,那么b3加一天
                         {  b3++;
                            if(b3==30) //
                                   b3=0;
                                write_com(0x80+0x09);
                    write_data(table2[b3/10]);
                    delay(5);
                    write_com(0x80+0x08);
                    write_data(table2[b3%10]);
                                if(b3==0)  //如果30天到了
                                {  b2++;
                                   if(b2==12); //如果12个月底到了,月份清0显示
                                      b2=0;
                                   write_com(0x80+0x06);
                       write_data(table2[b2/10]);
                       delay(5);
                       write_com(0x80+0x05);
                       write_data(table2[b2%10]);
                                   if(b2==0)//如果12个月到了
                                   {  b1++;                                     
                                          write_com(0x80+0x03);
                          write_data(table2[b1/10]);
                          delay(5);
                          write_com(0x80+0x02);
                          write_data(table2[b1%10]);
                                   }
                                }
                         }
                  }   
           }
        }
}
/////////////////////////////////////////////////////////////////////////////////////
void keyscan()
{   if(s1==0)
    {  delay(5);
           if(s1==0)
           {  s1num++;        //第一次按键按下后加1,
              while(!s1);
                  di();
                  if(s1num==1)//关闭定时器,写入新的数据秒
                  {  TR0=0;
                     write_com(0x80+0x40+7);
                         write_com(0x0f);
                  }
                  if(s1num==2)
                  {  write_com(0x80+0x40+4);
                     write_com(0x0f);
                  }
                  if(s1num==3)
                  {  write_com(0x80+0x40+1);
                     write_com(0x0f);
                  }
                  
                  if(s1num==4)
                  {  s1num=0;
                     write_com(0x0c);
                         TR0=1;
                  }
           }
         }
///////////////按S2加////////////////////////////////
         if(s1num!=0)
           {  if(s2==0)
              {  delay(5);
                     if(s2==0)
                         {  while(!s2);
                            di();
                                if(s1num==1)
                                {  sec3++;                                  
                                   if(sec3==60)
                                      sec3=0;
                                   write_miao();                                            
                                }
                                if(s1num==2)
                                {  sec2++;
                                   if(sec2==60)
                                      sec2=0;
                                   write_fen();
                                }
                                if(s1num==3)
                                {  sec1++;
                                   if(sec1==24)
                                     sec1=0;
                                   write_shi();
                                }
                         }
                  }
          }
////////////////按S3减/////////////////////////////////
        if(s1num!=0)
           {  if(s3==0)
              {  delay(5);
                     if(s3==0)
                         {  while(!s3);
                            di();
                                if(s1num==1)
                                {  sec3--;                                  
                                   if(sec3==0)
                                      sec3=60;
                                   write_miao();                                            
                                }
                                if(s1num==2)
                                {  sec2--;
                                   if(sec2==0)
                                      sec2=60;
                                   write_fen();
                                }
                                if(s1num==3)
                                {  sec1--;
                                   if(sec1==0)
                                     sec1=24;
                                   write_shi();
                                }
                         }
                  }
          }
}
void write_miao()//写入秒到液晶和24C02
{   write_com(0x80+0x46);
        write_data(table2[sec3/10]);
        delay(5);
        write_com(0x80+0x47);
        write_data(table2[sec3%10]);
        delay(5);
    write_add(1,sec3);
}
void write_fen() ////写入分到液晶和24C02
{   write_com(0x80+0x43);
    write_data(table2[sec2/10]);
    delay(5);
    write_com(0x80+0x44);
    write_data(table2[sec2%10]);
    delay(5);
    write_add(2,sec2);
}
void write_shi() //写入时到液晶和24C02
{        write_com(0x80+0x40);
        write_data(table2[sec1/10]);
        delay(5);
        write_com(0x80+0x41);
        write_data(table2[sec1%10]);
        delay(5);
        write_add(3,sec1);
}

使用特权

评论回复
地板
airwill| | 2011-4-1 08:52 | 只看该作者
"胸有凌云志,无高不可攀!"同志, 看到这么长的代码, 真的不够那么多耐心. 不过被你的认真打动. 回复一下.
这么长的代码,让人家来帮你改代码, 不容易呀.是不是缺少调试手段呢?
好好地学习一下调试技巧, 多借助工具, 未必一定要仿真器, 比如万用表, 示波器, 用好了, 也可以事半功倍哦

使用特权

评论回复
5
huangqi412| | 2011-4-1 09:34 | 只看该作者
谁能给你看完我服了他。。。

使用特权

评论回复
6
liang7143| | 2011-4-1 09:41 | 只看该作者
这是愚人节 愚人的手段吗?

使用特权

评论回复
7
new1988| | 2011-4-1 10:34 | 只看该作者
我看完了--------------------------------------------愚人节快乐

使用特权

评论回复
8
chenczy| | 2011-4-1 12:11 | 只看该作者
放主要的程序就行了,太长了没多少会去专门看的,毕敬看别人的程序是一件非常辛苦的事,特别是没注释的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:胸有凌云志,无高不可攀!

300

主题

587

帖子

4

粉丝