1602时钟

来源:互联网 发布:朗伽病理软件 编辑:程序博客网 时间:2024/05/23 17:30

#include<reg52.h>
sbit duan=P2^2;
sbit wei=P2^3;
sbit rs=P2^4;
sbit rw=P2^5;
sbit en=P2^6;
char Time[16]="0123456789";//用于显示
int sz1,sz2,fz1,fz2,mz1,mz2;
int flag,mon,day,count;

void delay(int a)  //延时
{
 int i,j;
 for(i=0;i<a;i++)
 for(j=0;j<125;j++)
 ;
}
void cmd(char com) //命令函数
{
 rs=0;
 rw=0;
 P0=com;
 en=1;
 delay(5);
 en=0;
}

void dat(char date) //写一个数据
{
 rs=1;
 rw=0;
 P0=date;
 en=1;
 delay(5);
 en=0 ;
}
void string(char n,char m,char *str) //写一串数据
             //n:写在第几行 m:写在第几个位置 *a:字符串或数组
{
 if(n==0)
  cmd(0x80+m);
 else
  cmd(0x80+0x40+m);
 while(*str)
  dat(*str++);
}

void init()    //初始化
{
  duan=0;
 wei=0;
 rs=0;
 rw=0;
 en=0;
 cmd(0x38);//设置16*2显示 5*7点阵 8位数据接口
 cmd(0x0c); //开显示  不显示光标
 cmd(0x06); //每写一个数指针加一
 cmd(0x01); //指针至0
 //cmd(0x18);  //左移
}
void display()    //显示函数
{
 string(0,4,"wqiaoccc");
 cmd(0x80+14);
 dat(Time[mz1]);
 dat(Time[mz2]);
 cmd(0x80+0x40);

 dat(Time[2]);
 dat(Time[0]);
 dat(Time[1]);
 dat(Time[4]);
 dat('-');
 dat(Time[mon/10]);
 dat(Time[mon%10]);
 dat('-');
 dat(Time[day/10]);
 dat(Time[day%10]);
 dat(' ');
 dat(Time[sz1]);
 dat(Time[sz2]);
 dat(':');
 dat(Time[fz1]);
 dat(Time[fz2]);
 dat(':');
 
}
void calc()     //计算日期,最多值只累积月,想累计到年,可多定义几个变量,同样多写几行就行
{
  if(flag!=mz2)
 {
  flag=mz2;
  if(mz2>9)
   {mz2=0;mz1++;}
  if(mz1>5)

   {fz2++;mz1=0;}
  if(fz2>9)
   {fz1++; fz2=0;}
  if(fz1>5)
   {sz2++;fz1=0;}
     if(sz2>9)
    {sz1++;sz2=0;}
  if(sz1==2&&sz2>4)
   {sz1=0;day++;}
  if(day>31)
   {day=0;mon++;} ;
 }
}
void main()
{
 //int i;
 init();
 mon=7;//时间初始化,可随意更改,sz:时钟 fz:分钟......
 day=7;
 sz1=1;
 sz2=5;
 fz1=3;
 fz2=7;
 mz1=mz2=0;
 flag=mz2;      //flag用于判断秒钟(mz)是否加了一
 TMOD=0x01;       //设置定时器0
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;

 //string( 0,16,"wo yao go left!");
 //string(1,16,"I want go left!");
 while(1)
 {
  calc();
  display();
  }
 /* for(i=0;i<15;i++)
  {
   cmd(0x18);
   delay(300);
  } */
 // while(1);
}
void tim() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 count++;
 if(count==20)
 {
  count=0;
  mz2++;
  calc();
 }
}

0 0
原创粉丝点击