单片机教学打铃控制器程序设计课程设计.docx

上传人:b****6 文档编号:7910504 上传时间:2023-01-27 格式:DOCX 页数:33 大小:21.71KB
下载 相关 举报
单片机教学打铃控制器程序设计课程设计.docx_第1页
第1页 / 共33页
单片机教学打铃控制器程序设计课程设计.docx_第2页
第2页 / 共33页
单片机教学打铃控制器程序设计课程设计.docx_第3页
第3页 / 共33页
单片机教学打铃控制器程序设计课程设计.docx_第4页
第4页 / 共33页
单片机教学打铃控制器程序设计课程设计.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

单片机教学打铃控制器程序设计课程设计.docx

《单片机教学打铃控制器程序设计课程设计.docx》由会员分享,可在线阅读,更多相关《单片机教学打铃控制器程序设计课程设计.docx(33页珍藏版)》请在冰豆网上搜索。

单片机教学打铃控制器程序设计课程设计.docx

单片机教学打铃控制器程序设计课程设计

 

教师学科教案

[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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

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

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