打印

初学者求各位大神赐解!!!

[复制链接]
1189|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lwp666|  楼主 | 2015-5-11 20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit dula=P2^6;
sbit wela=P2^7;

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
uchar code tablewe[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf};


uint minute,i,j;
uint second,hour;
uint ms20;

uchar a,b,c,d,e,f,g;

void display();
void delay1ms();
void inti();

void main()

{
       inti();
       while(1)

       {
              if(ms20==500)
                                      {
                                                        ms20=0;
                            second++;
                                    if(second==60)
                                                                {                                       
                                                                  second=0;                                                                                                  
                                                                }
                            a=second%10;
                            b=second/10;                                                           

                                      if(b==6)               
                                                              {                                                                               
                                                    minute++;                       
                                                            if(minute==60)
                               
                                                            {
                                                                                           second=0;
                                                           minute=0;
                                                            }                       
                                                    c=minute%10;
                                                    d=minute/10;                                                                       
                                                              }
                                      if(d==6)
                                                              {                                         
                                                    hour++;                       
                                                            if(hour==24)                                       
                                                            {
                                                                                           second=0;
                                                                                           minute=0;
                                                           hour=0;                                                       
                                                            }                       
                                                    e=hour%10;                       
                                                    f=hour/10;                         
                                                     }
                                                }
                                display();
                }         
}
                      
void inti()
{

   TMOD=0x02;
   TH0=0x06;
   TL0=0x06;
   TR0=1;
   ET0=1;
   EA=1;
}

void t0() interrupt 1
{
           TH1=(65536-45872)/256;
           TL1=(65536-45872)%256;
            ms20++;
}

void display()
{
        wela=1;
        P0=0xfe;
        wela=0;

        dula=1;
        P0=table[a];
        dula=0;
        delay1ms();

        wela=1;
        P0=0xfd;
        wela=0;

        dula=1;
        P0=table[b];
        dula=0;
        delay1ms();

        wela=1;
        P0=0xfb;
        wela=0;

        dula=1;
        P0=table[c];
        dula=0;
        delay1ms();

        wela=1;
        P0=0xf7;
        wela=0;

        dula=1;
        P0=table[d];
        dula=0;
        delay1ms();

        wela=1;
        P0=0xef;
        wela=0;

        dula=1;
        P0=table[e];
        dula=0;
        delay1ms();

        wela=1;
        P0=0xdf;
        wela=0;

        dula=1;
        P0=table[f];
        dula=0;
        delay1ms();

}

void delay1ms()
{
        for(i=0;i<50;i++)
                for(j=0;j<50;j++);
}
24小时计时的程序,哪有问题啊?大神们赐解,,,,,啊!!!!

相关帖子

沙发
woshiftt| | 2015-5-17 14:33 | 只看该作者
你配置的是定时器0,而中断函数却给定时器1赋值,而且定时器0配置也不正确。TMOD=0X02;你的定时器周期应该是20ms吧,那1s也不是500个周期呀!一言难尽呀!错误太多,还是先搞清楚定时器吧。

使用特权

评论回复
板凳
luofeng2g| | 2015-5-17 14:35 | 只看该作者

使用特权

评论回复
地板
woshiftt| | 2015-5-17 14:37 | 只看该作者
我在大学做的lcd显示时间的程序(按键可调的),你参考下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P0^5;
sbit lcdrw=P0^6;
sbit lcden=P0^7;
uchar r[1];
uchar code tab1[]="date:2013-3-6";
uchar code tab2[]="time:20:24:00";
uchar secondes=0,minutes=24,hours=20,a=0,i;
uchar n,b=1,c,e=1;
void delay(uint x)                                 
{
uint y;
for(;x>0;x--)
for(y=2000;y>0;y--);
}
void write_cmd(uchar c)
{
lcden=0;
lcdrs=0;
P2=c;
delay(1);
lcden=1;
lcden=0;
}
void write_data(uchar d)
{
lcden=1;
lcdrs=1;
P2=d;
delay(1);
lcden=1;
lcden=0;
}
void Init()
{  delay(1);
lcdrw=0;
P1=0xff;
write_cmd(0x01);
write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
delay(1);
write_cmd(0x80);
for(i=0;i<14;i++)
{write_data(tab1[i]);
delay(1);
}
write_cmd(0x80+0x40);
for(i=0;i<13;i++)
{write_data(tab2[i]);
delay(1);
}
}
void write_add(uchar ad,uchar date)
{ uchar d1,d2;
write_cmd(0x80+0x40+ad);
d1=date/10;
d2=date%10;
write_data(0x30+d1);
write_data(0x30+d2);
delay(1);
}
void key()
{

P1=0xfe;       
n=P1;
n&=0xf0;
if(n!=0xf0)
{
delay(2);
P1=0xfe;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{  
case(0xe0):{ delay(2);
if(b==-1)
{
write_add(11,secondes);
secondes++;
if(secondes==60)
secondes=0;
}

};
break;
case(0xd0):{delay(2);
if(b==-1)
{
write_add(8,minutes);minutes++;
if(minutes==60)
minutes=0;
}
};
break;
case(0xb0):{ delay(2);
if(b==-1)
{
write_add(5,hours);hours++;
if(hours==24)
hours=0;
}
};break;

case(0x70):{ delay(1);
if(b==1)
TR0=0;
b=-b;
if(b==1)
TR0=1;
};break;
}
}
}
P1=0xfd;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
delay(2);
P1=0xfd;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0xe0):
{
if(b==-1)
{
if(e==1)
{
if(hours>12)
{hours=hours-12;
r[0]=12;
}
e=-e;
if(e==1)
r[0]=24;
}
};
write_add(5,hours);
};break;
}
}
}
}


void main()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=-50000/256;
TL0=-50000%256;
TR0=1;
Init();
while(1)
{
key();

  }
}

void time0() interrupt 1
{
TH0=-50000/256;
TL0=-50000%256;
a++;
if(a==20)
{a=0;
secondes++;
if(secondes==60)
{secondes=0;
minutes++;
if(minutes==60)
{minutes=0;
hours++;
if(hours==r[0])
{hours=0;
}
write_add(5,hours);
}
write_add(8,minutes);
}
write_add(11,secondes);
}
}


使用特权

评论回复
5
sldlfkiii| | 2015-5-19 10:42 | 只看该作者
学到了。

使用特权

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

本版积分规则

1

主题

12

帖子

0

粉丝