LCD的时钟显示

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>

sbit RS = P2^4;   //定义端口 
sbit RW = P2^5;
sbit EN = P2^6;
sbit spk = P1^2;

#define RS_CLR RS=0 
#define RS_SET RS=1
#define RW_CLR RW=0 
#define RW_SET RW=1 
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
unsigned char shi,fen,miao,tt;
unsigned char table[]="CLOCK !";
unsigned char table1[]="00:00:00";
sbit key1=P3^7;
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4;
sbit key5=P3^3;

void DelayUs2x(unsigned char t)
{   
 while(--t);
}

void DelayMs(unsigned char t)
{

 while(t--);

 {
     //大致延时1mS
     DelayUs2x(245);
     DelayUs2x(245);
 }
}

void delay(unsigned int t)
{
    unsigned char j,k;
    for(j = 0; j < 255; j++)
        for(k = 0; k < t; k++)
            ;   
}

 bit LCD_Check_Busy(void) 
 { 
 DataPort= 0xFF; 
 RS_CLR; 
 RW_SET; 
 EN_CLR; 
 _nop_(); 
 EN_SET;
 return (bit)(DataPort & 0x80);
 }

 void LCD_Write_Com(unsigned char com) 
 {  
// while(LCD_Check_Busy()); //忙则等待
 DelayMs(5);
 RS_CLR; 
 RW_CLR; 
 EN_SET; 
 DataPort= com; 
 _nop_(); 
 EN_CLR;
 }

 void LCD_Write_Data(unsigned char Data) 
 { 
 //while(LCD_Check_Busy()); //忙则等待
 DelayMs(5);
 RS_SET; 
 RW_CLR; 
 EN_SET; 
 DataPort= Data; 
 _nop_();
 EN_CLR;
 }

 void LCD_Clear(void) 
 { 
 LCD_Write_Com(0x01); 
 DelayMs(5);
 }

 void LCD_Init(void) 
 {
   unsigned char i;
   LCD_Write_Com(0x38);    /*显示模式设置*/ 
   DelayMs(5); 
   LCD_Write_Com(0x38); 
   DelayMs(5); 
   LCD_Write_Com(0x38); 
   DelayMs(5); 
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*显示关闭*/ 
   LCD_Write_Com(0x01);    /*显示清屏*/ 
   LCD_Write_Com(0x06);    /*显示光标移动设置*/ 
   DelayMs(5); 
   LCD_Write_Com(0x0C);    /*显示开及光标设置*/
   shi=0;
   fen=0;
   miao=0;
   key1=1;
   key2=1;
   key3=1;
   key4=1;
   key5=1;
   LCD_Write_Com(0x80+5);
   for(i=0;i<7;i++)
   {
   LCD_Write_Data(table[i]);
   }
    LCD_Write_Com(0x80+0x44);
    for(i=0;i<8;i++)
   {
   LCD_Write_Data(table1[i]);
   }
   TMOD=0X01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   EA=1;
   ET0=1;
   TR0=1;
   }

   void write_shifenmiao(unsigned char add,unsigned char Data)
   {
   unsigned char shi,ge;
   shi=Data/10;
   ge=Data%10;
   LCD_Write_Com(0x80+0x40+add);
   LCD_Write_Data(0x30+shi);
   LCD_Write_Data(0x30+ge);
   }

  void time0() interrupt 1
  {
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   tt++;
   if(tt==20)
   {
   tt=0;
   miao++;
   if(miao==60)
   {
   miao=0;
   fen++;
   if(fen==60)
   {
    spk = 1;
    delay(500);
    spk = 0;

   fen=0;

   shi++;
   if(shi==24)
   {
   shi=0;
   }
   write_shifenmiao(4,shi);
   }
   write_shifenmiao(7,fen);
   }
   write_shifenmiao(10,miao);
   }
   }

   void keyscan()
   {
   if(key1==0)
   {
   DelayMs(5);
   if(key1==0)
   {
   TR0=0;
   shi++;
   if(shi==24)
   {
   shi=0;
   }
   write_shifenmiao(4,shi);
   DelayMs(200);
   TR0=1;
   }
   }
   if(key2==0)
   {
   DelayMs(5);
   if(key2==0)
   {
   TR0=0;
   shi--;
   if(shi>24)
   {
   shi=23;
   }
   write_shifenmiao(4,shi);
   DelayMs(200);
   TR0=1;
   }
   }
    if(key3==0)
   {
   DelayMs(5);
   if(key3==0)
   {
   TR0=0;
   fen++;
   if(fen==60)
   {
   fen=0;
   }
   write_shifenmiao(7,fen);
   DelayMs(200);
   TR0=1;
   }
   }         
    if(key4==0)
   {
   DelayMs(5);
   if(key4==0)
   {
   TR0=0;
   fen--;
   if(fen>24)
   {
   fen=59;
   }
   write_shifenmiao(7,fen);
   DelayMs(200);
   TR0=1;
   }
   }
    if(key5==0)
   {
   DelayMs(5);
   if(key5==0)
   {
   TR0=0;
   miao=0;
   write_shifenmiao(10,miao);
   DelayMs(200);
   TR0=1;
   }
   }
   }         

void main(void) 
{ 
LCD_Init(); 

while (1) 
 {  
 keyscan();
}
 }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XuLujuncsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值