sed1520显示时间_第1页
sed1520显示时间_第2页
sed1520显示时间_第3页
sed1520显示时间_第4页
sed1520显示时间_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*将时间显示在LCD上,LCD的控制器是sed1520,可以调整,调整规律为s1键 为时分秒调整端,按一下为秒调整,按2下位分调整,按三次为时调整,按四次调整结束, 计时开始。s2,s3键为时分秒加减端,该程序通过调试,但是不是时钟芯片来控制时间。 只能是51学习之用,工业上,时钟更多是用时钟芯片,比如DS1302,PCF8563,等, 请读者注意*/#include #include #define xiezhi1 XBYTE0x8000 /*left lcd command address*/#define xieshuju1 XBYTE0x8001 /*left lcd data write addresss*/#define duzhi1 XBYTE0x8002 /*left lcd read status address*/#define xiezhi2 XBYTE0x8004 /*right lcd write command address*/#define xieshuju2 XBYTE0x8005 /*right lcd data write addresss*/#define duzhi2 XBYTE0x8006 /*right lcd read status address*/sbit s1=P11; /*时分秒选择端*/sbit s2=P12; /*加端*/sbit s3=P13 ; /*减端*/sbit beep=P10;unsigned char code tab18= 0x00,0x00,0x00,0x7E,0x81,0x81,0x81, 0x7e,0x00,0x00,0x00,0x00,0x00,0x82,0xff,0x80, /*1*/0x00,0x00,0x00,0xc6,0xa1,0x91,0x89,0xc6, /*2*/0x00,0x00,0x00,0x42,0x81,0x81,0x99,0x66,0x00,0x00,0x00,0x1f,0x10,0xff,0x10,0x10,0x00,0x00,0x00,0x4F,0x89,0x89,0x89,0x79,0x00,0x00,0x00,0x7E,0x89,0x89,0x89,0x72,0x00,0x00,0x00,0x01,0x01,0xF9,0x05,0x03,0x00,0x00,0x00,0x76,0x89,0x89,0x89,0x76,0x00,0x00,0x00,0x4E,0x91,0x91,0x91,0x7E /*9*/;unsigned char code tab2=0x00,0x00,0x00, 0xcc, 0x00,0x00 ;/*LCD上冒号的编码*/unsigned char shi,fen,miao; /*定义时分秒*/unsigned char num;unsigned int tt;unsigned char ledbuf6;void writezhi1(unsigned char command)while(duzhi1&0x80); /*先判断读状态高位是不是忙信号*/xiezhi1=command; /*左边写指令子程序*/ void writeshuju1(unsigned char shuju)while(duzhi1&0x80); /*先判断读状态高位是不是忙信号*/xieshuju1=shuju; /*左边写数据子程序*/ void writezhi2(unsigned char command) while(duzhi2&0x80); /*先判断读状态高位是不是忙信号*/xiezhi2=command; /*右边写指令子程序*/ void writeshuju2(unsigned char shuju)while(duzhi2&0x80); /*先判断读状态高位是不是忙信号*/xieshuju2=shuju; /*右边写数据子程序*/ void init() writezhi1(0xe2); writezhi2(0xe2); /*复位*/ writezhi1(0xa4); writezhi2(0xa4); /*静态驱动*/ writezhi1(0xa9); writezhi2(0xa9); /*刷新率为1/32*/ writezhi1(0xa0); writezhi2(0xa0); /*ADC choice*/ writezhi1(0xc0); writezhi2(0xc0); /*起始行设置*/ writezhi1(0xaf); writezhi2(0xaf); /*开显示*/ void clear() unsigned char i,j; i=0; do writezhi1(i+0xb8); writezhi2(i+0xb8); /*对左右两边LCD4页80列清零*/ writezhi1(0x00); writezhi2(0x00); j=0x50; do writeshuju1(0x00); writeshuju2(0x00); while(-j!=0); while(+i!=4); void delay(unsigned char z) unsigned char x; while(-z!=0) /*按键子程序要用到的延时程序*/ for(x=100;x!=0;x-); void d1() beep=0; /*按一下调整键响一下*/ delay(20); beep=1; void key() if(s1=0) delay(5); if(s1=0) /*第一个按键判断*/ num+; while(!s1); /*等键松开*/ d1(); /*响一下*/ if(num=4) num=0; /*如果第一个按键次数到了四次,则num=0;*/ TR0=1; if(num!=0) TR0=0; /*第一个按键在四次之内,则停止计时,等待时分秒调整*/ if(s2=0) /*第二个按键为时分秒加键*/ delay(5); if(s2=0) while(!s2); /*第一个按键按下后,判断2,3键按下*/ d1(); if(num=1) /*在第一个按键按一次的情况下,按第二个键为秒加*/ miao+; if(miao=60) miao=0; if(num=2) /*在第一个按键按2次的情况下,按第二个键为分加键 */ fen+; if(fen=60) fen=0; if(num=3) /*在第一个按键按3次的情况下,按第二个键为时加键 */ shi+; if(shi=24) shi=0; if(s3=0) /*第三个按键为时分秒减键*/ delay(5); if(s3=0) while(!s3); d1(); if(num=1) /*在第一个按键按一次的情况下,按第三个键为秒减*/ miao-; if(miao=-1) miao=59; if(num=2) /*在第一个按键按2次的情况下,按第三个键为分减*/ fen-; if(fen=-1) fen=59; if(num=3) /*在第一个按键按3次的情况下,按第三个键为时减*/ shi-; if(shi=-1) shi=23; void timer0() interrupt 1 tt-; if(tt=0) /*中断10000次就是一秒*/ tt=10000; miao+; /*秒加一*/ if(miao=60) miao=0; /*if second equal to 60,minute plus one,*/ fen+; if(fen=60) /*if minutes equal to 60,hour plus one*/ fen=0; shi+; if(shi=24) shi=0; /*if hour equal to 24,clear hour buffer*/ void displaylcd(unsigned char page,unsigned char column,unsigned char code_) /*在左边lcd里显示数子子程序*/ unsigned char i; writezhi1(page+0xb8); /*选择页码*/ for(i=0;i8;i+) /*一个数字有8个列显示,等于就是8X8点阵*/ writezhi1(column+i); /*选定列地址*/ writeshuju1(tab1code_i); /*选择某个数字,由code_决定*/ void displaylcd1(unsigned char page,unsigned char column) unsigned char i; /*显示冒号子程序*/ writezhi1(page+0xb8); for(i=0;i6;i+) writezhi1(column+i); writeshuju1(tab2i); void main() TMOD=0x02; /*定时器方式2,自动重装载*/ TH0=0xce; /*定时时间为0.1ms,*/ TL0=0xce; IE=0x82; /* IE=1,ET0=1*/ shi=0; fen=0; /*时分秒初始值为0*/ miao=0; num=0; tt=10000; /*计时10000次就是1秒*/ TR0=1; /*开始定时*/ while(1) init(); /*lcd initiation*/ clear(); /*lcd clear*/ key(); /*调键盘子chengxu*/ ledbuf0=shi/10; ledbuf1=shi%10; /*将时分秒信息放在显示缓冲区*/ ledbuf2=fen/10; ledbuf3=fen%10; ledbuf4=miao/10; ledbuf5=miao%10; displaylcd(0x02,0x00,ledbuf0); /*将时信息放在第2页的起始列*/ displaylcd(0x02,0x08,ledbuf1); displaylcd1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论