我想在LCD1602上显示时间,为什么时间不变化,总是停留在设置的时间?

2019-07-15 16:40发布

本帖最后由 niupai0409 于 2015-7-9 20:42 编辑

求大神指点!!!!!急~
程序见附件!!!
#include<reg51.h>
#include<intrins.h>
#define LCDDATE P0
#define LCD P0
#define NOP()_nop_()

sbit RW=P2^5;
sbit RS=P2^6;
sbit LCDE=P2^7;

unsigned char string[]="I LOVE COMPUTER!";
unsigned char time[]="TIME:15:35:42";
unsigned char hou=15,min=32,sec=36,num=0;

void LcdDelay(unsigned int i)
{
        unsigned char a;
        for(i;i>0;i--)
        {
                for(a=2;a>0;a--);
        }
}
void LcdWriteCommand(unsigned char com)
{
        LCDE=0;
        RW=0;
        RS=0;
        LCD=com;
        LcdDelay(5);
        LCDE=1;
        NOP();
        NOP();
        LCDE=0;
}
void LcdWriteData(unsigned char dat)
{
        LCDE=0;
        RW=0;
        RS=1;
        LCD=dat;
        LcdDelay(5);
        LCDE=1;
        NOP();
        NOP();
        LCDE=0;
}
void LcdInit()
{
        LcdWriteCommand(0x38);
        LcdWriteCommand(0x0c);
        LcdWriteCommand(0x06);
        LcdWriteCommand(0x01);
}
void time0()interrupt 1
{
        unsigned char num=0;
        unsigned char i;
        TH0=55536/256;
        TL0=55536%256;
        num=num+1;
        if(num>99)
        {
                num=0;
                sec=sec+1;
                if(sec>59)
                {
                        sec=0;
                        min=+1;
                        if(min>59)
                        {
                                min=0;
                                hou=+1;
                                if(hou>23)
                                {
                                        hou=0;
                                }
                        }
                }
                Time[5]=hou/10+0x30;
                Time[6]=hou%10+0x30;
                Time[7]=min/10+0x30;
                Time[8]=min%10+0x30;
                Time[9]=sec/10+0x30;
                Time[10]=sec%10+0x30;
                LcdWriteCommand(0x80);
                for(i=0;i<13;i++)
                {
                        LcdWriteData(Time);
                }
        }
}
void main()
{
        unsigned char i;
        TMOD=0x01;
        TH0=55536/256;
        TL0=55536%256;
        ET0=1;
        EA=1;
        TR0=1;
        LcdInit();
        LcdDelay(100);
        LcdWriteCommand(0x80);
        for(i=0;i<13;i++)
        {
                LcdWriteData(Time);
        }
        LcdWriteCommand(0xc0);
        for(i=0;i<16;i++)
        {
                LcdWriteData(string);
        }
        while(1);
}
程序.txt 下载积分: 积分 -1 分
1.58 KB, 下载次数: 16, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
hongyanj
1楼-- · 2019-07-16 09:34
 精彩回答 2  元偷偷看……
hongyanj
2楼-- · 2019-07-16 11:11
本帖最后由 hongyanj 于 2015-7-10 10:23 编辑

还有你的计时太麻烦!
void time0()interrupt 1    {   num=num+1;
TH0=55536/256;
TL0=55536%256;
}

下面的其它位置计算;
        if(num==3600){
                小时=小时+1;
                num=0;
        }(或者   小时=num/3600;)
        分钟=num/60;
          秒=num%60;
中断中执行这么多会严重影响计时间精度!你时钟频率是多少?






niupai0409
3楼-- · 2019-07-16 16:13
hongyanj 发表于 2015-7-10 09:49
unsigned char Time[]="TIME:15:35:42";
这是往屏幕上面写时间Time[]共13个,故 for(i=0;i

还是那样,时间不会变化,怎么办?
niupai0409
4楼-- · 2019-07-16 19:16
hongyanj 发表于 2015-7-10 10:09
还有你的计时太麻烦!
void time0()interrupt 1    {   num=num+1;
TH0=55536/256;

现在关键是执行中断时间不会变化,老是显示数组定义的时间,应该怎么修改?谢谢~
郭盛
5楼-- · 2019-07-16 22:51
是你的中断以后改的时间没有送到要显示的位置   
郭盛
6楼-- · 2019-07-17 03:57
 精彩回答 2  元偷偷看……

一周热门 更多>