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
补充:综合编程 , 其他综合 ,