ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:17.59KB ,
资源ID:9819376      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9819376.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DS1302+1602+键盘调整+闹钟.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DS1302+1602+键盘调整+闹钟.docx

1、DS1302+1602+键盘调整+闹钟DS1302+1602+键盘调整+闹钟 #include #include#define uchar unsigned char#define uint unsigned int /定义的的4个键盘sbit s1=P30; /时钟功能键sbit s2=P31; /加键sbit s3=P32; /减键sbit s4=P36; /确认键sbit s5=P33; /闹钟功能键sbit dula=P26; /数码管操作sbit wela=P27;sbit lcden=P25; /液晶操作sbit lcdrs=P10;sbit lcdrw=P11;sbit rd=P

2、37; /为了分离出3个独立键盘sbit FM=P23; /蜂鸣器口sbit ACC0=ACC0; /累加器喂ACC 这是位定义sbit ACC7=ACC7; sbit sclk=P21; /DS1302操作sbit data1=P20;sbit rst=P24;uchar s1num,flag1,flag2,s5num;int miao,shi,fen,nian,yue,ri,week,afen,ashi;int x1,x2;uchar code table1=SUN;/星期字表uchar code table2=MON;uchar code table3=TUE;uchar code ta

3、ble4=WED;uchar code table5=THU; uchar code table6=FRI;uchar code table7=SAT;void delayms(uint xms) /延时函数uint x,y;for(x=xms;x0;x-)for(y=110;y0;y-);void di() /蜂鸣器函数FM=0;delayms(100);FM=1;void cmg88() /关数码管函数dula=1;P0=0x00;dula=0;void write_com(uchar com) /液晶写命令函数lcdrs=0;lcden=0;P0=com;delayms(5);lcden

4、=1;delayms(5);lcden=0;void write_date(uchar date) /液晶写数据函数lcdrs=1;lcden=0;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;void Write1302(uchar dat) /向1302写一个字节数据 uchar i;ACC=dat;for(i=8;i0;i-) data1=ACC0; sclk=1; sclk=0; ACC=ACC1; void WriteSet1302(uchar Cmd,uchar dat) /根据命令,向1302写一个字节数据 rst=0; _nop_(

5、); sclk=0; _nop_(); rst=1; delayms(2); Write1302(Cmd); Write1302(dat); sclk=1; rst=0; uchar Read1302() /向1302读一个字节数据 uchar i; for(i=8;i0;i-) ACC=ACC1;ACC7=data1;sclk=1; sclk=0;return(ACC); uchar ReadSet1302(uchar Cmd) /根据命令,向1302读一个字节数据 uchar dat; rst=0; sclk=0; rst=1; Write1302(Cmd); dat=Read1302()

6、; sclk=1; rst=0; return(dat); void inital_1302() / 初始化DS1302函数 WriteSet1302(0x8e,0x00); /禁止写保护WriteSet1302(0x90,0xaa); /定义充电WriteSet1302(0x80,0x45); /秒WriteSet1302(0x84,0x18); / 时WriteSet1302(0x82,0x47); / 分WriteSet1302(0x8c,0x16); /年WriteSet1302(0x88,0x05); /月WriteSet1302(0x86,0x23); /日WriteSet1302

7、(0x8a,0x01); /星期WriteSet1302(0xc0,0x07); /闹钟小时初始化WriteSet1302(0xfc,0x30); /闹钟分钟初始化WriteSet1302(0x8e,0x80); /开写保护void write_sfm(uchar add,uchar dat) /时分秒函数uchar gw,sw;gw=dat%16;sw=dat/16;write_com(0x80+0x40+add);write_date(sw+0x30);write_date(gw+0x30);void write_nyr(uchar add,uchar dat) /年月日函数uchar g

8、w,sw;gw=dat%16;sw=dat/16;write_com(0x80+add);write_date(sw+0x30);write_date(gw+0x30);void write_week(uchar xq) /写星期函数uchar x;write_com(0x80+12);switch(xq)case 1:for(x=0;x3;x+)write_date(table1x);break;case 2:for(x=0;x3;x+)write_date(table2x);break;case 3:for(x=0;x3;x+)write_date(table3x);break;case

9、4:for(x=0;x3;x+)write_date(table4x);break;case 5:for(x=0;x3;x+)write_date(table5x);break;case 6:for(x=0;x3;x+)write_date(table6x);break;case 7:for(x=0;x=6)x2=0;miao=x1+x2*16; write_sfm(7,miao);write_com(0x80+0x40+8);break;case 2:x1=fen%16;x2=fen/16; x1+;if(x1=10) x1=0;x2+; if(x2=6)x2=0;fen=x1+x2*16;

10、 write_sfm(4,fen);write_com(0x80+0x40+5);break;case 3:x1=shi%16;x2=shi/16; x1+;if(x1=10) x1=0;x2+;if(x2=2&x1=4)x1=0;x2=0;shi=x1+x2*16; write_sfm(1,shi);write_com(0x80+0x40+2);break;case 4:x1=(week)%10;x2=(week)/10;x1+;if(x1=8)x1=1;week=x2*16+x1;write_week(week); write_com(0x80+14);break;case 5:x1=ri

11、%16;x2=ri/16; x1+;if(x1=10) x1=0;x2+; if(x2=3&x1=2)x1=0;x2=0;ri=x1+x2*16; write_nyr(9,ri);write_com(0x80+10);break;case 6:x1=yue%16;x2=yue/16; x1+;if(x2=1&x1=3) x1=1;x2=0; if(x1=10)x1=0;x2+;yue=x1+x2*16; write_nyr(6,yue);write_com(0x80+7);break;case 7:x1=nian%16;x2=nian/16; x1+;if(x2=9)&(x1=10) x1=0

12、;x2=0;if(x1=10)x2+;x1=0;nian=x1+x2*16; write_nyr(3,nian);write_com(0x80+4);break;if(s3=0) /时钟减键delayms(5);if(s3=0) while(!s3);di();switch(s1num)case 1:x1=miao%16;x2=miao/16; x1-;if(x1=-1) x1=9;x2-; if(x2=-1)x2=5;miao=x1+x2*16; write_sfm(7,miao);write_com(0x80+0x40+8);break;case 2:x1=fen%16;x2=fen/16

13、; x1-;if(x1=-1) x1=9;x2-; if(x2=-1)x2=5;fen=x1+x2*16; write_sfm(4,fen);write_com(0x80+0x40+5);break;case 3:x1=shi%16;x2=shi/16; x1-;if(x1=-1) x1=9;x2-;if(x2=-1)x1=3;x2=2;shi=x1+x2*16; write_sfm(1,shi);write_com(0x80+0x40+2);break;case 4:x1=(week)%10;x2=(week)/10;x1-;if(x1=0)x1=7;week=x2*16+x1;write_

14、week(week); write_com(0x80+14);break;case 5:x1=ri%16;x2=ri/16; x1-;if(x1=-1) x1=9;x2-; if(x2=-1)x1=1;x2=3;ri=x1+x2*16; write_nyr(9,ri);write_com(0x80+10);break;case 6:x1=yue%16;x2=yue/16; x1-;if(x2=1)&(x1=-1) x1=9;x2-; if(x2=0)&(x1=0)x1=2;x2=1;yue=x1+x2*16; write_nyr(6,yue);write_com(0x80+7);break;c

15、ase 7:x1=nian%16;x2=nian/16; x1-;if(x1=-1) x1=9;x2-; if(x2=-1)x1=9;x2=9;nian=x1+x2*16; write_nyr(3,nian);write_com(0x80+4);break;if(s1num!=0|s5num!=0) /表示时钟或者闹钟处于调整状态if(s4=0) /确定状态的按键delayms(5);if(s4=0)if(s1num!=0) /表示时钟处于调整状态while(!s4); /确定键被按下di();WriteSet1302(0x8e,0x00); /按了确认键后,把调整了的所有数据当前状态存入到D

16、S1302中WriteSet1302(0x80,miao); WriteSet1302(0x84,shi);WriteSet1302(0x82,fen); WriteSet1302(0x8a,week); WriteSet1302(0x8c,nian); WriteSet1302(0x88,yue);WriteSet1302(0x86,ri); WriteSet1302(0x8e,0x80); flag1=0;write_com(0x0c);s1num=0;if(s5num!=0) /表示闹钟处于调整状态while(!s4);di();WriteSet1302(0x8e,0x00); /调整闹

17、钟,不能让时钟暂停,故没把时钟数据写入DS1302中WriteSet1302(0xc0,ashi); /把闹钟数据写入DS1302中WriteSet1302(0xfc,afen); WriteSet1302(0x8e,0x80);flag2=0;s5num=0;write_com(0x0c); if(s5=0&s1num=0) /闹钟功能键 并且时钟不处于调整状态delayms(5);if(s5=0&s1num=0)s5num+;flag2=1;while(!s5);di();if(s5num=1)write_com(0x80+0x40+14);write_com(0x0f);if(s5num

18、=2)write_com(0x80+0x40+11); if(s5num=3)s5num=0;flag2=0;WriteSet1302(0x8e,0x00);WriteSet1302(0xfc,afen);WriteSet1302(0xc0,ashi);WriteSet1302(0x8e,0x80);write_com(0x0c);if(s5num!=0&s1num=0) /只有闹钟处于调整状态if(s2=0) /闹钟加键delayms(5);if(s2=0)while(!s2);di();if(s5num=1)x1=afen%16;x2=afen/16;x1+;if(x1=10)x1=0;x

19、2+;if(x2=6)x2=0;afen=x1+x2*16;write_sfm(13,afen);write_com(0x80+0x40+14);if(s5num=2)x1=ashi%16;x2=ashi/16;x1+;if(x2=2&x1=4)x1=0;x2=0;if(x1=10)x1=0;x2+;ashi=x1+x2*16;write_sfm(10,ashi);write_com(0x80+0x40+11);if(s3=0) /闹钟减键delayms(5);if(s3=0)while(!s3);di();if(s5num=1)x1=afen%16;x2=afen/16; x1-;if(x1

20、=-1) x1=9;x2-; if(x2=-1)x2=5;afen=x1+x2*16; write_sfm(13,afen);write_com(0x80+0x40+14);if(s5num=2)x1=ashi%16;x2=ashi/16; x1-;if(x1=-1) x1=9;x2-;if(x2=-1)x1=3;x2=2;ashi=x1+x2*16; write_sfm(10,ashi);write_com(0x80+0x40+11);void laba()if(shi=ashi)&(fen=afen)&(miao=0)di();void main() /主函数init(); /大初始化cm

21、g88(); /关数码管函数inital_1302(); /DS1302赋初值的初始化ashi=ReadSet1302(0xc1); /从DS1302读出数据afen=ReadSet1302(0xfd);write_sfm(10,ashi); /读出数据送给液晶显示write_sfm(13,afen);while(1) keyscan();laba();if(flag1=0&flag2=0) /经过一系列调整后,最终继续满足这个条件 /从DS1302读数据miao=ReadSet1302(0x81); /秒fen=ReadSet1302(0x83); /分shi=ReadSet1302(0x85); /时ri=ReadSet1302(0x87); /日yue=ReadSet1302(0x89);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1