付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51单片机实现万年历利用AT89S52单片机的P0 口来和另外几个口来限制1602液晶的显示和P1 口还有其它口来限制 ds12887时钟芯片.设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键, 另外两个用来调节时间的增减.原理图:pcb 图:源程序:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit beep=P2A0;/Z蜂鸣器限制 口sbit timeadd=P2A1;/Z调节时间加sbit timesub=P2A2;/Z调节时间减sbit timeclk=P2A3
2、;/Z闹钟设定键sbit timefun=P2A4;/Z时间设定键sbit lcdrs=P2A5;/Z液晶的命令和数据限制口sbit ledrw=P2A6;/Z液晶的写数据口sbit lcden=P2A7;/Z液晶显示模块的使能端sbit timeds=P3A3;/Z时钟芯片地址闸sbit timerw=P3A4;/Z时钟芯片读写sbit timeas=P3A5;/Z时钟芯片地址闸sbit timeen=P3A6;/Z时钟芯片片选uchar code table="20- week "uchar code table1=":"/ 要显示的字符申char
3、num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1;uchar leap;void delay(uint x) (uchar i,j;for(i=x;i>0;i-)for(j=110;j>0;j-);void didi()(beep=0;delay(1000);beep=1;delay(1000);void write_com(uchar com) (lcdrs=0;P0=com;delay (5);lcden=1;delay(20);lcden=0;void write_date(uchar date)
4、 (lcdrs=1;P0=date;delay(5);lcden=1;delay(20);lcden=0;void write_sfm(uchar add,uchar date) ( uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void write_nyr(uchar add,uchar date) ( uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_date(
5、0x30+shi);write_date(0x30+ge);void write_zhou(uchar add,uchar date)write_com(0x80+add);write_date(0x30+date);void write_ds(uchar add,uchar date) timeen=0;timeas=1;timeds=1;timerw=1;P1=add;timeas=0;timerw=0;P1=date;timerw=1;timeas=1;timeen=1;uchar read_ds(uchar add) uchar ds_date;timeas=1;timeds=1;ti
6、merw=1;timeen=0;P1=add;timeas=0;timeds=0;P1=0xff;ds_date=P1;timeds=1;timeas=1;timeen=1;return ds_date;void keyscan() if(flag1=1)/用来关闭闹钟铃声if(timeadd=0)(delay(5);if(timeadd=0)(while(!timeadd=0);flag1=0;if(timesub=0)(delay(5);if(timesub=0)(while(!timesub=0);flag1=0;if(timefun=0)(delay(5);if(timefun=0)(
7、while(!timefun);flag=1; numfun+; if(numfun=1)(write_com(0x80+0x40+0x0a);write_com(0x0f); if(numfun=2)(write_com(0x80+0x40+0x07);write_com(0x0f); if(numfun=3)(write_com(0x80+0x40+0x04);write_com(0x0f); if(numfun=4)(write_com(0x80+0x0f);write_com(0x0f);if(numfun=5)(write_com(0x80+0x09);write_com(0x0f)
8、; if(numfun=6)(write_com(0x80+0x06);write_com(0x0f); if(numfun=7)(write_com(0x80+0x03);write_com(0x0f); if(numfun=8)(numfun=0;flag=0;if(numfun!=0)(if(timeadd=0)(delay(5);while(!timeadd); if(numfun=1) (miao+;if(miao=60)miao=0;write_sfm(9,miao);write_com(0x80+0x40+9);write_ds(0,miao); if(numfun=2)(fen
9、+;if(fen=60)fen=O;write_sfm(6,fen);write_com (0x80+0x40+6);write_ds(2,fen); if(numfun=3)shi+;if(shi=24)shi=0;write_sfm(3,shi);write_com (0x80+0x40+3);write_ds(4,shi); if(numfun=4)week+;if(week=8)week=1:write_zhou(0x0f,week);write_com(0x80+0x0f);write_ds(6,week); if(numfun=5)if(nian=0)switch(yue)ri=1
10、 ;break;ri=1 ;break;ri=1 ;break;ri=1 ;break;ri=1 ;break;ri=1 ;break;ri=1 ;break;case 1:ri+;if(ri=32)case 2:ri+;if(ri=30)case 3:ri+;if(ri=32)case 4:ri+;if(ri=31)case 5:ri+;if(ri=32)case 6:ri+;if(ri=31)case 7:ri+;if(ri=32)case 8:ri+;if(ri=32) case 9:ri+;if(ri=31)ri=1 ;break;ri=1;break;case 10:ri+;if(r
11、i=32) ri=1;break;case 11:ri+;if(ri=31) ri=1;break;case 12:ri+;if(ri=32) ri=1;break;else if(leap&&yue=2)(ri+;if(ri=30)ri=1;else if(yue=2&&leap=0)(ri+;if(ri=29)ri=1;elseswitch(yue)case 1:ri+;if(ri=32) ri=1;break;case 3:ri+;if(ri=32) ri=1;break;case 4:ri+;if(ri=31) ri=1;break;case 5:ri+
12、;if(ri=32) ri=1;break;case 6:ri+;if(ri=31) ri=1;break;case 7:ri+;if(ri=32) ri=1;break;case 8:ri+;if(ri=32) ri=1;break;case 9:ri+;if(ri=31) ri=1;break;case10:ri+;if(ri=32)ri=1;break;case11:ri+;if(ri=31)ri=1;break;case12:ri+;if(ri=32)ri=1;break;write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);if(nu
13、mfun=6)yue+;if(yue=13)yue=0;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);if(numfun=7)nian+;if(nian=100)nian=0;leap=nian%4=0&&nian%100!=0;write_nyr(2,nian);write_com(0x80+2);write_ds(9,nian);if(timesub=0)delay(5);while(!timesub);if(numfun=1)miao-;if(miao=-1)miao=59;write_sfm(9,miao);
14、write_com(0x80+0x40+9);write_ds(0,miao);if(numfun=2)fen-;if(fen=-1)fen=59;write_sfm(6,fen);write_com(0x80+0x40+6);write_ds(2,fen);if(numfun=3)shi-;if(shi=-1)shi=23;write_sfm(3,shi);write_com(0x80+0x40+3);write_ds(4,shi); if(numfun=4) week-; if(week=0) week=7; write_zhou(0x0f,week); write_com(0x80+0x
15、0f); write_ds(6,week); if(numfun=5) if(nian=0) switch(yue)case 1:ri-;if(ri=0) ri=31;break;case 2:ri-;if(ri=0) ri=29;break;case 3:ri-;if(ri=0) ri=31;break;case 4:ri-;if(ri=0) ri=30;break;case 5:ri-;if(ri=0) ri=31;break;case 6:ri-;if(ri=0) ri=30;break;case 7:ri-;if(ri=0) ri=31;break;case 8:ri-;if(ri=0
16、) ri=31;break;case 9:ri-;if(ri=0) ri=30;break;case 10:ri-;if(ri=0) ri=31;break;case 11:ri-;if(ri=0) ri=30;break;case 12:ri-;if(ri=0) ri=31;break;else if(leap&&yue=2)ri-;if(ri=0)ri=29;else if(yue=2&&leap=0)(ri-;if(ri=0)ri=28;elseswitch(yue)(case 1:ri-;if(ri=0) ri=31;break;case 3:ri-;i
17、f(ri=0) ri=31;break;case 4:ri-;if(ri=0) ri=30;break;case 5:ri-;if(ri=0) ri=31;break;case 6:ri-;if(ri=0) ri=30;break;case 7:ri-;if(ri=0) ri=31;break;case 8:ri-;if(ri=0) ri=31;break;case 9:ri-;if(ri=0) ri=30;break;case10:ri-;if(ri=0)ri=31;break;case11:ri-;if(ri=0)ri=30;break;case12:ri-;if(ri=0)ri=31;b
18、reak;write_nyr(8,ri);write_com(0x80+0x08);write_ds(7,ri);if(numfun=6)(yue-;if(yue=-1)yue=12;write_nyr(5,yue);write_com(0x80+0x05);write_ds(8,yue);if(numfun=7)(nian-;if(nian=-1)nian=99;leap=nian%4=0&&nian%100!=0;write_nyr(2,nian);write_com(0x80+2); write_ds(9,nian);void set_alarm() uchar ashi
19、,afen,amiao;if(timeclk=0)/ 判断是否按下闹钟设定键delay (5);/延时消抖if(timeclk=0)while(!timeclk);anumfun+;/按键次数加1 if(anumfun=1)flag=1;write_com(0x80+0x40+0x0a);write_com(0x0f);if(anumfun=2)flag=1;write_com(0x80+0x40+0x07);write_com(0x0f);if(anumfun=3)flag=1;write_com(0x80+0x40+0x04);write_com(0x0f);if(anumfun=4)fl
20、ag=0;anumfun=0;if(anumfun!=0)if(timeadd=0)/如果加功能键按下(delay(5);while(!timeadd);if(anumfun=1) / 设定秒(amiao+;if(amiao=60)amiao=0;write_sfm(9,amiao);write_com(0x80+0x40+9);write_ds(1,amiao);if(anumfun=2)(afen+;if(afen=60)afen=0;write_sfm(6,afen);write_com(0x80+0x40+6);write_ds(3,afen);if(anumfun=3)(ashi+;
21、if(ashi=24)ashi=0;write_sfm(3,ashi);write_com(0x80+0x40+3);write_ds(5,ashi);if(anumfun!=0)(if(timesub=0)(delay(5);while(!timesub);if(anumfun=1)(amiao-;if(amiao=-1)amiao=59;write_sfm(9,amiao);write_com(0x80+0x40+9);write_ds(1,amiao);if(anumfun=2)afen-;if(afen=-1)afen=59;write_sfm(6,afen);write_com(0x
22、80+0x40+6);write_ds(3,afen);if(anumfun=3)ashi-;if(ashi=-1)ashi=23;write_sfm(3,ashi);write_com(0x80+0x40+3);write_ds(5,ashi);void init() EA=1;/开总中断EX0=1;/开外部中断0IT0=1;/设定触发方式为负跳变沿有效lcden=0;/ 选通液晶显示屏ledrw=0;/设定液晶显示屏的读写方式为读write_com(0x38);/设置液晶显示模式为16*2显示,5*7点阵,8位数据接口write_com(0x0c);/ 翻开显示,并使光标不显示也不闪烁write_com(0x06);/ 光标指针每次自动加 1write_co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年跨境支付服务出海项目投资计划书
- 2026年医疗数据安全计算平台项目营销方案
- 2026湖北事业单位联考荆门市掇刀区招聘20人备考题库带答案详解(预热题)
- 2026河南中原再担保集团科技融资担保有限公司招聘4人备考题库及答案详解(真题汇编)
- 2026江西九江瑞昌市国投建设工程集团有限公司招聘变更2人备考题库及答案详解(有一套)
- 2026浙江宁波报业传媒集团有限公司招聘2人备考题库含答案详解(巩固)
- 2026江西事业单位联考宜春市招聘343人备考题库附答案详解(完整版)
- 2026湖北武汉理工大学心理健康教育专职教师招聘2人备考题库带答案详解(培优b卷)
- 2026湖北事业单位联考黄冈市红安县招聘45人备考题库附答案详解(培优)
- 2026年宠物洗脚杯项目可行性研究报告
- 企业英文培训课件
- 土方回填安全文明施工管理措施方案
- 危废处置项目竣工验收规范
- 北京市东城区2025-2026学年高三上学期期末考试地理试卷
- 中国昭通中药材国际中心项目可行性研究报告
- 幽门螺杆菌对甲硝唑耐药的分子机制
- 2025年安徽历年单招试题及答案
- 专家咨询委员会建立方案
- 2025高考新高考II卷英语口语真题试卷+解析及答案
- 孤残儿童护理员中级
- 国家中医药管理局《中医药事业发展“十五五”规划》全文
评论
0/150
提交评论