电子时钟

lcd液晶屏,51单片机


#include <reg52.h>


#define uint unsigned int
#define uchar unsigned char


sbit lcdrs = P2^4; 
sbit lcdrw = P2^5;
sbit lcden = P2^6;
sbit dula = P3^6;
sbit wela = P3^7;
sbit key_1 = P3^1;
sbit key_2 = P3^2;
sbit key_3 = P3^3;


uchar code table[] = "    2013.7.14";
uchar code table_1[] = "    00:00:00";
uchar num,shi = 0,fen = 0,miao = 0,keynum = 0;


void T0_init()//定时器0初始化
{
    TMOD = 0x01;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
TR0 = 1;
ET0 = 1;
EA = 1;

 
void delay_Ms(uint x)//延时函数
{
     uint i,j;
     for(i = x;i > 0;i--)
        for(j = 123;j > 0;j--);
}


void write_com(uchar com)//lcd写命令
{
    lcdrs = 0;
lcdrw = 0;
P0 = com;
delay_Ms(5);
lcden = 1;
delay_Ms(5);
lcden = 0;
}


void write_date(uchar date)//lcd写数据
{
    lcdrs = 1;
lcdrw = 0;
P0 = date;
delay_Ms(5);
lcden = 1;
delay_Ms(5);
lcden = 0;
}


void LCD_init()//lcd初始化
{
uint i;
lcden = 0;
dula = 0;
wela = 0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(i = 0;i < 13;i ++)
{
   write_date(table[i]);
delay_Ms(5);
}
write_com(0x80+0x40);
for(i = 0;i < 12;i ++)
{
   write_date(table_1[i]);
delay_Ms(5);
}
}


void hebing(uchar add,uchar date)
{
    uchar qian,hou;
qian = date / 10;
hou = date %10;
    write_com(0x80+0x40+add);
write_date(0x30+qian);
write_date(0x30+hou);


}


void keyscan()//按键扫描
{
if(key_1 == 0)
{
   delay_Ms(5);
if(key_1 == 0)
{
   keynum++;
while(!key_1);
if(keynum == 1)
{
   TR0 = 0;
write_com(0x80+0x40+11);
   write_com(0x0f);

if(keynum == 2)
{
write_com(0x80+0x40+8);
}
if(keynum == 3)
{
   write_com(0x80+0x40+5);;
}
if(keynum == 4)
{
   keynum = 0;
TR0 = 1;
write_com(0x0c);
}

}
if(keynum == 1)
{
if(key_2 == 0)
{
   delay_Ms(5);
   if(key_2 == 0)
{
   while(!key_2);
   miao ++;
if(miao == 60)
   miao = 0;
hebing(10,miao);
write_com(0x80+0x40+11);   

}
if(key_3 == 0)
{
   delay_Ms(5);
if(key_3 == 0)
{
   while(!key_3);
miao --;
if(miao == 0)
       miao = 59;
hebing(10,miao);
write_com(0x80+0x40+11);
            }
}
}
if(keynum == 2)
{
   if(key_2 == 0)
{
   delay_Ms(5);
if(key_2 == 0)
{
   while(!key_2);
fen++;
if(miao == 60)
   fen = 0;
hebing(7,fen);
write_com(0x80+0x40+8);
}
}
if(key_3 == 0)
{
   delay_Ms(5);
if(key_3 == 0)
{
   while(!key_3);
fen--;
if(fen == 0)
   fen = 59;
hebing(7,fen);
write_com(0x80+0x40+8);
}
}
}
if(keynum ==3)
{
   if(key_2 == 0)
{
   delay_Ms(5);
if(key_2 == 0)
{
   while(!key_2);
shi++;
if(shi ==24)
   shi = 0;
hebing(4,shi);
write_com(0x80+0x40+5);
}
}
if(key_3 == 0)
{
   delay_Ms(5);
if(key_3 == 0)
{
   while(!key_3);
shi --;
if(shi == 0)
   shi = 23;
hebing(4,shi);
write_com(0x80+0x40+5);   
}
}
}
}




void count()
{
if(num == 20)
{
   num = 0;
miao ++;
if(miao == 60)
{
   miao = 0;
fen ++;
            if(fen ==60)
{
   fen = 0;
shi ++;
if(shi == 24)
{
   shi = 0;

   hebing(4,shi);
}
hebing(7,fen);
}
    hebing(10,miao);
}

}  


void main()
{
    T0_init();
LCD_init();
hebing(4,shi);
hebing(7,fen);
hebing(10,miao);
while(1)
{
   keyscan();
count();
    }  
}


void timer0()interrupt 1
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256; 
num++;
}  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值