版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简易电子棋盘程序设计ORG 0000H AJMP MAINORG 000BH AJMP ONEWINORG 001BHAJMP RINGORG 0030H *定时器 T1 中断子程序RING: INC R0CJNE R0,#7FH,RETUSETB P1.2 ;若等待 8 秒未按键,则蜂鸣器响 MOV R0,#0RETU: RETI *主程序MAIN: CLR P1.0MOV TMOD,#10H MOV TH1,#0MOV TL1,#0SETB EASETB ET1SETB ET0SETB P1.0MOV DPTR,#7FFFHMOV R0,0 MOV A,#90H MOVX DPTR,AMO
2、V DPTR,#BFFH MOV A,#80H;所有T触发器复位,所有LED熄灭;中断允许;开定时中断 1;开定时中断 0;置位 P1.0, T 触发器有效,可以点亮;键盘端 8255A 初始化; R0 初始化; A 口输入模式, B 口输出模式;LED端8255A初始化;A、B 口均为输出模式LED *点亮LED灯MOVX DPTR,A SETB TR1;开始计时KEYSCAN:ACALLIFPRESS;检查是否有按键按下JZ KEYSCAN;若无按键按下,返回KEYSCA继续等待ACALL D10MS;若有按键,延时 10ms 去抖动处理ACALL IFPRESS;再次检查是否有按键JZ
3、KEYSCAN;无按键按下,返回KEYSCA继续等待KEY1: MOV R2,#0FEH;使第 0 行为低电平MOV R5,#00H;行寄存器清 0KEY2: MOV DPTR,#7FFDH;扫描行MOV A,R2MOVX DPTR,AMOV DPTR,#7FFCH;扫描列MOVX A,DPTRCPL A;按键对应位置为 1ANL A,#0FFHJNZ KEY3;该行有键按下,转 KEY3MOV A,R5;无键按下,行值寄存器R5加1ADD A,#01HMOV R5,AMOV A,R2;该行无键按下,下一行置为低电平RL AMOV R2,AJB ACC.0,KEY2;8行未全部扫描完,转KEY
4、2继续扫描AJMP KEYSCAN;8行已扫描完,转KEYSCA等待下一次按键KEY3: MOV R4,A;将按键列值 (按键为 1)存入 R4CPL AKEY4: ACALL D10MSACALL IFPRESSJNZ KEY4;等待按键释放,避免按一次键重复计算CLR P1.2;关闭蜂鸣器MOV TH1,#0;定时器 1 清零MOV TL1,#0MOV R0,#0;计数寄存器R0清零MOV A,R2CPL AMOV R2,A;按键对应行值 (按键为 1)存入 R2LIGHT: CPL P1.1; P1.1高电平绿灯亮,低电平红灯亮MOV DPTR,#BFFCH按键对应LED列置1MOV A
5、,R4MOV DPTR,AMOV DPTR,#BFFDH按键对应LED行置1MOV A,R2MOV DPTR,A ;本次亮灯完成 *按键对应位置 1JB P1.1,GREEN;判断此次点亮的是红色LED还是绿色LEDRED:MOVA,#20H;红色LED点亮位置存储在片内RAM20H27H 单元AJMPLOGREEN:MOVA,#28H;绿色LED点亮位置存储在片内RAM28H2FH单元LO:ADDA,R5MOVR6,AMOVA,R4ORLA,R6;与之前的记录进行“或”处理,屏蔽已置1 的位MOVR6,A;将此次按键位置对应置1; * 判断输赢IFWIN: CLR C SETB F0 *每行
6、横向检查是否已经获胜,共需 3*8=24 次JB P1.1,GREEN1 RED1: MOV R1,#20HAJMP RUN1 GREEN1:MOV R1,#28H; R1 中存检查起始地址RUN1:MOVR7,#05HMOVR3,#08HMOVR5,#03HMOVR4,#01HMOVR2,R4WIN1:MOVA,R1RMOV1:RLC ACHECK1: JC GO1CLR F0AJMP BACK1GO1: RLC AJB F0,JWIN1JNB F0,BACK1JWIN1: AJMP WINBACK1: SETB F0;每次检测 5 个格子,用 R7 控制;总共有8行,循环8次,用R3控制
7、;每行需要检查 3 次,用 R5 控制;初始位需左移次数,保存在寄存器 R4中 ;R2中备份R4起始值DJNZ R4,RMOV1;本次检查有0,不可能已获胜,置F0为0 ;此次检查不可能获胜,转下一次检查 ;循环移位,依次检查下一位DJNZ R7,CHECK1;检查完后F0仍为1,则一方获胜;程序较长无法用JB直接跳到WIN,采用间接跳转;未胜利,继续检查MOVR7,#05H;R7寄存器复位MOVR4,R2;R4寄存器复位INCR4;初始位左移次数加 1MOVR2,R4;即从上次开始位的下一位开始顺次检查 5 位DJNZR5,WIN1INCR1;检查下一行MOVR5,#03H;R5寄存器复位M
8、OVR4,#01H;R4寄存器复位MOVR2,R4DJNZR3,WIN1JB P1.1,GREEN2RED2: MOV R1,#20H; *R1 、R7、R3 寄存器赋初值( 1)AJMP RUN2GREEN2:MOV R1,#28HRUN2: MOV R2,R1;R2中备份R1起始值MOV R7,#05H;每次需要检查连续的5个位,用R7控制MOV R3,#03H;每列需要检查 3 次,用 R3 控制MOV R4,#01H;记录当前检查的是哪一列MOV R5,R4;R5中备份R4的值MOV R6,#08H;总共有 8 列,需循环 8 次,用 R6 控制CHECK2: MOV A,R1RMOV
9、2:RLC ADJNZ R4,RMOV2;移位至所要的列JC GO2CLR F0AJMP BACK2;此次检查不可能获胜,转下一次检查GO2: INC R1;检查当前列下一位DJNZ R7,CHECK2JB F0,JWIN2;检查完后F0仍为1,则一方获胜JNB F0,BACK2JWIN2: AJMP WIN;若一方胜利,跳至 WINBACK2: SETB F0;未胜利,继续检查MOV R7,#05;R7复位,控制检查5位MOV R1,R2; R1 复位,指向本次起始行MOV R4,R5INC R4;R4加一,检查下一列MOV R5,R4DJNZ R6,CHECK2MOV R1,R2INC R
10、1;起始扫描的行值加一MOV R2,R1;即从该列上次开始行的下一行开始检查连续五位 *每列纵向检查是否已经获胜,共需 3*8=24 次MOV R4,#01HMOV R5,R4MOV R6,#08H3*3=9 次R4值复位,从第一列开始R5值复位,记录R4的初值R6值复位DJNZ R3,CHECK2; * 整体(右)斜向检查是否已经获胜,共需WIN31*第一轮检查JB P1.1,GREEN31 RED31: MOV R1,#20HAJMP RUN31 GREEN31:MOV R1,#28H RUN31: MOV R2,R1MOV R7,#05HMOV R3,#03HMOV R4,#01HMOV
11、 R5,R4CHECK31:MOV A,R1 MOVE31:RLC ADJNZ R4,MOVE31MOV R4,R5INC R4MOV R5,R4JC GO31;*R1 、R7、R3 寄存器赋初值;R2中备份R1起始值;R4记录要移位的次数;R5中备份R4中上一次的值;每下移一行,要移的位数就加一1)CLR F0AJMP BACK31GO31: INC R1;此次检查不可能获胜,转下一次检查DJNZ R7,CHECK31JB F0,JWIN31JNB F0,BACK31 JWIN31: AJMP WIN BACK31:SETB F0MOV R1,R2INC R1MOV R2,R1MOV R4,
12、#01HMOV R5,R4DJNZ R3,CHECK31检查完后F0仍为1,则一方获胜若一方胜利,跳至 WIN未胜利,继续检查R4,R5中的值复位WIN32*第二轮检查JB P1.1,GREEN32RED32: MOV R1,#20H; *R1、R7、R3 寄存器赋初值AJMP RUN32GREEN32:MOV R1,#28H RUN32: MOV R2,R1MOV R7,#05HMOV R3,#03HMOV R4,#02HMOV R5,R4 CHECK32:MOV A,R1 MOVE32:RLC ADJNZ R4,MOVE32MOV R4,R5INC R4MOV R5,R4JC GO32CL
13、R F0AJMP BACK32 GO32: INC R1;R2中备份R1起始值;R4记录要移位的次数;R5中备份R4中上一次的值;每下移一行,要移的位数就加一;此次检查不可能获胜,转下一次检查DJNZ R7,CHECK32JB F0,JWIN32JNB F0,BACK32 JWIN32: AJMP WIN BACK32S:ETB F0MOV R1,R2INC R1MOV R2,R1MOV R4,#02HMOV R5,R4DJNZ R3,CHECK32检查完后F0仍为1,则一方获胜若一方胜利,跳至 WIN未胜利,继续检查R4,R5中的值复位; WIN33*JB P1.1,GREEN33RED33
14、: MOV R1,#20H;AJMP RUN33 GREEN33:MOV R1,#28H RUN33: MOV R2,R1;MOV R7,#05HMOV R3,#03HMOV R4,#03H;MOV R5,R4;CHECK33:MOV A,R1 MOVE33:RLC ADJNZ R4,MOVE33MOV R4,R5INC R4;MOV R5,R4第三轮检查*R1、R7、R3 寄存器赋初值(1)R2中备份R1起始值R4记录要移位的次数R5中备份R4中上一次的值每下移一行,要移的位数就加一此次检查不可能获胜,转下一次检查检查完后 F0 仍为 1,则一方获胜若一方胜利,跳至 WIN未胜利,继续检查R
15、4,R5中的值复位3*3=9 次JC GO33CLR F0AJMP BACK33 GO33: INC R1DJNZ R7,CHECK33JB F0,JWIN33JNB F0,BACK3 JWIN33: AJMP WIN BACK33S:ETB F0MOV R1,R2INC R1MOV R2,R1MOV R4,#03HMOV R5,R4DJNZ R3,CHECK33* 整体(左)斜向检查是否已经获胜,共需WIN41*第一轮检查JB P1.1,GREEN41 RED41: MOV R1,#20HAJMP RUN41 GREEN41:MOV R1,#28H RUN41: MOV R2,R1MOV R
16、7,#05HMOV R3,#03HMOV R4,#01HMOV R5,R4CHECK41:MOV A,R1 MOVE41:RRC ADJNZ R4,MOVE41MOV R4,R5INC R4MOV R5,R4JC GO41CLR F0AJMP BACK41 GO41: INC R11);*R1 、R7、R3 寄存器赋初值;R2中备份R1起始值;R4记录要移位的次数;R5中备份R4中上一次的值;每下移一行,要移的位数就加一;此次检查不可能获胜,转下一次检查DJNZ R7,CHECK41JB F0,JWIN41JNB F0,BACK41 JWIN41: AJMP WIN BACK41:SETB F
17、0检查完后F0仍为1,则一方获胜若一方胜利,跳至 WIN未胜利,继续检查MOV R1,R2INC R1;MOV R2,R1MOV R4,#01H; R4,R5中的值复位MOV R5,R4DJNZ R3,CHECK41WIN42*第二轮检查JB P1.1,GREEN42RED42: MOV R1,#20H; *R1、R7、R3 寄存器赋初值(1)AJMP RUN42GREEN42:MOV R1,#28HRUN42: MOVR2,R1;R2中备份R1起始值MOVR7,#05HMOVR3,#03HMOVR4,#02H;R4记录要移位的次数MOVR5,R4;R5中备份R4中上一次的值CHECK42:M
18、OV A,R1MOVE42:RRC ADJNZ R4,MOVE42MOV R4,R5INC R4;每下移一行,要移的位数就加一MOV R5,R4JC GO42;此次检查不可能获胜,转下一次检查CLR F0AJMP BACK42GO42: INC R1DJNZ R7,CHECK42JB F0,JWIN42JNB F0,BACK42 JWIN42: AJMP WIN BACK42S: ETB F0MOV R1,R2INC R1MOV R2,R1MOV R4,#02HMOV R5,R4DJNZ R3,CHECK42检查完后F0仍为1,则一方获胜若一方胜利,跳至 WIN未胜利,继续检查R4,R5中的值
19、复位WIN43*第三轮检查JB P1.1,GREEN43RED43: MOV R1,#20H; *R1、R7、R3 寄存器赋初值(1)AJMP RUN43GREEN43:MOV R1,#28HRUN43: MOVR2,R1;R2中备份R1起始值MOVR7,#05HMOVR3,#03HMOVR4,#03H;R4记录要移位的次数MOVR5,R4;R5中备份R4中上一次的值CHECK43:MOV A,R1MOVE43:RRC ADJNZ R4,MOVE43MOV R4,R5INC R4 ;每下移一行,要移的位数就加一MOV R5,R4JC GO43CLR F0AJMP BACK43 ;此次检查不可能获胜,转下一次检查 GO43: INC R1DJNZ R7,CHECK43JB F0,JWIN43 ;JNB F0,BACK43JWIN43: AJMP WIN;BACK43S:ETB F0;MOV R1,R2INC R1;MOV R2,R1MOV R4,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《螺纹与测量》课件
- 《通信系统概论》课件-第2章
- 《GSM的无线信道》课件
- 合同备案解除通知书
- 工伤停工留薪期合同到期补充协议
- 2025年百色货运从业资格证考试题库a2
- 2025年广州道路货物运输从业资格证模拟考试
- 医疗服务融资管理办法
- 火车站出口岗亭施工合同
- 风力发电设备搬运吊车租赁协议
- 《卫星通信系统》课件
- 电动自行车火灾事故教训警示课件
- 江苏小高考计算机考试题目及答案
- 上海市徐汇区2023-2024学年九年级上学期一模化学试题
- 2024年度初级会计《初级会计实务》模拟试题及答案
- 美容护肤招商方案
- 新概念英语课件NCE1-lesson57-58(共21张)
- 国开2023秋《人文英语3》第5-8单元作文练习参考答案
- 水平四《排球正面双手传球》教学设计
- 黑龙江省黑河北安市2024届中考二模数学试题含解析
- 计算机系统权限修改审批表
评论
0/150
提交评论