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++;
}