当前位置:编程学习 > 网站相关 >>

1602显示时钟可以调节时分秒(加减)

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define uint  unsigned int
static  uchar count,j,s1num;
  char shi,fen,miao;
sbit RS = P2^4; //Pin4
sbit RW = P2^5; //Pin5
sbit E  = P2^6; //Pin6


sbit s1=P3^0;   //矩阵键盘分离出独立键盘
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;


uchar code table1[]=" 2013-7-30  MON ";
uchar code table2[]="    00:00:00    ";
 
/******************************************************************/
/*                    延时函数                               */
/******************************************************************/
void delay(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
       for(y=110;y>0;y--);


}
/******************************************************************/
/*                   写入命令函数                                 */
/******************************************************************/
void WriteCommand(unsigned char c)
{
 delay(5);//操作前短暂延时,保证信号稳定
 E=0;
 RS=0;
 RW=0;
 delay(5);
 E=1;
 P0=c;
 E=0;
}
/******************************************************************/
/*                   写入数据函数                                 */
/******************************************************************/
void WriteData(unsigned char c)
{
 delay(5);  //操作前短暂延时,保证信号稳定
 E=0;
 RS=1;
 RW=0;
 delay(5);
 E=1;
 P0=c;
 E=0;
 RS=0;
}


/******************************************************************/
/*                   初始化函数                                   */
/******************************************************************/
void InitLcd()
{
 //delay(15);
 WriteCommand(0x38); //display mode
 WriteCommand(0x38); //display mode
 WriteCommand(0x38); //display mode
 WriteCommand(0x06); //显示光标移动位置
 WriteCommand(0x0c); //显示开及光标设置
 WriteCommand(0x01); //显示清屏
    // fen=59;   //测试用
   //  miao=53;
    // shi=23;
   delay(15);
   WriteCommand(0x80); //显示第一行
for(j=0;j<16;j++)
{
WriteData(table1[j]);
  delay(5);
}   
   WriteCommand(0x80+0x40);     //显示第二行
for(j=0;j<16;j++) 
{
WriteData(table2[j]);     
  delay(5);
}
}
/******************************************************************/
/*                   时分秒显示                                   */
/******************************************************************/
void writesfm(uchar add,uchar date)
{
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    WriteCommand(0x80+0x40+add);
    WriteData(0x30+shi);
    WriteData(0x30+ge);
}
/******************************************************************/
/*                   键盘功能函数                                 */
/******************************************************************/
void keysan()
{
rd=0;
if(s1==0)
 {
  delay(5);
    if(s1==0)
 {
 s1num++;
 while(!s1);
 if(s1num==1)
 {
   TR0=0;
   WriteCommand(0x80+0x40+10);
   WriteCommand(0x0f);//显示光标
 }
      }  
      if(s1num==2)
 {   
   WriteCommand(0x80+0x40+7);
 }
 if(s1num==3)
 {   
   WriteCommand(0x80+0x40+4);
 }
 if(s1num==4)
 {
   s1num=0;   
   WriteCommand(0x0c); //光标不闪烁
   TR0=1;
 }
       }
   if(s1num!=0)   //s1抬起时完成加减操作
{
  if(s2==0)
 {
   delay(5);
   if(s2==0)
     {
  while(!s2);
  if(s1num==1)
  {
  miao++;
if(miao==60)
    miao=0;
writesfm(10,miao);
WriteCommand(0x80+0x40+10);
  }
  if(s1num==2)
  {
      fen++;
 if(fen==60)
    fen=0;
      writesfm(7,fen);
 WriteCommand(0x80+0x40+7); 
  }
  if(s1num==3)
  {
      shi++;
 if(shi==24)
    shi=0;
 writesfm(4,shi);
 WriteCommand(0x80+0x40+4); 
  }
}
 }
  if(s3==0)
  {
  delay(5);
 if(s3==0)
 {
   while(!s3);
   if(s1num==1)
   {   
miao--;
if(miao==-1)
    miao=59;
writesfm(10,miao);
    WriteCommand(0x80+0x40+10);
   }
   if(s1num==2)
   {
    fen--;
if(fen==-1)
     fen=59;
  writesfm(7,fen);
    WriteCommand(0x80+0x40+7);
   }
   if(s1num==3)
   {
    shi--;
if(shi==-1)
     shi=23;
  writesfm(4,shi);
    WriteCo

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,