微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 诚求各位前辈帮小弟解惑,拜谢了,1602时间显示,C语言编...

诚求各位前辈帮小弟解惑,拜谢了,1602时间显示,C语言编...

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="  2013-3-20 thr";
uchar code table1[]="    23:58:40";
sbit lcdrs=P2^2;  // 123456789012
sbit lcdrw=P2^3;
sbit lcden=P2^4;
sbit wela=P2^7;
sbit dula=P2^6;
sbit gnd=P3^7;
sbit s1=P3^3;
sbit s2=P3^2;
sbit s3=P3^1;
uchar i,aa,num;
char shi,fen,miao;

void delay(uchar j)  //延时函数
{
        uchar i;
        while(j--)
                for(i=0;i<125;i++);
}

void write_com(uchar com)  //1602写指令
{
        lcdrs=0;
        lcden=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void write_data(uchar date)  //1602写数据
{
        lcdrs=1;
        lcden=0;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void init()   //初始化
{
        wela=0;
        dula=0;
        lcdrw=0;
        lcden=0;
        gnd=0;
        write_com(0x38);
        write_com(0x06);
        write_com(0x0c);
        write_com(0x01);
        for(i=0;i<15;i++) //写时间初值
                {
                        write_data(table);
                        delay(5);
                }
        write_com(0x80+0x40);
        for(i=0;i<12;i++)
                {
                        write_data(table1);
                        delay(5);
                }
        TMOD=0x01;           //T0定时器设置
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;       
        TR0=1;
}

void write_sfm(uchar address,uchar date)   //时间变化时写入数据
{
        uchar shi,ge;
        shi=date/10;
        ge=date%10;

        write_com(0x80+0x40+address);
        write_data(0x30+shi);
        write_data(0x30+ge);
}

void main()     //主函数
{
        init();
        while(1)
        {
       
        }       
}

void timer0() interrupt 1  //T0中断
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        aa++;
        if(aa==18)
                {
                        aa=0;
                        miao++;
                        if(miao==60)
                                {
                                        miao=0;
                                        fen++;
                                        if(fen==60)
                                                {
                                                        fen=0;
                                                        shi++;
                                                        if(shi==24)
                                                                {
                                                                        shi=0;
                                                                }
                                                        write_sfm(4,shi);        //调用写入
                                                }
                                        write_sfm(7,fen);                                  
                                }                                
                        write_sfm(10,miao);
                }               
}
小弟是新手,用开发板做的实验,写的1602显示时间,用定时器定时,无按钮控制,程序如上,运行结果是:
        一上电,显示时间23:58:40, 然后秒数直接就会变成01,然后从01开始,每秒加1,分钟数不变,即23:58:01.    继续等待,当秒数再次加到60时,分钟数由58直接变为00,小时数却没变,依然是23,即23:01:00.  理论上应是时间秒数由40开始加到59,然后变为00:00:00,为什么我的不对,求各位前辈给小弟指点下啊,不胜感激!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top