时钟显示12864.docx
- 文档编号:28143823
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:36
- 大小:20.72KB
时钟显示12864.docx
《时钟显示12864.docx》由会员分享,可在线阅读,更多相关《时钟显示12864.docx(36页珍藏版)》请在冰豆网上搜索。
时钟显示12864
主程序:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#include
#include
#include
#include
#defineLCD_databusP0
sbitsck=P1^0;
sbitio=P1^1;
sbitrst=P3^6;
sbitRS=P2^2;//RS为0---命令;1----数据
sbitRW=P2^1;//RW为1---写;0---读
sbitEN=P2^0;//使能端
sbitCS1=P2^4;//片选1低电平有效,控制左半屏
sbitCS2=P2^3;//片选1低电平有效,控制右半屏
sbitk1=P1^4;
sbitk2=P1^5;
sbitk3=P1^6;
sbitk4=P1^7;
uintt0,t1,t2,j0,j1,j2,shu=12,yue=7;
voidwrite_ds1302(ucharadd,uchardat);
voidwrite_ds1302_byte(uchardat);
ucharread_ds1302(ucharadd);
voidset_rtc(void);
voidread_rtc(void);
voidtime_pros(void);
voiddisplay(void);
uchardisp[20];
uchartime_data[7]={12,6,7,27,12,3,3};//设定起始时间
ucharwrite_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//年周月天时分秒
ucharread_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
voiddelay(uintz)
{
uintx,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--)
;
}
voidRead_busy()//读“忙”函数-----数据线的最高位DB71则busy
{
P0=0x00;
RS=0;
RW=1;
EN=1;
while(P0&0x80);
EN=0;
}
voidwrite_LCD_command(ucharvalue)//写命令函数
{
Read_busy();//对LCD的每次读写都要读忙
RS=0;//选择命令
RW=0;//读操作
LCD_databus=value;
EN=1;//EN由1----0锁存有效数据
_nop_();
_nop_();
EN=0;
}
voidwrite_LCD_data(ucharvalue)//写数据函数
{
Read_busy();
RS=1;//选择数据
RW=0;
LCD_databus=value;
EN=1;//EN由1----0锁存有效数据
_nop_();
_nop_();
EN=0;
}
ucharRead_LCD(void)//读数据函数
{
ucharvalue;
Read_busy();
LCD_databus=0xFF;//先进行一次空读操作
RS=1;
RW=1;
EN=1;
_nop_();
_nop_();
EN=0;
LCD_databus=0xFF;//读取真正的数据
RS=1;
RW=1;
EN=1;
value=LCD_databus;
_nop_();
_nop_();
EN=0;
returnvalue;
}
voidSet_page(ucharpage)//设置“页”LCD12864共8页,一页是8行点阵点
{
page=0xb8|page;//页的首地址为0xB8
write_LCD_command(page);
}
voidSet_line(ucharstartline)//设置显示的起始行
{
startline=0xC0|startline;//起始行地址为0xC0
write_LCD_command(startline);//设置从哪行开始:
共0--63;一般从0行开始显示
}
voidSet_column(ucharcolumn)//设置显示的列
{
column=column&0x3f;//列的最大值为64
column=0x40|column;//列的首地址为0x40
write_LCD_command(column);//规定显示的列的位置
}
voidSetOnOff(ucharonoff)//显示开关函数:
0x3E是关显示,0x3F是开显示
{
onoff=0x3e|onoff;//onoff:
1---开显示;0---关显示
write_LCD_command(onoff);
}
voidSelectScreen(ucharscreen)//选择屏幕
{
switch(screen)
{
case0:
CS1=0;CS2=0;break;//全屏
case1:
CS1=0;CS2=1;break;//左半屏
case2:
CS1=1;CS2=0;break;//右半屏
case3:
CS1=1;CS2=1;break;//无屏
default:
break;
}
}
voidClearScreen(ucharscreen)//清屏函数
{
uchari,j;
SelectScreen(screen);//0--全屏;1---左半屏;2---右半屏
for(i=0;i<8;i++)//控制页数0-7,共8页
{
Set_page(i);
Set_column(0);
for(j=0;j<64;j++)//控制列数0-63,共64列
{
write_LCD_data(0x00);//写入0,地址指针自加1
}
}
}
voidInitLCD()//LCD的初始化
{
SetOnOff
(1);//开显示
SelectScreen(0);
ClearScreen(0);//清屏
Set_line(0);//开始行:
0
}
voidDisplay_SZ(ucharss,ucharpage,ucharcolumn,uchar*p)
{
uchari;
SelectScreen(ss);
Set_page(page);//写上半页
Set_column(column*8);//控制列
for(i=0;i<8;i++)//控制8列的数据输出
{
write_LCD_data(p[i]);//汉字的上半部分
}
Set_page(page+1);//写下半页
Set_column(column*8);//控制列
for(i=0;i<8;i++)//控制8列的数据输出
{
write_LCD_data(p[i+8]);//汉字的下半部分
}
}
voidDisplay_HZ(ucharss,ucharpage,ucharcolumn,uchar*p)
{
uchari;
SelectScreen(ss);
Set_page(page);//写上半页
Set_column(column*16);//控制列
for(i=0;i<16;i++)//控制16列的数据输出
{
write_LCD_data(p[i]);//汉字的上半部分
}
Set_page(page+1);//写下半页
Set_column(column*16);//控制列
for(i=0;i<16;i++)//控制16列的数据输出
{
write_LCD_data(p[i+16]);//汉字的下半部分
}
}
voidwrite_ds1302_byte(uchardat)
{
uchari;
for(i=0;i<8;i++)
{
sck=0;
io=dat&0x01;
dat=dat>>1;
sck=1;
}
}
voidwrite_ds1302(ucharadd,uchardat)
{
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
write_ds1302_byte(dat);
rst=0;
_nop_();
io=1;
sck=1;
}
ucharread_ds1302(ucharadd)
{
uchari,value;
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
value=value>>1;
sck=0;
if(io)
value=value|0x80;
sck=1;
}
rst=0;
_nop_();
sck=0;
_nop_();
sck=1;
io=1;
returnvalue;
}
voidset_rtc(void)
{
uchari,j;
Display_HZ(2,6,0,lin);
Display_HZ(2,6,1,peng);
for(i=0;i<7;i++)
{
j=time_data[i]/10;
time_data[i]=time_data[i]%10;
time_data[i]=time_data[i]+j*16;
}
write_ds1302(0x8e,0x00);
for(i=0;i<7;i++)
{
write_ds1302(write_add[i],time_data[i]);
}
write_ds1302(0x8e,0x80);
}
voidread_rtc(void)
{
uchari;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302(read_add[i]);
}
}
voidtime_pros(void)
{
disp[0]=time_data[6]%16;//秒
disp[1]=time_data[6]/16;
disp[2]=time_data[5]%16;//分
disp[3]=time_data[5]/16;
disp[4]=time_data[4]%16;//时
disp[5]=time_data[4]/16;
disp[6]=time_data[3]%16;//天
disp[7]=time_data[3]/16;
disp[8]=time_data[2]%16;//月
disp[9]=time_data[2]/16;
disp[10]=time_data[1]%16;//周
disp[11]=time_data[1]/16;
disp[12]=time_data[0]%16;//年
disp[13]=time_data[0]/16;
}
voiddingshi()interrupt1
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=0;
t0=1;
t1=1;
t2=1;
while
(1)
{
if(k1==0)
{
delay(200);
j1++;
}
if(j1==1)
while(t1)
{
switch(disp[12])//年
{
case0:
Display_SZ(1,0,1,tiao_0);break;
case1:
Display_SZ(1,0,1,tiao_1);break;
case2:
Display_SZ(1,0,1,tiao_2);break;
case3:
Display_SZ(1,0,1,tiao_3);break;
case4:
Display_SZ(1,0,1,tiao_4);break;
case5:
Display_SZ(1,0,1,tiao_5);break;
case6:
Display_SZ(1,0,1,tiao_6);break;
case7:
Display_SZ(1,0,1,tiao_7);break;
case8:
Display_SZ(1,0,1,tiao_8);break;
case9:
Display_SZ(1,0,1,tiao_9);break;
}
switch(disp[13])//年
{
case0:
Display_SZ(1,0,0,tiao_0);break;
case1:
Display_SZ(1,0,0,tiao_1);break;
case2:
Display_SZ(1,0,0,tiao_2);break;
case3:
Display_SZ(1,0,0,tiao_3);break;
case4:
Display_SZ(1,0,0,tiao_4);break;
case5:
Display_SZ(1,0,0,tiao_5);break;
case6:
Display_SZ(1,0,0,tiao_6);break;
case7:
Display_SZ(1,0,0,tiao_7);break;
case8:
Display_SZ(1,0,0,tiao_8);break;
case9:
Display_SZ(1,0,0,tiao_9);break;
}
if(k2==0)
{
delay(180);
shu++;
j0=shu/10;
time_data[0]=shu%10;
time_data[0]=time_data[0]+j0*16;
write_ds1302(0x8e,0x00);
write_ds1302(write_add[0],time_data[0]);
write_ds1302(0x8e,0x80);
read_rtc();
time_pros();
switch(disp[12])//年
{
case0:
Display_SZ(1,0,1,tiao_0);break;
case1:
Display_SZ(1,0,1,tiao_1);break;
case2:
Display_SZ(1,0,1,tiao_2);break;
case3:
Display_SZ(1,0,1,tiao_3);break;
case4:
Display_SZ(1,0,1,tiao_4);break;
case5:
Display_SZ(1,0,1,tiao_5);break;
case6:
Display_SZ(1,0,1,tiao_6);break;
case7:
Display_SZ(1,0,1,tiao_7);break;
case8:
Display_SZ(1,0,1,tiao_8);break;
case9:
Display_SZ(1,0,1,tiao_9);break;
}
switch(disp[13])//年
{
case0:
Display_SZ(1,0,0,tiao_0);break;
case1:
Display_SZ(1,0,0,tiao_1);break;
case2:
Display_SZ(1,0,0,tiao_2);break;
case3:
Display_SZ(1,0,0,tiao_3);break;
case4:
Display_SZ(1,0,0,tiao_4);break;
case5:
Display_SZ(1,0,0,tiao_5);break;
case6:
Display_SZ(1,0,0,tiao_6);break;
case7:
Display_SZ(1,0,0,tiao_7);break;
case8:
Display_SZ(1,0,0,tiao_8);break;
case9:
Display_SZ(1,0,0,tiao_9);break;
}
}
if(k3==0)
{
delay(180);
shu--;
j0=shu/10;
time_data[0]=shu%10;
time_data[0]=time_data[0]+j0*16;
write_ds1302(0x8e,0x00);
write_ds1302(write_add[0],time_data[0]);
write_ds1302(0x8e,0x80);
read_rtc();
time_pros();
switch(disp[12])//年
{
case0:
Display_SZ(1,0,1,tiao_0);break;
case1:
Display_SZ(1,0,1,tiao_1);break;
case2:
Display_SZ(1,0,1,tiao_2);break;
case3:
Display_SZ(1,0,1,tiao_3);break;
case4:
Display_SZ(1,0,1,tiao_4);break;
case5:
Display_SZ(1,0,1,tiao_5);break;
case6:
Display_SZ(1,0,1,tiao_6);break;
case7:
Display_SZ(1,0,1,tiao_7);break;
case8:
Display_SZ(1,0,1,tiao_8);break;
case9:
Display_SZ(1,0,1,tiao_9);break;
}
switch(disp[13])//年
{
case0:
Display_SZ(1,0,0,tiao_0);break;
case1:
Display_SZ(1,0,0,tiao_1);break;
case2:
Display_SZ(1,0,0,tiao_2);break;
case3:
Display_SZ(1,0,0,tiao_3);break;
case4:
Display_SZ(1,0,0,tiao_4);break;
case5:
Display_SZ(1,0,0,tiao_5);break;
case6:
Display_SZ(1,0,0,tiao_6);break;
case7:
Display_SZ(1,0,0,tiao_7);break;
case8:
Display_SZ(1,0,0,tiao_8);break;
case9:
Display_SZ(1,0,0,tiao_9);break;
}
}
if(k1==0)
{
t1=0;
delay(200);
j1=2;
}
}
if(j1==2)
while(t2)
{
switch(disp[8])//月
{
case0:
Display_SZ(1,0,4,tiao_0);break;
case1:
Display_SZ(1,0,4,tiao_1);break;
case2:
Display_SZ(1,0,4,tiao_2);break;
case3:
Display_SZ(1,0,4,tiao_3);break;
case4:
Display_SZ(1,0,4,tiao_4);break;
case5:
Display_SZ(1,0,4,tiao_5);break;
case6:
Display_SZ(1,0,4,tiao_6);break;
case7:
Display_SZ(1,0,4,tiao_7);break;
case8:
Display_SZ(1,0,4,tiao_8);break;
case9:
Display_SZ(1,0,4,tiao_9);break;
}
switch(disp[9])//月
{
case0:
Display_SZ(1,0,3,tiao_0);break;
case1:
Display_SZ(1,0,3,tiao_1);break;
case2:
Display_SZ(1,0,3,tiao_2);break;
case3:
Display_SZ(1,0,3,tiao_3);break;
case4:
Display_SZ(1,0,3,tiao_4);break;
case5:
Display_SZ(1,0,3,tiao_5);break;
case6:
Display_SZ(1,0,3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时钟 显示 12864