单片机教学打铃控制器程序设计课程设计.docx
- 文档编号:7910504
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:33
- 大小:21.71KB
单片机教学打铃控制器程序设计课程设计.docx
《单片机教学打铃控制器程序设计课程设计.docx》由会员分享,可在线阅读,更多相关《单片机教学打铃控制器程序设计课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
单片机教学打铃控制器程序设计课程设计
教师学科教案
[20–20学年度第__学期]
任教学科:
_____________
任教年级:
_____________
任教老师:
_____________
xx市实验学校
单片机教学打铃控制器程序设计-课程设计
单片机教学打铃控制器程序设计
一、课程设计题:
单片机教学打铃控制器程序设计
二、设计要求:
用LED数码管显示时、分、秒时间,尽量减少时间积累误差,具有秒闪功能。
最多能设置40个打铃时间点,打铃时间点数据用非易失存储器存储,防止掉电丢失数据;能逐个检查、修改、删除已设置的打铃时间点和增加打铃时间点。
对时、打铃时间点用键盘设置,键盘设计简单、易于操作。
具有强电驱动功能,便于控制220V的电铃。
三、设计报告要求:
说明设计作品的功能、特点、应用范围;
方案对比,确定方案。
电路工作原理、操作方法;
编程方法、程序框图及关键程序清单。
课程设计总结。
附件:
参考电路图
24C02芯片资料及参考程序
课程设计元器件清单
元器件名
规格/型号
单板数量
购买数量
备注
电阻
510Ω、1/4W
2
10K、1/4W
2
1K、1/4W
1
电阻排
510Ω*8
1
瓷片电容
30pF
2
独石电容
0.1µF
4
电解电容
220µF/16V
1
二极管
1N4007
1
发光二极管
Ф3MM、红光
4
三极管
9013
1
晶体
12MHz(矮封装)
1
集成块
7805
1
AT89S52
1
24C02
1
7407
1
IC插座
40PIN
1
8PIN
1
14PIN
1
数码管
2位动态、红光、共阴极(FJ5202AH)
3
继电器
5V、AC220V/5A(HRS4H-S-DC5V)
1
接插件
IDC10
1套
按键
国产欧姆龙轻触按键,带透明帽
8套
--------------------------------------------------------------------------------
程序:
;**************教学打铃控制器程序*********
;CPU:
AT89S52,Fosc=12MHz
;++++++++++++++++++变量定义+++++++++++++++
SET_TIMEBITP1.0;时间设定
SET_ALARMBITP1.1;打铃设定
LEFTBITP1.2;左移位
UPBITP1.3;上翻/加1
DOWNBITP1.4;下翻/减1
RIGHTBITP1.5;右移位
ESCBITP1.6;取消/退出
ENTERBITP1.7;确认
KEY_BUFEQU30H;原按键状态
KEY_STEQU31H;键闭合标志,ON:
0FFH,OFF:
00H
SCLBITP3.3;IIC时钟线
SDABITP3.2;IIC数据线
FLASH_SBITP3.1;秒闪
CONTRELBITP3.4;控制;1=ON
H_MEMEQU10H;时
M_MEMEQU11H;分
S_MEMEQU12H;秒
CT_50MSEQU13H;50mS计数器
NEW_TIMEEQU14H;时间更新标志,0FFH更新
DIS_MEM1EQU15H;显示数据存储器1
DIS_MEM2EQU16H;显示数据存储器2
DIS_MEM3EQU17H;显示数据存储器3
DIS_BUF1EQU20H;显示缓冲器1(段码,左)
DIS_BUF2EQU21H;显示缓冲器2(段码)
DIS_BUF3EQU22H;显示缓冲器3(段码)
DIS_BUF4EQU23H;显示缓冲器4(段码)
DIS_BUF5EQU24H;显示缓冲器5(段码)
DIS_BUF6EQU25H;显示缓冲器6(段码,右)
AL_NUMBEREQU26H;打铃序号
AL_TOTAEQU27H;打铃点总数
ALARM_STEQU28H;打铃状态,0FFH正在打铃
TIME_OVEREQU29H;按键返回时间计数器
TOTA_ADDREQU60H;打铃点总数在24C02中的存储地址
ORG0000H
AJMPSTART
ORG0002BH
AJMPINT_T0;T2中断向量
ORG0030H
START:
MOVSP,#60H
CLRCONTREL
CLRFLASH_S
MOVH_MEM,#12
MOVM_MEM,#0
MOVS_MEM,#0
MOVCT_50MS,#20
MOVNEW_TIME,#0
MOVKEY_ST,#0
MOVR4,#TOTA_ADDR;从24C02读打铃时间点总数
MOVR0,#AL_TOTA
MOVR3,#1
ACALLRD_EEROM
MOVA,AL_TOTA;总数大于0,小于、等于40判断
JZJMP_RD
CLRC
SUBBA,#40
JCRD_AL_LIST
MOVAL_TOTA,#0
MOVR4,#TOTA_ADDR
MOVR3,#1
MOVR0,#AL_TOTA
ACALLWR_EEROM
SJMPJMP_RD
RD_AL_LIST:
MOVA,AL_TOTA;从24C02读打铃时间表
RLA
MOVR3,A
;R0:
RAM地址指针,R2:
8位移位计数器
;R3:
数据字节计数器
;R4:
24C02存储地址
MOVR0,#80H
MOVR4,#00H
ACALLRD_EEROM
JMP_RD:
MOVTH2,#3CH;T2工作方式、时间常数
MOVTL2,#0ABH
MOVRCAP2H,#3CH
MOVRCAP2L,#0ABH
MOVT2CON,#04H
SETBET2;开中断
SETBEA
WAITE:
ACALLDISPLAY
ACALLKEY_CHECK
MOVA,KEY_ST
CJNEA,#00H,KEY_MAIN
MOVA,NEW_TIME
CJNEA,#0FFH,WAITE
MOVNEW_TIME,#0
NEW_DIS:
MOVA,H_MEM
ACALLHBCD
MOVDIS_MEM1,A
MOVA,M_MEM
ACALLHBCD
MOVDIS_MEM2,A
MOVA,S_MEM
ACALLHBCD
MOVDIS_MEM3,A
ACALLDIS_TIME
MOVA,ALARM_ST
JNZCHEK_OFF
MOVA,S_MEM
JNZWAITE
ACALLCHEK_AL;打铃检测
CHEK_OFF:
MOVA,S_MEM
CLRC
SUBBA,#20
JCWAITE
CLRCONTREL
MOVALARM_ST,#0
SJMPWAITE
;SJMP$
;********打铃控制子程序***************
CHEK_AL:
MOVA,AL_TOTA
JZCHEK_END
MOVR0,#80H
MOVR6,AL_TOTA
CHK_LOOP:
MOVA,@R0
CJNEA,H_MEM,NEXT_AL_1
INCR0
MOVA,@R0
CJNEA,M_MEM,NEXT_AL_2
SETBCONTREL
MOVALARM_ST,#0FFH
SJMPCHEK_END
NEXT_AL_1:
INCR0
NEXT_AL_2:
INCR0
DJNZR6,CHK_LOOP
CLRCONTREL
MOVALARM_ST,#0
CHEK_END:
RET
;********键盘处理程序段***************
KEY_MAIN:
MOVKEY_ST,#0
JNBSET_TIME,TIME_SET
JNBSET_ALARM,JMP_SET_A
SJMPNEW_DIS
JMP_SET_A:
AJMPALARM_SET
;========时间设置=====================
TIME_SET:
MOVTIME_OVER,#30
MOVR5,H_MEM
MOVR6,M_MEM
MOVR7,S_MEM
SET_H:
JNBFLASH_S,GATE_H
MOVDIS_MEM1,#0AAH
SJMPCLS_H
GATE_H:
MOVA,R5
ACALLHBCD
MOVDIS_MEM1,A
MOVA,R6
ACALLHBCD
MOVDIS_MEM2,A
MOVA,R7
ACALLHBCD
MOVDIS_MEM3,A
CLS_H:
ACALLDIS_TIME
ACALLDISPLAY
MOVA,NEW_TIME
CJNEA,#0FFH,JMP_1
MOVNEW_TIME,#0
DJNZTIME_OVER,JMP_1
AJMPWAITE
JMP_1:
ACALLKEY_CHECK
MOVA,KEY_ST
CJNEA,#0FFH,SET_H
MOVKEY_ST,#0
MOVTIME_OVER,#30
JNBUP,H_UP
JNBDOWN,H_DOWN
JNBLEFT,JMP_SET_S
JNBRIGHT,SET_M
JNBESC,JMP_ESC
JNBENTER,JMP_OK
SJMPSET_H
JMP_ESC:
AJMPTIME_SET_ESC
JMP_OK:
AJMPTIME_SET_OK
JMP_SET_S:
AJMPSET_S
H_UP:
CJNER5,#23,INC_H
MOVR5,#0FFH
INC_H:
INCR5
AJMPGATE_H
H_DOWN:
CJNER5,#0,DEC_H
MOVR5,#24
DEC_H:
DECR5
AJMPGATE_H
;===========分钟设置===============
SET_M:
JNBFLASH_S,GATE_M
MOVDIS_MEM2,#0AAH
SJMPCLS_M
GATE_M:
MOVA,R6
ACALLHBCD
MOVDIS_MEM2,A
MOVA,R5
ACALLHBCD
MOVDIS_MEM1,A
MOVA,R7
ACALLHBCD
MOVDIS_MEM3,A
CLS_M:
ACALLDIS_TIME
ACALLDISPLAY
MOVA,NEW_TIME
CJNEA,#0FFH,JMP_2
MOVNEW_TIME,#0
DJNZTIME_OVER,JMP_2
AJMPWAITE
JMP_2:
ACALLKEY_CHECK
MOVA,KEY_ST
CJNEA,#0FFH,SET_M
MOVKEY_ST,#0
MOVTIME_OVER,#30
JNBUP,M_UP
JNBDOWN,M_DOWN
JNBLEFT,JMP_SET_H
JNBRIGHT,SET_S
JNBESC,TIME_SET_ESC
JNBENTER,TIME_SET_OK
SJMPSET_M
M_UP:
CJNER6,#59,INC_M
MOVR6,#0FFH
INC_M:
INCR6
AJMPGATE_M
M_DOWN:
CJNER6,#0,DEC_M
MOVR6,#60
DEC_M:
DECR6
AJMPGATE_M
JMP_SET_H:
AJMPSET_H
;============秒设置=================
SET_S:
JNBFLASH_S,GATE_S
MOVDIS_MEM3,#0AAH
SJMPCLS_S
GATE_S:
MOVA,R7
ACALLHBCD
MOVDIS_MEM3,A
MOVA,R5
ACALLHBCD
MOVDIS_MEM1,A
MOVA,R6
ACALLHBCD
MOVDIS_MEM2,A
CLS_S:
ACALLDIS_TIME
ACALLDISPLAY
MOVA,NEW_TIME
CJNEA,#0FFH,JMP_3
MOVNEW_TIME,#0
DJNZTIME_OVER,JMP_3
AJMPWAITE
JMP_3:
ACALLKEY_CHECK
MOVA,KEY_ST
CJNEA,#0FFH,SET_S
MOVKEY_ST,#0
MOVTIME_OVER,#30
JNBUP,S_UP
JNBDOWN,S_DOWN
JNBLEFT,JMP_SET_S_M
JNBRIGHT,JMP_S_H
JNBESC,TIME_SET_ESC
JNBENTER,TIME_SET_OK
SJMPSET_S
JMP_S_H:
AJMPSET_H
S_UP:
CJNER7,#59,INC_S
MOVR7,#0FFH
INC_S:
INCR7
AJMPGATE_S
S_DOWN:
CJNER7,#0,DEC_S
MOVR7,#60
DEC_S:
DECR7
AJMPGATE_S
JMP_SET_S_M:
AJMPSET_M
;======================================
TIME_SET_ESC:
AJMPNEW_DIS;时间设置取消/返回
TIME_SET_OK:
MOVS_MEM,R7;时间设置确认/返回
MOVM_MEM,R6
MOVH_MEM,R5
AJMPNEW_DIS
;=========打铃设置程序段===============
ALARM_SET:
MOVTIME_OVER,#20
MOVAL_NUMBER,AL_TOTA
AL_LIST:
MOVA,AL_NUMBER
JNZNUMBER_N
MOVDIS_MEM1,#0
MOVDIS_MEM2,#0AAH
MOVDIS_MEM3,#0AAH
ACALLDIS_TIME
AJMPWAITE_A
NUMBER_N:
DECA
RLA
ADDA,#80H
MOVR0,A
MOVA,AL_NUMBER
ACALLHBCD
MOVDIS_MEM1,A
MOVA,@R0
ACALLHBCD
MOVDIS_MEM2,A
INCR0
MOVA,@R0
ACALLHBCD
MOVDIS_MEM3,A
ACALLDIS_TIME
WAITE_A:
ACALLDISPLAY
MOVA,NEW_TIME
CJNEA,#0FFH,JMP_4
MOVNEW_TIME,#0
DJNZTIME_OVER,JMP_4
AJMPWAITE
JMP_4:
ACALLKEY_CHECK
MOVA,KEY_ST
CJNEA,#0FFH,WAITE_A
MOVKEY_ST,#0
MOVTIME_OVER,#20
JNBUP,NUM_UP
JNBDOWN,NUM_DOWN
JNBESC,JMP_ESC_AL
JNBENTER,JMP_OK_AL
JNBSET_ALARM,JMP_DEL_AL
JNBSET_TIME,CHANGE_AL
SJMPWAITE_A
JMP_DEL_AL:
AJMPDEL_AL
;-------------------------------------
NUM_UP:
MOVA,AL_NUMBER
CJNEA,AL_TOTA,INC_NUM
MOVAL_NUMBER,#0FFH
INC_NUM:
INCAL_NUMBER
AJMPAL_LIST
;-------------------------------------
NUM_DOWN:
MOVA,AL_NUMBER
CJNEA,#0,DEC_NUM
MOVAL_NUMBER,AL_TOTA
SJMPJ_DECNUM
DEC_NUM:
DECAL_NUMBER
J_DECNUM:
AJMPAL_LIST
;==========修改打铃时间点=================
CHANGE_AL:
MOVA,AL_NUMBER
JZJMP_ADD_AL
DECA
RLA
ADDA,#80H
MOVR0,A
MOVA,@R0
MOVR6,A
INCR0
MOVA,@R0
MOVR7,A
;------------时修改------------------
SET_AL_H:
JNBFLASH_S,GATE_AL_H
MOVDIS_MEM2,#0AAH
SJMPCLS_AL_H
GATE_AL_H:
MOVA,AL_NUMBER
ACALLHBCD
MOVDIS_MEM1,A
MOVA,R6
ACALLHBCD
MOVDIS_MEM2,A
CLS_AL_H:
MOVA,R7
ACALLHBCD
MOVDIS_MEM3,A
ACALLDIS_TIME
ACALLDISPLAY
MOVA,NEW_TIME
CJNEA,#0FFH,JMP_5
MOVNEW_TIME,#0
DJNZTIME_OVER,JMP_5
AJMPWAITE
JMP_5:
ACALLKEY_CHECK
MOVA,KEY_ST
CJNEA,#0FFH,SET_AL_H
MOVKEY_ST,#0
MOVTIME_OVER,#20
JNBUP,AL_H_UP
JNBDOWN,AL_H_DOWN
JNBLEFT,SET_AL_M
JNBRIGHT,SET_AL_M
JNBESC,JMP_AL_LIST
JNBENTER,JMP_SET_AL_OK
SJMPSET_AL_H
JMP_ESC_AL:
AJMPESC_AL
JMP_OK_AL:
AJMPOK_AL
JMP_ADD_AL:
AJMPADD_AL
JMP_SET_AL_OK:
AJMPSET_AL_OK
JMP_AL_LIST:
AJMPAL_LIST
AL_H_UP:
CJNER6,#23,INC_H_AL
MOVR6,#0FFH
INC_H_AL:
INCR6
AJMPGATE_AL_H
AL_H_DOWN:
CJNER6,#0,DEC_H_AL
MOVR6,#24
DEC_H_AL:
DECR6
AJMPGATE_AL_H
;----------分修改----------------
SET_AL_M:
JNBFLASH_S,GATE_AL_M
MOVDIS_MEM3,#0AAH
SJMPCLS_AL_M
GATE_AL_M:
MOVA,AL_NUMBER
ACALLHBCD
MOVDIS_MEM1,A
MOVA,R7
ACALLHBCD
MOVDIS_MEM3,A
CLS_AL_M:
MOVA,R6
ACALLHBCD
MOVDIS_MEM2,A
ACALLDIS_TIME
ACALLDISPLAY
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 教学 打铃 控制器 程序设计 课程设计