标题: 求高手调试程序;为啥到整点进位出现错误呢 [打印本页]

作者: QWERRER    时间: 2014-11-7 22:08
标题: 求高手调试程序;为啥到整点进位出现错误呢
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint miao,fen,shi,ge,shi;
uint num;
sbit  we=P2^6;
sbit  du=P2^7;
sbit  lcden=P2^5;
sbit  rs=P1^0;                  //注意LCD初始化rw制零
sbit rw=P1^1;
uchar table[]="   22:59:53";
void  delayms(uint x)
{
uint i,j;
   for(i=x;i>0;i--)
   for(j=110;j>0;j--);
}

//读操作
void writecmd(uchar com)
{
rs=0;
lcden=0;
P0=com;
lcden=1;
delayms(5);
lcden=0;
}

//写命令
void writedate(uchar date)
{
        rs=1;
        lcden=0;
        P0=date;
        lcden=1;
        delayms(5);
        lcden=0;
}

//LCD初始化

void init()
{ uint i;

  we=0;
  du=0;
  rw=0;
  lcden=0;
  writecmd(0x38);
  writecmd(0x06);        
  writecmd(0x0c);      //开显示,不显示光标  
  writecmd(0x01);      //清除LCD的显示内容
  writecmd(0x80+0x40);
  for(i=0;i<11;i++)
  {
  writedate(table[i]);
  delayms(5);

  }
}
   void sfm(uchar add,uchar date)
{
  ge=date%10;
  shi=date/10;
  writecmd(0x80+0x40+add);
  writedate(0x30+shi);
  writedate(0x30+ge);

}
void time0()
{
    TMOD =0x01;
    TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}   

void main()
  {
   init();
  time0();
  writecmd(0x80+0x40);
while(1)

{
if(num==20)
{
num=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{fen=0;
shi++;
if(shi==24)
{shi=0;
}
sfm(3,shi);
}
          sfm(6,fen);
}

sfm(9,miao);
}



}



}

void timer() interrupt 1
{
   TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
    num++;

}



作者: QWERRER    时间: 2014-11-8 11:33
求高手指教,急求
作者: mqwu    时间: 2014-11-8 14:38

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint miao,fen,shi,ge,shi;
uint num;
sbit  we=P2^6;
sbit  du=P2^7;
sbit  lcden=P2^5;
sbit  rs=P1^0;                  //注意LCD初始化rw制零
sbit rw=P1^1;
uchar table[]="   22:59:53";
void  delayms(uint x)
{
uint i,j;
   for(i=x;i>0;i--)
   for(j=110;j>0;j--);
}

//读操作
void writecmd(uchar com)
{
rs=0;
lcden=0;
P0=com;
lcden=1;
delayms(5);
lcden=0;
}

//写命令
void writedate(uchar date)
{
        rs=1;
        lcden=0;
        P0=date;
        lcden=1;
        delayms(5);
        lcden=0;
}

//LCD初始化

void init()
{ uint i;

  we=0;
  du=0;
  rw=0;
  lcden=0;
  writecmd(0x38);
  writecmd(0x06);        
  writecmd(0x0c);      //开显示,不显示光标  
  writecmd(0x01);      //清除LCD的显示内容
  writecmd(0x80+0x40);
  for(i=0;i<11;i++)
  {
  writedate(table[i]);
  delayms(5);

  }
}
   void sfm(uchar add,uchar date)
{
  ge=date%10;
  shi=date/10;
  writecmd(0x80+0x40+add);
  writedate(0x30+shi);
  writedate(0x30+ge);

}
void time0()
{
    TMOD =0x01;
    TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}   

void main()
  {
   init();
  time0();
  writecmd(0x80+0x40);
while(1)

{
if(num==20)
{
num=0;
miao++;
sfm(9,miao);
if(miao==60)
{
miao=0;
sfm(9,miao);//immediately update the display;
fen++;
sfm(6,fen);
if(fen==60)
{fen=0;
sfm(6,fen);//immediately update the display;
shi++;
sfm(3,shi);
if(shi==24)
{shi=0;
  sfm(3,shi);//immediately update the display
}

}
}
}



}



}

void timer() interrupt 1
{
   TH0 = (65536-50000)/256;
    TL0 = (65536-50000)%256;
    num++;

}


作者: QWERRER    时间: 2014-11-8 17:00

作者: mqwu    时间: 2014-11-8 17:27
试过没有?
作者: QWERRER    时间: 2014-11-8 20:11
mqwu 发表于 2014-11-8 17:27
试过没有?

试过了 ,还不可以  时针没法进位
作者: liaolinhui    时间: 2014-11-9 20:09
变量冲突了,你个位十位的十用的变量shi和时分秒的时用的变量也是shi,
作者: mqwu    时间: 2014-11-10 08:14
楼上对的, 拼音命名的弊病在于此
作者: QWERRER    时间: 2014-11-11 19:10
liaolinhui 发表于 2014-11-9 20:09
变量冲突了,你个位十位的十用的变量shi和时分秒的时用的变量也是shi,

嗯嗯,终于发现问题了 谢谢啦




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1