OK EQU 20H

RING EQU 22H

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP INT0SUB

ORG 000BH

AJMP T0INT

ORG 0013H

AJMP INT1SUB

ORG 001BH

AJMP T1INT

ORG 0040H

MAIN:MOV R1,#30;初设抢答时间为 30s

MOV R2,#60;初设答题时间为 60s

MOV TMOD,#11H;设置定时器工作于方式 1

MOV TH0,#0FH

MOV TL0,#0B1H;越高发声频率越高,越尖

MOV TH1,#3CH

MOV TL1,#0B0H;50ms为一次溢出中断

SETB EA

SETB ET0

SETB ET1

SETB EX0

SETB EX1;允许 4个中断, T0/T1/INT0/INT1

CLR OK

CLR RING

SETB TR1

SETB TR0;一开始就运行定时器,以开始显示 FFF ,若要重新计数,重置 TH1/TL1就 行

;=====查询程序 =======

START:MOV R5,#0BH

MOV R4,#0BH

MOV R3,#0BH

ACALL DISPLAY;未开始抢答时候显示 FFF

JB P3.0,NEXT

ACALL DELAY

JB P3.0,NEXT;去抖动,如果“开始”按下就向下执行,否则跳到非法抢答查询 ACALL BARK;按键发声

MOV A,R1

MOV R6,A;送 R1->R6,因为 R1中保存了抢答时间

SETB OK;抢答标志位,勇于 COUNT 程序中半段是否查询抢答

MOV R7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号

MOV R3,#0AH;抢答只显示计时,灭号数

AJMP COUNT;进入倒计时程序, “查询有效抢答的程序”在 COUNT 里面 NEXT:JNB P1.0,FALSE1

JNB P1.1,FALSE2

JNB P1.2,FALSE3

JNB P1.3,FALSE4

JNB P1.4,FALSE5

JNB P1.5,FALSE6

JNB P1.6,FALSE7

JNB P1.7,FALSE8

AJMP START

;====非法抢答处理程序 =====

FALSE1:MOV R3,#01H

AJMP ERROR

FALSE2:MOV R3,#02H

AJMP ERROR

FALSE3:MOV R3,#03H

AJMP ERROR

FALSE4:MOV R3,#04H

AJMP ERROR

FALSE5:MOV R3,#05H

AJMP ERROR

FALSE6:MOV R3,#06H

AJMP ERROR

FALSE7:MOV R3,#07H

AJMP ERROR

FALSE8:MOV R3,#08H

AJMP ERROR

;======INT0(抢答时间 R1调整程序) =====

INT0SUB:MOV A,R1

MOV B,#0AH

DIV AB

MOV R5,A

MOV R4,B

MOV R3,#0AH

ACALL DISPLAY;现在两个时间 LED 上显示 R1

JNB P3.4,INC0;P3.4为 +1S键,如按下跳到 INC0

JNB P3.5,DEC0;P3.5为 -1s 键,如按下跳到 DEC0

JNB P3.1,BACK0;P3.1为确定键,如按下跳到 BACK0

AJMP INT0SUB

INC0:MOV A,R1

CJNE A,#63H,ADD0;如果不是 99, R2加 1,如果加到 99, R1就置 0,重新加起

MOV R1,#00H

ACALL DELAY1

AJMP INT0SUB

ADD0:INC R1

ACALL DELAY1

AJMP INT0SUB

DEC0:MOV A,R1

JZ SETR1;如果 R1为 0, R1就置 99 DEC R1

ACALL DELAY1

AJMP INT0SUB

SETR1:MOV R1,#63H

ACALL DELAY1

AJMP INT0SUB

BACK0:RETI

;=====INT1(回答时间 R2调整程序) ===== INT1SUB:MOV A,R2

MOV B,#0AH

DIV AB

MOV R5,A

MOV R4,B

MOV R3,#0AH

ACALL DISPLAY

JNB P3.4,INC1

JNB P3.5,DEC1

JNB P3.1,BACK1

AJMP INT1SUB

INC1:MOV A,R2

CJNE A,#63H,ADD1

MOV R2,#00H

ACALL DELAY1

AJMP INT1SUB

ADD1:INC R2

ACALL DELAY1

AJMP INT1SUB

DEC1:MOV A,R2

JZ SETR2

DEC R2

ACALL DELAY1

AJMP INT1SUB

SETR2:MOV R2,#63H

ACALL DELAY1

AJMP INT1SUB

BACK1:RETI

;=====倒计时程序(抢答倒计时和回答倒计时都调到该程序) ======

REPEAT:MOV A,R2;使用锦囊时重新计时

MOV R6,A

CLR RING

COUNT:MOV R0,#00H;重置定时器中断次数

MOV TH1,#3CH

MOV TL1,#0B0H;重置定时器

RECOUNT:MOV A,R6;R6保存了倒计时间,之前应先将抢答或答题时间给 R6

MOV B,#0AH

DIV AB;除十分出个位 /十位

MOV 30H,A;十位存于 (30H)

MOV 31H,B;个位存于 (31H)

MOV R5,30H;取十位

MOV R4,31H;取个位

MOV A,R6

SUBB A,#07H

JNC LARGER;大于 5s 调到 LARGER, 小于等于 5s 会提醒

MOV A,R0

CJNE A,#0AH,FULL;1s中 0.5s 向下运行

CLR RING

AJMP CHECK

FULL:CJNE A,#14H,CHECK;下面是 1s 的情况,响并显示号数并请 R0,重新计数

SETB RING

MOV A,R6

JZ QUIT;计时完毕

MOV R0,#00H

DEC R6;一秒标志减 1

AJMP CHECK

LARGER:MOV A,R0

CJNE A,#14H,CHECK;如果 1s 向下运行,否则跳到查“停 /显示”

DEC R6;计时一秒 R6自动减 1

MOV R0,#00H

CHECK:JNB P3.1,QUIT;如按下停止键退出

JNB OK,CHECKK;只在回答倒计时才有效

AJMP NEXTT

CHECKK:JNB P3.0,REPEAT;判断是否使用锦囊

NEXTT:ACALL DISPLAY

JB OK,ACOUNT; 如果是抢答倒计时,如是则查询抢答,否则跳过查询继续倒数(这 里起到锁抢答作用)

AJMP RECOUNT

ACOUNT:MOV A,36H

JNB ACC.0,TRUE1

JNB ACC.1,TRUE2

JNB ACC.2,TRUE3

JNB ACC.3,TRUE4

JNB ACC.4,TRUE5

JNB ACC.5,TRUE6

JNB ACC.6,TZ1

JNB ACC.7,TZ2

AJMP RECOUNT

TZ1:JMP TRUE7

TZ2:JMP TRUE8

QUIT:CLR OK;如果按下了“停止”执行的程序

CLR RING

AJMP START

;=====正常抢答处理程序 =======

TRUE1:ACALL BARK

MOV A,R2

MOV R6,A;抢答时间 R2送 R6

MOV R3,#01H

CLR OK;因为答题的计时不在查询抢答,所以就锁了抢答 AJMP COUNT

TRUE2:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#02H

CLR OK

AJMP COUNT

TRUE3:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#03H

CLR OK

AJMP COUNT

TRUE4:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#04H

CLR OK

AJMP COUNT

TRUE5:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#05H

CLR OK

AJMP COUNT

TRUE6:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#06H

CLR OK

AJMP COUNT

TRUE7:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#07H

CLR OK

AJMP COUNT

TRUE8:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#08H

CLR OK

AJMP COUNT

;=====犯规抢答程序 =========

ERROR:MOV R0,#00H

MOV TH1,#3CH

MOV TL1,#0B0H

MOV 34H,R3;犯规号数暂存与(34H)

HERE:MOV A,R0

CJNE A,#06H,FLASH;0.3s向下运行 ->灭并停响

CLR RING

MOV R3,#0AH

MOV R4,#0AH

MOV R5,#0AH;三灯全灭

AJMP CHECK1

FLASH:CJNE A,#0CH,CHECK1;下面是 0.8s 的情况,响并显示号数并清 R0,重新计 SETB RING

MOV R0,#00H

MOV R3,34H;取回号数

MOV R5,#0BH

MOV R4,#0BH;显示 FF 和号数

AJMP CHECK1

CHECK1:JNB P3.1,QUIT

ACALL DISPLAY

AJMP HERE

QUIT1:CLR RING

CLR OK

AJMP START

;=====显示程序 =====

DISPLAY:MOV DPTR,#DAT1; 查表显示程序, 利用 P0口做段选码输出 /P2低三位做位选吗输 出

MOV A,R3

MOVC A,@A+DPTR

MOV P2,#0FEH

MOV P0,A

ACALL DELAY2

MOV DPTR,#DAT2

MOV A,R5

MOVC A,@A+DPTR

MOV P2,#0FDH

MOV P0,A

ACALL DELAY2

MOV A,R4

MOVC A,@A+DPTR

MOV P2,#0FBH

MOV P0,A

ACALL DELAY2

RET

DA T1:DB 00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;灭、 1、 2、 3、 4、 5、 6、 7、 8、 9、灭、 F

DA T2:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;0、 1、 2、 3、 4、 5、 6、 7、 8、 9、灭、 F

;======加减时间延时(起到不会按下就加 N 个数) =====

DELAY1:MOV 35H,#08H

LOOP0:ACALL DISPLAY

DJNZ 35H,LOOP0

RET

;======延时 4236个机器周期(去抖动用到) =====

DELAY:MOV 32H,#12H

LOOP:MOV 33H,#0AFH

LOOP1:DJNZ 33H,LOOP1

DJNZ 32H,LOOP

RET

;======延时 4236个机器周期(显示用到) =======

DELAY2:MOV 32H,#43H

LOOP3:MOV 33H,#1EH

MOV A,R7;每隔 60~70个机器周期读一次 P1口,全为 1时为无效数据,继续读,有 一个不为 1时,转到正常强大处理

JNZ AAAA1;没读到有效数据时继续转到 AAAA1

LOOP2:DJNZ 33H,LOOP2

DJNZ 32H,LOOP3

RET

;=======读抢答按键数据口程序 ========

; 由于在度抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后哎检测 安检口

; 然而在检测安检口时动态扫描要调用三次(4MS )延时程序。这样就会导致读数据口出现 滞后,造成 1号优先最高, 8号最低

; 故采用在延时子程序中加了读数据口程序,保证了灵敏度和可靠性

AAAA1:MOV A,P1

CJNE A,#0FFH,AA1; 当不全为 1时的数据为有效数据

AA0:MOV 36H,A;将有效数据送到 36H 暂存

AJMP LOOP2

AA1:DEC R7

AJMP AA0

;=====发声程序 ======

BARK:SETB RING

ACALL DELAY1

ACALL DELAY1

CLR RING;按键发声

RET

;=====T0溢出中断(响铃程序) ======

T0INT:MOV TH0,#0ECH

MOV TL0,#0FFH

JNB RING,OUT

CPL P3.6;RING标志位为 1时 P3.6口不短取反使喇叭发出一定频率的声音 OUT:RETI

;=====T1溢出中断(计时程序) ======

T1INT:MOV TH1,#3CH

MOV TL1,#0B0H

INC R0

RETI

END

c51抢答器程序汇编语言,c51单片机汇编语言单片机八位抢答器程序相关推荐

  1. c51单片机汇编语言语法错误,[计算机]汇编语言常见错误分析.doc

    [计算机]汇编语言常见错误分析.doc 单片机汇编语言常见错误分析 2009年07月12日 星期日 1244单片机汇编语言常见错误分析发布 2009-4-04 0027 | 作者 hnrain | 查 ...

  2. 利用c51进行数模转换并在液晶屏上显示_51单片机汇编语言实验(五)-----A/D 0809模数转换和DA0832数模转换实验(附参考代码及注释)...

    本系列共6篇文章,本文作为本系列的第五篇文章,介绍实验五 :A/D 0809模数转换和DA0832数模转换实验,本系列文章基于Dais-52PRO实验箱. 本系列文章链接: ------------- ...

  3. c51单片机汇编语言语法错误,单片机汇编语言常见错误知识点分析

    描述 汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的惟一语言.因而对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的.至于很多需要 ...

  4. 单片机六位抢答器c语言程序,八路电子抢答器(基于51单片机的8路抢答器设计C语言程序)...

    哥,你还有AT89C51单片机8路抢答器的资料吗 哥,你还有AT89C51单片机8路抢答器的资料吗 AT89C51单片机8路抢答器的资料 源程序如下 #include #define uchar un ...

  5. c51单片机烧录程序 控制台显示正在检测目标单片机

    问题 c51单片机烧录程序 控制台显示正在检测目标单片机 详细问题 笔者使用单片机型号STC89C52, 进行程序烧录.控制台显示正在检测目标单片机 解决方案 将单片机型号由STC89C52更改为ST ...

  6. 单片机4人抢答器程序C语言,基于单片机的4人抢答器.pdf

    基于单片机的4人抢答器 本文由wosulewen贡献 doc文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机 查看. 福建工程学院国脉信息学院 目录 摘要----------- ...

  7. 【毕业设计】基于单片机的MP3音乐播放器设计与实现 - stm32 物联网 c51

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 软件部分设计 3.3 实现效果 3.4 部分相关代码 4 最后 1 简介 Hi,大家好,这里是丹成学长,今 ...

  8. keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法

    前几天时间在做一个基于51单片机开发板的等精度频率计,用LCD1602液晶显示的,晶振是22.1184MHZ,用得是测频率法,目的是想做到能够测试0--900KHZ的信号. 液晶显示部分花了我好几天才 ...

  9. c语言六位抢答器课程设计,基于c语言单片机8位竞赛抢答器设计课程设计.docx

    基于c语言单片机8位竞赛抢答器设计课程设计 课程设计报告课程名称:单片机课程设计报告题目:8位竞赛抢答器的设计学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年12月25 ...

  10. 89c51汇编语言初始化,!!89C51汇编语言程序的设计与调试.ppt

    !!89C51汇编语言程序的设计与调试 第4章 89C51汇编语言程序的设计与调试 汇编语言是面向机器硬件的语言,要求程序设计者对89C51单片机具有很好的"软.硬结合"的功底. ...

最新文章

  1. 图片的裁剪、旋转、平移、模糊
  2. js组合模式和寄生组合模式的区别研究
  3. 【渝粤教育】国家开放大学2018年秋季 0554-21T立体构成(一) 参考试题
  4. 怎样去理解@ComponentScan注解
  5. 拦截器及 Spring MVC 整合
  6. 2019pythonqq机器人_基于Python来开发一个QQ机器人, 原来这么简单!
  7. 计算机网络中数据通讯方式有哪些,常见的数据通信方式原理是什么
  8. Excel导入导出SQL server数据库
  9. 不吼不叫:该如何平静地和孩子合作?
  10. 视频教程-华为HCNA网络工程师【从入门到精通】自学视频[肖哥]-华为认证
  11. 使用inkscape制作logo
  12. FBE 与FDE学习总结
  13. 手机九宫格解锁所有可能
  14. 二值形态学之击中击不中变换
  15. 跨部门工作安排与绩效考评解决方案
  16. 计算机应用数学 教材,计算机应用数学(第2版)
  17. leecode-C语言实现-7. 整数反转
  18. AFNetworking概述和4.0的实践
  19. 在同一台电脑上使用内网和外网
  20. 记录微星gl63的ubuntu 18.04重装rtl8821ce驱动,重获wifi

热门文章

  1. 我的航拍直升机 控制基站软件的编写历程(3.5)—分析界面
  2. 【设计模式】工厂模式(Factory Pattern)
  3. apache httpclient 连接 IIB,发送XML请求
  4. 小布老师讲座笔记(一)
  5. 安装企业宽带的一些问题
  6. 如何系统地学习计算机编程?自学还是培训?怎么选?
  7. 编程入门篇之零基础入门(通用)
  8. mysql横竖表转换
  9. About Garbage Collector and finilize()
  10. 100% 解决 VMware Workstation 与 Hyper-V 不兼容。请先从系统中移除 Hyper-V 角色