水若人 发表于 2013-7-23 21:24:53

求指教啊(关于1602液晶显示时钟)

本帖最后由 水若人 于 2013-7-23 21:26 编辑

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rw=P2^5;
sbit rs=P2^6;
sbit lcde=P2^7;
uchar code table[]="2013-07-23";
uchar code table1[]="23:59:50";
uchar num,cc,shi,fen,miao;
void delay(uint z)
{
        uint x,y;
                for(x=z;x>0;x--)
                        for(y=110;y>0;y--);
}

void write(uchar aa)
{
        rw=0;
        rs=0;
        lcde=0;
        P0=aa;
        delay(5);
        lcde=1;
        delay(5);
        lcde=0;
               
}

void write1(uchar bb)
{
        rw=0;
        rs=1;
        lcde=0;
        P0=bb;
        delay(5);
        lcde=1;
        delay(5);
        lcde=0;
               
}

void sfm(uchar dd,uchar ee)
{
        uchar shi,ge;
        shi=ee/10;
        ge=ee%10;
        write(0x80+0x43+dd);
        write1(0x30+shi);
        write1(0x30+ge);
       
}




void init()
{
        lcde=0;
        write(0x0c);
        write(0x38);
        write(0x06);
        write(0x01);
        write(0x83);
        for(num=0;num<10;num++)
                write1(table);

        write(0x80+0x44);

        for(num=0;num<8;num++)
                write1(table1);
       
        TMOD=0x01;
        TH0=(65036-50000)/256;
        TL0=(65036-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}

void main()
{
   init();
while(1)
{
if(cc==20)
        {
                cc=0;
                miao++;
                if(miao==60)
                {
                        miao=0;
                  fen++;
                        if(fen==60)
                        {
                               fen=0;
                                shi++;
                           if(shi==24)
                           {
                                           shi=0;
                               
                           }
                                   sfm(1,shi);
                        }
                          sfm(4,fen);
                }
           sfm(7,miao);
        }       
   }
}


void time() interrupt 1
{
        TH0=(65036-50000)/256;
        TL0=(65036-50000)%256;
        cc++;
       
}


//为什么 硬件仿真时 秒不是从50开始走,而是从0开始了,,(分钟和时也是)。。。。。求指点!!(好像这个初始值没有用,怎么改呀?)

zhong296887142 发表于 2013-7-23 21:44:39

这个肯定是从零开始啦,你想从五十开始,那你就在那个显示的位置相应的加多那个需要多加的数字。

水若人 发表于 2013-7-24 08:15:26

zhong296887142 发表于 2013-7-23 21:44 static/image/common/back.gif
这个肯定是从零开始啦,你想从五十开始,那你就在那个显示的位置相应的加多那个需要多加的数字。 ...

程序怎么改呢?

lmt50211 发表于 2013-7-24 09:10:29

水若人 发表于 2013-7-24 08:15 static/image/common/back.gif
程序怎么改呢?

给秒一个50的初值,它就从50开始工作了了

wt418995874 发表于 2013-7-24 13:14:19

水若人 发表于 2013-7-24 08:15 static/image/common/back.gif
程序怎么改呢?

把miao赋50给它,就可以啦。你程序里面的数组只是初始化时显示50,但个一秒后,就会把miao这个值重新显示在液晶上,而你这个miao默认是0
页: [1]
查看完整版本: 求指教啊(关于1602液晶显示时钟)