2022年基于单片机内部定时计数器的数字钟方案设计书.docx

上传人:C****o 文档编号:12906843 上传时间:2022-04-26 格式:DOCX 页数:13 大小:63.95KB
返回 下载 相关 举报
2022年基于单片机内部定时计数器的数字钟方案设计书.docx_第1页
第1页 / 共13页
2022年基于单片机内部定时计数器的数字钟方案设计书.docx_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《2022年基于单片机内部定时计数器的数字钟方案设计书.docx》由会员分享,可在线阅读,更多相关《2022年基于单片机内部定时计数器的数字钟方案设计书.docx(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品学习资源方跃春 副教授 高校城栏目:世界高校城居民新闻空间栏目:方法库共 207 篇论文 | 附件【 数字钟调整日期、时间程序流程图保藏到我的学习空间保藏到我的课堂魔方.swf1.swfclock_2.c 】方跃春 副教授 发表于 2021-5-26 1:54:23 阅读( 565) 评论( 3)流程图链接!/* 基于单片机内部定时计数器的数字钟设计1、用单片机内部定时计数器T0 进行计时;2、用 LCD1062 液晶器显示日期、时间;3、具有闰年自动运算功能;4、具有依据年、月、日运算星期功能;5、具有时间、日期调整功能; Design: 长沙民政职业技术学院,方跃春*/ #includ

2、e#define uchar unsigned char / 宏定义#define uint unsigned int / 宏定义sbit rs=P35 ; / 液晶数据 /指令挑选端: 1-数据 ,0-指令sbit lcden=P34 ; / 液晶使能掌握端 :1-有效 ,0- 无效sbit shift_key=P32 ;/位置移动键sbit up_key=P33 ;/增加键uchar temp=0 ;/定义定时器溢出计数变量,每隔50ms 产生 1 次溢出, temp 加 1 uint year=2021 ;/定义年变量并赋初值2021 年uchar month=05,day=23,wee

3、k ;/定义月、日、星期变量,并赋初值5 月 23 日uchar hour=0,minute=00,second=00 ;/定义时、分、秒变量,并赋初值12 时 00 分 00 秒uchar code week_string74=MON,TUE,WED,THU,FRI,SAT,SUN;/ 定义星期英文缩写表uchar data month_day12=31,0,31,30,31,30,31,31,30,31,30,31;/定义每月天数表/*- 定时计数器 T0 及中断初始化函数-*/ void initvoidTMOD=0x01 ;/设置定时器 0 为工作方式 1TH0=65536-50000

4、/256 ;/16 位计数初值除以 256 得到高 8 位初值TL0=65536-50000%256 ;/16 位计数初值除以 256 的余数得到低8 位初值欢迎下载精品学习资源EA=1 ;/ 开总中断ET0=1 ;/开启定时器 0 中断EX0=1 ;/ 开启外部中断 ,外部中断用于调整时间PT0=1 ;/将定时器 0 中断设置高优先级,调整时间期不停止计时TR0=1 ;/启动定时器 0/*-1ms延时函数*/void delayuint nuint i,j ;fori=n ;i0 ; i- forj=114 ;j0 ;j- ;/*-LCD1602写指令函数*/void LCD1602_wri

5、te_comuchar comrs=0; /rs=0,置指令输入状态P0=com;/输出指令码delay1 ;/ 延时 1mslcden=1 ;/lcden=1, 使能端有效delay1 ;/ 延时 1mslcden=0 ;/lcden=0, 使能端无效/*-LCD1602写数据函数*/void LCD1602_write_datuchar datrs=1; /rs=1,置数据输入状态P0=dat; / 输出待显示字符的字符码ASCII 码)delay1 ;/ 延时 1mslcden=1 ;/lcden=1, 使能端有效delay1 ;/ 延时 1mslcden=0 ;/lcden=0, 使能

6、端无效/*公历平年的 2 月只有 28 天,公历闰年的 2 月有 29 天;判定公历闰年的算法:、一般年能被 4 整除且不能被 100 整除的为闰年;如: 2021 年不是闰年 ,2021 年是闰年 .2100 年也不是闰年;、世纪年能被 400 整除的是闰年;如: 2000 年是闰年, 1900 年不是闰年;*/void leapyear / 判定某年是否闰年函数欢迎下载精品学习资源if year%400=0 | year%100.=0 & year%4=0 month_day1=29 ;/闰年 2 月 29 天elsemonth_day1=28 ;/平年 2 月 28 天/*由年、月、日运

7、算星期的算法(基姆拉尔森运算公式):W= d+2*m+3*m+1/5+y+y/4-y/100+y/400 mod 7公式中 d 表示日期中的日数, m 表示月份数, y 表示年数;留意:运算时要将一月和二月看成是上一年的十三月和十四月;例: 2021-1-10 需要换算成 2021-13-10 来代入公式运算;*/uchar CaculateWeekint y,char m, char d/ 由年、月、日运算星期函数uchar w;ifm=1m=13;y=y-1 ; else ifm=2m=14 ;y=y-1 ;w=d+2*m+3*m+1/5+y+y/4-y/100+y/400%7;retur

8、n w ;/* 定时计数器中断程序,每当定时计数器溢出时触发中断,执行该程序*/ void time0 interrupt 1TH0=65536-50000/256 ;/ 重装初值TL0=65536-50000%256 ;iftemp=19/ 为了加快仿真速度,将 temp 设为 1,实际应为 20temp=0;ifsecond=59/ 为了加快仿真速度,将 second 设为 2,实际应为 59second=0;ifminute=59/ 为了加快仿真速度 ,将 minute 设为 2,实际应为 59minute=0 ;ifhour=23/ 为了加快仿真速度,将 hour 设为 2,实际应为

9、23hour=0 ;leapyear ;/闰、平年运算ifday=month_daymonth-1/判定日期是否到了每月最终一天day=1 ;ifmonth=12month=1 ;欢迎下载精品学习资源year+ ;else month+ ;else day+;else hour+ ;else minute+ ;else second+;else temp+;week=CaculateWeekyear,month,day ;/依据年月日运算星期void int0 interrupt 0/ 外部中断函数,当按下setup键时产生外部中断进入调整状态bit flag ;uchar setup_bit

10、=0 ;/setup_bit 用于计数移位次数do/ 循环ifshift_key=0/判定移位键是否按下delay1 ;/ 延时消抖ifshift_key=0/ 确认移位键是否按下while.shift_key ;/ 等待移位键释放ifsetup_bit=10/ 共 10 位setup_bit=0 ; /移位计数值返回 0 LCD1602_write_com0x0c;/关闭光标显示goto rep ;/ 转移到中断程序终止处elsesetup_bit+ ;/移位计数值加 1 LCD1602_write_com0x0e;/打开光标显示switchsetup_bit/ 判定调整哪位 ,从而确定光标

11、显示位置case 1:欢迎下载精品学习资源LCD1602_write_com0x80+0x44+4;/光标设置到分个位显示位置break;case 2:LCD1602_write_com0x80+0x44+3;/光标设置到分十位显示位置break;case 3:LCD1602_write_com0x80+0x44+1;/光标设置到时个位显示位置break;case 4:LCD1602_write_com0x80+0x44+0;/光标设置到时十位显示位置break;case 5:LCD1602_write_com0x80+0x01+9;/光标设置到日个位显示位置break;case 6:LCD1

12、602_write_com0x80+0x01+8;/光标设置到日十位显示位置break;case 7:LCD1602_write_com0x80+0x01+6;/光标设置到月个位显示位置break;case 8:LCD1602_write_com0x80+0x01+5;/光标设置到月十位显示位置break;case 9:LCD1602_write_com0x80+0x01+3;/光标设置到年个位显示位置break;case 10:LCD1602_write_com0x80+0x01+2;/光标设置到年十位显示位置break;default:break;ifup_key=0/ 判定增加键是否按下

13、delay1 ;/ 延时消抖ifup_key=0/ 确认增加键是否按下while.up_key ;/等待增加键释放flag=1 ;/增加键已按动elseflag=0 ;/增加键未按动else欢迎下载精品学习资源flag=0 ;/增加键未按动ifflag/ 如增加键按动switchsetup_bit/ 判定是哪位 ,从而调整哪位case 1:ifminute%10=9/ 如分个位为 9 minute=minute-9 ;/ 就分个位清零elseminute+ ;/否就分个位加 1 LCD1602_write_dat0x30+minute%10;/写入 1602 break;case 2:ifmi

14、nute/10=5/ 如分十位为 5 minute=minute-50 ;/ 就分十位清零elseminute=minute+10 ;/ 否就分十位加1 LCD1602_write_dat0x30+minute/10;/ 写入 1602 break;case 3:ifhour%10=9 hour=hour-9 ;elsehour+ ;LCD1602_write_dat0x30+hour%10;/写入 1602 break;case 4:ifhour/10=2 hour=hour-20 ;elsehour=hour+10 ;LCD1602_write_dat0x30+hour/10;/ 写入 1

15、602 break;case 5:ifday%10=9 day=day-9 ;elseday+ ;LCD1602_write_dat0x30+day%10;/ 写入 1602 break;case 6:ifday/10=3 day=day-30 ;欢迎下载精品学习资源elseday=day+10 ;LCD1602_write_dat0x30+day/10;/ 写入 1602 break;case 7:ifmonth%10=9 month=month-9 ;elsemonth+ ;LCD1602_write_dat0x30+month%10;/写入 1602 break;case 8:ifmon

16、th/10=1 month=month-10 ;elsemonth=month+10 ;LCD1602_write_dat0x30+month/10;/写入 1602 break;case 9:ifyear%10=9 year=year-9;elseyear+ ;LCD1602_write_dat0x30+year%10;/ 写入 1602 break;case 10:ifyear%100/10=9 year=year-90;elseyear=year+10 ;LCD1602_write_dat0x30+year%100/10;/ 写入 1602break; default: break ;w

17、hilesetup_bit.=0 ;/如全部位未调整完就返回,否就退出调整模式rep:;/*-LCD1602初始化函数*/void LCD1602_initLCD1602_write_com0x38; / 设置液晶显示方式:16x2 行, 5x7 点阵, 8 位数据总线LCD1602_write_com0x0c; /设置字符显示开关及光标显示模式:开启字符显示,不显示欢迎下载精品学习资源光标LCD1602_write_com0x06; / 设置数据指针及显示屏移动模式:数据指针增即光标右移),显示屏不移LCD1602_write_com0x01; / 液晶屏幕清屏/*- 主函数*/void m

18、aininit ;/定时计数器T0 及中断初始化LCD1602_init ;/LCD1602 初始化while1uchar i;LCD1602_write_com0x80+0x01; /设置第 1 行显示首地址01 LCD1602_write_dat0x30+year/1000;/输出年千位的字符码LCD1602_write_dat0x30+year%1000/100;/输出年百位的字符码LCD1602_write_dat0x30+year%100/10;/输出年十位的字符码LCD1602_write_dat0x30+year%10;/ 输出年个位的字符码LCD1602_write_dat-

19、;/输出 -字符码LCD1602_write_dat0x30+month/10;/输出月十位的字符码LCD1602_write_dat0x30+month%10;/ 输出月个位的字符码LCD1602_write_dat- ;/输出 -字符码LCD1602_write_dat0x30+day/10;/ 输出日十位的字符码LCD1602_write_dat0x30+day%10;/输出日个位的字符码LCD1602_write_dat ;/输出 字符码for i=0 ;i3 ;i+LCD1602_write_datweek_stringweeki;/ 输出星期英文缩写字符码LCD1602_write

20、_dat ;/输出 字符码LCD1602_write_com0x80+0x40+0x04; / 设置第 2 行显示首地址04 LCD1602_write_dat0x30+hour/10;/ 输出小时十位的字符码LCD1602_write_dat0x30+hour%10;/ 输出小时个位的字符码LCD1602_write_dat: ;/输出 :字符码LCD1602_write_dat0x30+minute/10;/输出分十位的字符码LCD1602_write_dat0x30+minute%10;/ 输出分个位的字符码LCD1602_write_dat: ;/输出 :字符码LCD1602_write_dat0x30+second/10 ;/输出秒十位的字符码LCD1602_write_dat0x30+second%10;/ 输出秒个位的字符码网友评论欢迎下载精品学习资源评论内容最多输入2000 个字符提交欢迎下载精品学习资源李文 2021-6-1 20:44:14发表程序很具体,下来参考一下;刘俊落(新账号)2021-5-31 21:12:24发表我也把它静静偷走 孟洋 2021-5-30 17:27:25发表好东西,我下借用了1正在提交 ,请等待 .关于我们成长大事记工作机会合作通道联系我们版权声明版权全部 -世界高校城支持0 反对0支持0 反对0支持0 反对0欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁