赞助论坛
  • 5783阅读
  • 0回复

本人2008编写的89C51+LCD1602电子钟源程序 [复制链接]

楼层直达
asd2010  
发帖
42
精华
0
金币
62
威望
0
贡献
0
好评
0
注册
2010-02-03
楼主    asd2010 发表于: 2010-07-15 12:49:35 
/*LCD1602电子钟,用学习板制成,P3.6和P3.7调分和调时
制作时间:2008年5月*/
#include<reg52.h>
#define uchar unsigned char
sbit rs=P1^0;
sbit lcden=P1^2;
sbit rw=P1^1;
sbit K1=P3^6;    //调分
sbit K2=P3^7;    //调时
uchar t,sec,min,hour;
uchar table1[]="0123456789";
void delay(uchar x)
{
   uchar a,b;
   for(a=x;a>0;a--)
       for(b=100;b>0;b--);
}

void write_com(uchar com)
{
   P0=com;
   rs=0;
   lcden=0;
   delay(5);
   lcden=1;
   delay(5);
   lcden=0;
   
}

void write_date(uchar date)
{
   P0=date;
   rs=1;
   lcden=0;
   delay(5);
   lcden=1;
   delay(5);
   lcden=0;
   
}

void init()
{
   P2=0XFF;
   rw=0;
   write_com(0x38);  
   delay(5);  
   write_com(0x0C);    
   delay(5);
   write_com(0x06);  
   delay(5);
   write_com(0x01);  
   delay(5);    
}
void jin_wei()
{

       if(sec==60)
       {
           sec=0;
           min++;
       }

       if(min==60)
       {
           min=0;
           hour++;
       }

       if(hour==24)
       {
           hour=0;
       }
}
void main()
{
  EA=1;
   ET1=1;
   TMOD=0x10;
   TR1=1;
   init();
   delay(5);
   write_com(0x82);
   delay(5);
   write_date(':');    
   delay(15);
   write_com(0x85);
   delay(5);
   write_date(':');
   while(1)
       {
           write_com(0x86);
           delay(5);
           write_date(table1[sec/10]);
           delay(5);
           write_date(table1[sec%10]);
           delay(5);

           write_com(0x83);
           delay(5);
           write_date(table1[min/10]);
           delay(5);
           write_date(table1[min%10]);
           delay(5);

           write_com(0x80);
           delay(5);
           write_date(table1[hour/10]);
           delay(5);
           write_date(table1[hour%10]);
           delay(5);

           jin_wei();    
           if(K1==0)
               {
                   delay(250);
                   if(K1==0)
                   min++;
               }
           if(K2==0)
               {
                   delay(250);
                   if(K2==0)
                   hour++;
               }
       }
}
void time1() interrupt 3 using 1
   {      
       TH1=60;
       TL1=176;    
      t++;
       if(t==20)
       {
           t=0;sec++;
       }

   }