您的位置:首页 > 其它

电子时钟

2013-07-15 08:47 274 查看
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++;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: