📄 12864时钟.c
字号:
#include<reg51.h>
#include<DB_12864.h>
#define lcd_off 0x3e
#define lcd_on 0x3f
#define add_x 0xb8
#define add_y 0x40
#define add_z 0xc0
#define uchar unsigned char
#define uint unsigned int
char counter,miao,shi,fen,yue,ri,flag,counter1;
uint nian;
sbit RST = P1^5 ;
sbit EN = P1^4 ;
sbit RW = P1^3 ;
sbit RS =P1^2 ;
sbit CS_L =P1^1 ;
sbit CS_R =P1^0 ;
sbit s1=P2^0;
sbit s2=P2^1;
sbit s3=P2^2;
void keyscan();
void delay(uint i)
{
uchar j;
for(;i>0;i--)
for (j=0;j<110;j++);
}
void LCDsel(uchar sel)
{
switch(sel)
{
case 0:CS_L=0;CS_R=0 ;break;
case 1:CS_L=1;CS_R=0 ;break; //选择左边
case 2:CS_L=0;CS_R=1 ;break; //选择右边
}
}
void writedate(uchar date)
{
RS=1;
RW=0;
P0=date;
EN=1;
;
EN=0;
}
void writecom(uchar com)
{
RS=0;
RW=0;
P0=com;
EN=1;
;
EN=0;
}
void lcd12864init()
{
RST=0;
delay(5);
RST=1;
LCDsel(0);
writecom(lcd_off);
writecom(lcd_on);
}
void setX(uchar i)
{
writecom(add_x+i);
}
void setY(uchar i)
{
writecom(add_y+i);
}
void setZ(uchar i)
{
writecom(add_z+i);
}
void clearlcd()
{
uchar i,j;
LCDsel(0);
for(i=0;i<8;i++)
{
writecom(lcd_on) ;
setX(i);
setY(0);
setZ(0);
for(j=0;j<64;j++)
{
writedate(0x00) ;
}
}
}
void leftdatesend(uchar x,uchar y,uchar *loc,uchar bytes,uchar flag)
{
uchar i;
LCDsel(1);
setX(x);
setY(y);
for(i=0;i<bytes;i++)
{ if(flag)
writedate(*(loc+i));
else
writedate(~*(loc+i));
}
}
void rightdatesend(uchar x,uchar y,uchar *loc,uchar bytes,uchar flag)
{
uchar i;
LCDsel(2);
setX(x);
setY(y);
for(i=0;i<bytes;i++)
{ if(flag)
writedate(*(loc+i));
else
writedate(~*(loc+i));
}
}
void displaymiao(uchar miao,uchar flag)
{
uchar shi,ge;
shi=miao/10;
ge=miao%10;
rightdatesend(2,48,(taba+shi*16),8,flag);
rightdatesend(3,48,(taba+shi*16+8),8,flag);
rightdatesend(2,56,(taba+ge*16),8,flag);
rightdatesend(3,56,(taba+ge*16+8),8,flag);
}
void clearmiao()
{
uchar i,j;
LCDsel(2);
for(i=2;i<=3;i++)
{
setX(i);
setY(48);
for(j=0;j<16;j++)
writedate(0x00);
}
}
void displayfen(uint fen,uchar flag)
{
uchar shi,ge;
shi=fen/10;
ge=fen%10;
rightdatesend(2,24,taba+shi*16,8,flag);
rightdatesend(3,24,taba+shi*16+8,8,flag);
rightdatesend(2,32,taba+ge*16,8,flag);
rightdatesend(3,32,taba+ge*16+8,8,flag);
}
void displayshi(uint shi,uchar flag)
{
uchar sh,ge;
sh=shi/10;
ge=shi%10;
rightdatesend(2,0,taba+sh*16,8,flag);
rightdatesend(3,0,taba+sh*16+8,8,flag);
rightdatesend(2,8,taba+ge*16,8,flag);
rightdatesend(3,8,taba+ge*16+8,8,flag);
}
void displaynian(uint nian,uchar flag)
{
uchar qian,bai,shi,ge;
qian=nian/1000;
bai=nian%1000/100;
shi=nian%1000%100/10;
ge=nian%1000%100%10;
leftdatesend(0,0,taba+qian*16,8,flag);
leftdatesend(1,0,taba+qian*16+8,8,flag);
leftdatesend(0,8,taba+bai*16,8,flag);
leftdatesend(1,8,taba+bai*16+8,8,flag);
leftdatesend(0,16,taba+shi*16,8,flag);
leftdatesend(1,16,taba+shi*16+8,8,flag);
leftdatesend(0,24,taba+ge*16,8,flag);
leftdatesend(1,24,taba+ge*16+8,8,flag);
}
void displayyue(uchar yue,uchar flag)
{
uchar shi,ge;
shi=yue/10;
ge=yue%10;
leftdatesend(0,48,taba+shi*16,8,flag);
leftdatesend(1,48,taba+shi*16+8,8,flag);
leftdatesend(0,56,taba+ge*16,8,flag);
leftdatesend(1,56,taba+ge*16+8,8,flag);
}
void displayri(uint ri,uchar flag)
{
uchar sh,ge;
sh=ri/10;
ge=ri%10;
rightdatesend(0,16,taba+sh*16,8,flag);
rightdatesend(1,16,taba+sh*16+8,8,flag);
rightdatesend(0,24,taba+ge*16,8,flag);
rightdatesend(1,24,taba+ge*16+8,8,flag);
}
void miaoflash(uchar flag1)
{
uchar i,j;
if(flag1==0)
{
LCDsel(2);
for(i=2;i<=3;i++)
{
setX(i);
setY(40);
for(j=0;j<8;j++)
writedate(0x00);
}
}
else
{
rightdatesend(2,40,tabc+64,8,1); //显示:
rightdatesend(3,40,tabc+72,8,1);
}
}
void lcd12864init1()
{
leftdatesend(0,0,taba+32,8,1); //显示2
leftdatesend(1,0,taba+40,8,1);
leftdatesend(0,8,taba,8,1); //0
leftdatesend(1,8,taba+8,8,1);
leftdatesend(0,16,taba,8,1); //0
leftdatesend(1,16,taba+8,8,1);
leftdatesend(0,24,taba+128,8,1); //8
leftdatesend(1,24,taba+136,8,1) ;
leftdatesend(0,32,tabc,16,1); //nian
leftdatesend(1,32,tabc+16,16,1);
leftdatesend(0,48,taba,8,1);//显示04
leftdatesend(1,48,taba+8,8,1);
leftdatesend(0,56,taba+64,8,1);
leftdatesend(1,56,taba+72,8,1);
rightdatesend(0,0,tabc+32,16,1);//显示月1
rightdatesend(1,0,tabc+48,16,1);
rightdatesend(0,16,taba+32,8,1);//显示20
rightdatesend(1,16,taba+40,8,1);
rightdatesend(0,24,taba,8,1);
rightdatesend(1,24,taba+8,8,1);
rightdatesend(0,32,tabb+192,16,1);//显示日1
rightdatesend(1,32,tabb+208,16,1);
leftdatesend(2,0,tabc+80,16,1);//显示星期日1
leftdatesend(3,0,tabc+96,16,1);
leftdatesend(2,16,tabc+112,16,1);
leftdatesend(3,16,tabc+128,16,1);
leftdatesend(2,32,tabb+192,16,1);
leftdatesend(3,32,tabb+208,16,1);
rightdatesend(2,16,tabc+64,8,1); //显示:
rightdatesend(3,16,tabc+72,8,1);
rightdatesend(2,40,tabc+64,8,1); //显示:
rightdatesend(3,40,tabc+72,8,1);
displaymiao(31,1);
displayfen(30,1);
displayshi(12,1);
}
void timeinit()
{ TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=1;
shi=12;fen=30;miao=31;
nian=2008;yue=4;ri=20;
}
void main()
{
lcd12864init();
clearlcd();
lcd12864init1();
timeinit();
// writecom(0x0a);
//displaynian(2006);
//displayyue(6);
//displayri(11);
//clearmiao();
while(1)
{
keyscan();
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
counter++;
if(counter==10)
miaoflash(0);
if(counter==20)
{
counter=0;
miaoflash(1);
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
ri++;
{
if((nian%4==0)&&(nian%100!=0)||(nian%400==0)) flag=1;
if(yue==2&&ri==30&&flag==1)
{
ri=1;
yue++;
}
else if(yue==2&&ri==29&&flag==0)
{
ri=1;
yue++;
}
else if(ri==31&&(yue==4||yue==6||yue==9 ||yue==11))
{
ri=1;
yue++ ;
}
else if(ri==32)
{
ri=1;
yue++ ;
if(yue==13)
{
yue=1;
nian++;
}
displaynian(nian,1);
}
displayyue(yue,1);
}
displayri(ri,1);
}
displayshi(shi,1);
}
displayfen(fen,1) ;
}
clearmiao();
displaymiao(miao,1);
}
}
void keyscan()
{
if(s1==0)
{
delay(10);
if(s1==0)
{
counter1++;
while(!s1) ;
if(counter1==1)
{
TR0=0;
displaymiao(miao,0);
}
if(counter1==2)
{
displayfen(fen,0);
displaymiao(miao,1);
}
if(counter1==3)
{
displayshi(shi,0);
displayfen(fen,1);
}
if(counter1==4)
{
displayri(ri,0) ;
displayshi(shi,1);
}
if(counter1==5)
{
displayyue(yue,0);
displayri(ri,1);
}
if(counter1==6)
{
displaynian(nian,0);
displayyue(yue,1);
}
if(counter1==7)
{
counter1=0;
displaynian(nian,1);
TR0=1;
}
}
}
if(counter1!=0)
{
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2);
if(counter1==1)
{
miao++;
if(miao==60)
miao=0;
displaymiao(miao,0);
}
if(counter1==2)
{
fen++;
if(fen==60)
fen=0;
displayfen(fen,0);
}
if(counter1==3)
{
shi++;
if(shi==24)
shi=0;
displayshi(shi,0);
}
if(counter1==4)
{
ri++;
if(ri==32)
ri==1;
displayri(ri,0);
}
if(counter1==5)
{
yue++;
if(yue==13)
yue=1;
displayyue(yue,0);
}
if(counter1==6)
{
nian++;
if(nian==2100)
nian=2000;
displaynian(nian,0);
}
}
}
if(s3==0)
{
delay(10);
if(s3==0)
{
while(!s3) ;
if(counter1==1)
{
miao--;
if(miao==-1)
miao=59;
displaymiao(miao,0);
}
if(counter1==2)
{
fen--;
if(fen==-1)
fen=59;
displayfen(fen,0);
}
if(counter1==3)
{
shi--;
if(shi==-1)
shi=23;
displayshi(shi,0);
}
if(counter1==4)
{
ri--;
if(ri==0)
ri==31;
displayri(ri,0);
}
if(counter1==5)
{
yue--;
if(yue==0)
yue=12;
displayyue(yue,0);
}
if(counter1==6)
{
nian--;
if(nian==1999)
nian=2100;
displaynian(nian,0);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -