单片机课程设计电子万年历Word文档下载推荐.docx
- 文档编号:19485756
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:14
- 大小:19.77KB
单片机课程设计电子万年历Word文档下载推荐.docx
《单片机课程设计电子万年历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子万年历Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
⑴10μF1个(用于系统复位电路)。
⑵30pF2个(用于系统振荡电路)。
(11)其它:
⑴万能电路板(10×
15):
1块
⑵焊锡条:
2米
⑶带插头、座的电源端子:
1条
⑷各种颜色外皮的导线:
各1米
(12)工具:
1.电烙铁:
1把
2.剪钳:
3.镊子:
4.万用表:
1个
(13)设备:
编程器(MEP300或TOP851)6个
4、软件方案:
只使用第一组工作寄存器,功能分布如下:
⑴“时钟”基准时间由单片机内部定时中断来提供,定时时间应该乘以一个整数得到“秒”,且不宜太长或太短,最长不能超过16位定时器的最长定时时间,最短不能少于定时中断服务程序的执行时间。
一般来说,基准时间越短,越有利于提高时钟运行的精确度。
本实验定时5mS。
乘以一个整数200得到“1秒”.
⑵用一个计数器(R4)对定时中断的次数进行计数,从而可以实现“秒”定时,同理可以实现“分”定时和“时”定时,甚至于“日”、“月”、“年”定时。
⑶显示器采用动态驱动时要注意到:
LED的“启辉时间”和“余辉时间”。
驱动信号的维持时间必须大于启辉时间;
而驱动信号的间歇时间必须小于余辉时间。
“启辉时间”和“余辉时间”与驱动电流的大小有关,驱动电流越大,启辉时间越短,而余辉时间越长。
但是,驱动电流的大小受到驱动电路的驱动能力和LED极限功耗的限制。
本实验采用了74ls244和晶体管8550驱动,并进行适当的延时3ms解决上述问题。
⑷LED的余辉时间使动态驱动显示得到保证,但也要注意到它在更新显示内容时,可能造成显示字符的混乱模糊。
为此,在把“更新显示内容”写入显示器之前,必须把所有的LED熄灭,即要把一个“熄灭驱动信号”先写入显示器。
⑸对于按键的处理,采用中断。
产生中断后先判有无按键被按下,还要考虑到“去抖动影响”问题,可采用软件延迟法解决这个问题,延迟时间至少10mS。
而单纯进行软件延时的话会令到显示管产生断续的情况,故调用显示程序作为延时时间。
这样就合理地处理好这两者的矛盾了。
⑹把键盘的按键分两种情况来处理,操作简单。
①调整时间时,先按下KA键,(KA键为选择调整位置的键,如选调整秒或分),而此时的KB键只是用来加一操作。
在调整时间状态下,若在十秒内检测到没有任何按键按下,则返回正常显示时钟状态。
②而不调整时间,即不按下KA键,KB的键只用来切换显示日期和时钟。
⑺对于自动识别“月大、月小”和“平年、闰年”的问题,主要考虑:
①月大、月小:
1~7月:
逢单月为31天;
逢双月为30天,其中2月另行处理。
8~12月:
逢单月为30天;
逢双月为31天。
②平年、闰年:
仅仅处理2月份的天数:
平年的2月份天数为28天,闰年的2月份天数为29天。
5、程序流程图如下:
(1)电子时钟计算程序图
(2)调整流程图
程序编写如下:
;
/////////////////////////////////////////////////////////
ORG0000H
LJMPSTART
ORG0003H
LJMPPROINT0;
int0用来切换时钟调整位置
ORG0013H;
用来调整时间,只加不减
LJMPPROINT1
ORG001BH;
5ms的延迟,计数200次则为1秒
LJMPPROTIME
ORG0030H;
主程序
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;
0123456789
ORG0050H
START:
MOVTCON,#05H;
中断初始化
MOVIE,#8DH
MOVTMOD,#10H
MOVTH1,#0eCH;
定时器初始化
MOVTL1,#78H
MOV31H,#0AH;
10秒
MOV32H,#1EH;
30分
MOV33H,#09H;
9点
MOV34H,#0AH;
10号
MOV35H,#06H;
6月
MOV36H,#05H;
2005年
MOV37H,#14H
R7存放切换标志0NORMAL,1HOUR,2MINUTE,3SECOND,4YEAR,5MONTH,6DAY
MOVR1,#00H;
确定在调时不按键的最长时间,10秒后返回normal状态
MOVR7,#00H;
切换标志
MOV40H,#00H;
十六进制转换BCD的高位
MOV41H,#00H;
十六进制转换BCD的低位
MOVR6,#00H;
调时的位闪烁的时间间隔
MOVR4,#00H;
用来计数5ms的中断次数,200次则一秒
movr3,#00h
SETBTR1;
开始计时
AGAIN:
ACALLPROSHOW;
显示
AJMPAGAIN
PROSHOW:
CJNER3,#00H,SHOWDATE;
如果r3等于1就显示日期,等于0就显示时钟
CJNER7,#04H,DATE1;
显示程序
AJMPSHOWDATE;
showdate显示年月日
DATE1:
CJNER7,#05H,DATE2
AJMPSHOWDATE
DATE2:
CJNER7,#06H,SHOWCLOCK
AJMPSHOWDATE
showCLOCK:
MOVR0,33H;
showclock显示时分秒,先显示时
ACALLPROHTOD
CJNER7,#01H,CLK1
INCR6
CJNER6,#03H,CLK2;
若处于调时状态,则该位闪烁
MOVR6,#00H
CLK1:
clrP2.4
mova,41H
MOVP0,a;
显示时的低位
ACALLDELAY3MS
CLK2:
SETBP2.4
CLRP2.5
mova,40H
MOVP0,a;
显示时的高位
SETBP2.5
MOVR0,32H;
显示分
ACALLPROHTOD
CJNER7,#02H,CLK3
CJNER6,#03H,CLK4;
MOVR6,#00H
CLK3:
CLRP2.2
MOVP0,a;
显示分的低位
CLK4:
SETBP2.2
CLRP2.3
mova,40h
显示分的高位
SETBP2.3
MOVR0,31H;
显示秒
CJNER7,#03H,CLK5
CJNER6,#03H,CLK6;
CLK5:
CLRP2.0
显示秒的低位
CLK6:
SETBP2.0
CLRP2.1
显示秒的高位
SETBP2.1
RET
SHOWDATE:
MOVR0,36H;
显示年
CJNER7,#04H,DAY1
CJNER6,#03H,DAY2;
DAY1:
CLRP2.4
MOVP0,41H;
显示年的低位
DAY2:
MOVP0,40H;
显示年的高位
MOVR0,35H;
显示月
CJNER7,#05H,MONTH1
CJNER6,#03H,MONTH2;
MONTH1:
显示月的低位
MONTH2:
显示月的高位
MOVR0,34H;
显示日
CJNER7,#06H,YEAR1
CJNER6,#03H,YEAR2;
YEAR1:
CLRP2.0
MOVP0,41H
YEAR2:
MOVP0,40H
PROHTOD:
PUSHACC;
十六进制数转换成bcd码,且可以直接输出p0口
MOVA,R0
MOVB,#0AH
DIVAB
MOVDPTR,#0030H
MOVCA,@A+DPTR
MOV40H,A
MOVA,B
MOV41H,A
POPACC
DELAY3MS:
;
DELAY3MS
MOV45H,#08H
DELAY1:
MOV46H,#0FFH
DELAY2:
DJNZ46H,DELAY2
DJNZ45H,DELAY1
PROINT0:
CLREX0;
切换键中断程序
MOVR3,#00H
ACALLPROSHOW
MOVC,P3.2
JCIEXIT0
MOVR1,#00H
INCR7
CJNER7,#07H,IEXIT0
MOVR7,#00H
INT01:
JCINT02
AJMPINT01
INT02:
ACALLPROSHOW
IEXIT0:
SETBEX0
RETI
PROINT1:
CLREX1
MOVC,P3.3
JCIEXIT1
LCALLISYEAR;
判断平年闰年
LCALLISMONTH;
判断月份,确定最大日数
CJNER7,#00H,NEXT1;
若不是调时状态,按此键就是切换显示日期、时钟
INCR3
CJNER3,#02H,IEXIT1
AJMPIEXIT1
NEXT1:
CJNER7,#03H,NEXT2;
修改秒位
INC31H
MOVA,31H
CJNEA,#3CH,INT11;
遇60变0
MOV31H,#00H
NEXT2:
CJNER7,#02H,NEXT3;
修改分位
INC32H
NEXT3:
CJNER7,#01H,NEXT4;
修改时位
INC33H
MOVA,33H
CJNEA,#18H,INT11;
遇24变0
MOV33H,#00H
NEXT4:
CJNER7,#06H,NEXT5;
修改日
INC34H
MOVA,34H
CJNEA,49H,INT11;
到月底就返回月初
MOV34H,#01H
NEXT5:
CJNER7,#05H,NEXT6;
修改月
INC35H
MOVA,35H
CJNEA,#0DH,INT11;
十二月过后就跳回1月
MOV35H,#01H
NEXT6:
CJNER7,#04H,INT11;
修改年
INC36H
MOVA,36H
CJNEA,#64H,INT11
MOV36H,#00H
INT11:
JCINT12
AJMPINT11
INT12:
IEXIT1:
setbEX1
PROTIME:
MOVTH1,#3CH;
MOVTL1,#60H
setbtr1
INCR4
CJNER4,#0c8H,EXIT
计满1秒则清零
CJNER7,#00H,DIAOSHI
AJMPNORMAL
DIAOSHI:
INCR1;
调时不按键的最长时间为10秒,在此期间又键按下重新计时
CJNER1,#0AH,EXIT
到10秒则返回正常显示状态
AJMPEXIT
NORMAL:
ACALLISYEAR;
判断平闰年,返回标志48h,0为平年,1为闰年
ACALLISMONTH;
判断哪个月,返回该月的最大日数,存放在49h
INC31H
MOVA,31H;
秒加一
CJNEA,#3CH,EXIT
MOV31H,#00H
INC32H;
分加一
MOVA,32H
MOV32H,#00H
INC33H;
时加一
CJNEA,#18H,EXIT
INC34H;
日加一
CJNEA,49H,EXIT
INC35H;
月加一
CJNEA,#0DH,EXIT
INC36H;
年加一
CJNEA,#64H,EXIT
EXIT:
ISYEAR:
MOVA,36H;
判断平闰年
MOVB,#04H
CJNEA,#00H,EXITYEAR1
MOV48H,#01H;
闰年
SJMPEXITYEAR
EXITYEAR1:
MOV48H,#00H;
平年
EXITYEAR:
ISMONTH:
MOVA,35H;
开始检查月份
CJNEA,#02H,NEXTMON1;
判断二月
MOVR2,48H
CJNER2,#00H,RUNNIAN
MOV49H,#1DH;
平年为28天,赋29给49h
AJMPEXITMONTH
RUNNIAN:
MOV49H,#1EH;
闰年为29天,赋30天给49h
AJMPEXITMONTH
NEXTMON1:
CJNEA,#04H,NEXTMON2
AJMPXIAOYUE
NEXTMON2:
CJNEA,#06H,NEXTMON3
AJMPXIAOYUE
NEXTMON3:
CJNEA,#09H,NEXTMON4
AJMPXIAOYUE
NEXTMON4:
CJNEA,#0BH,DAYUE
XIAOYUE:
MOV49H,#1FH;
四,六,九,十一月是小月,30天,但应该赋31天给比较值49h,
DAYUE:
MOV49H,#20H;
其他月份为大月,31天,赋32天给49h
EXITMONTH:
RETI
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 电子 万年历