目录
摘要1
1 方案论证.
1.1 开发意义
1.2 功能介绍.
2 设计思路
3 硬件电路
2.1 74HC573驱动芯片电路.
2.2 8*8LED点阵的接口电路..
2.3单片机最小系统电路..
2.4整体电路图.
4 系统调试..
3.1硬件调试
3.2软件调试..
5 作品展示
6 元器件清单..
7 结束语..
致谢
参考文献.
游戏机的制作:俄罗斯方块 摘要: 近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,应用到各个领域。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。 我做的题目是一个用51单片机制作的游戏机,大致分位软件和硬件2大部分,硬件主要通过5按键、1个8*8LED点阵屏、一个单片机系统,实现积木的左、右、下、变化、复位五个模式,完全达到俄罗斯方块所实现的功能。 次项目用专门的PROTUES仿真,而采用KEIL软件程序进行程序调试
1 方案论证 1.1 开发意义: 充分理解点阵显示的原理,已经动态扫描的应用,对生活中的产品有了个全新的认识,不但懂得理论与实际的差距,也时对自己思维的一次强有力的挑战,做出这个东西让我收获良多。 1.2 功能介绍: 开始让他显示个积木,在按键没实现控制的时候,每隔1S下移一次,有触底处理功能,当碰到底的时候图形不能下移,判断能否消行,能消行则消行,不能再判断是否到顶,到底则从新开始,没到底产生下个随即数,中间有5个按键控制,一个实现图形左移,一个实现图形右移,一个实现下移,一个实现旋转,一个复位。 2 设计思路 图形的上下移动: 根据点阵理论可通过图形数据的左右移动和地址变化来实现。 图形的变化: 可通过地址变化来得到。即把需要变化的数据送到一固定地址,通过地址变化再送回显示的地址里面。 图形的碰边处理: 可通过各个边上的数据判断是否到边来实现。 与原有图形相遇: 可通过与原有图形数据进行比较处理来实现。: 图形的旋转: 在固定地址里面实现旋转比较容易,但是在行进中的图形旋转就比较费脑筋,我是用一个地址计数下移的次数,再用一个地址计数左移右移的次数。再根据这些次数确定图形的地址,再把这些地址送到图形变化的一个固定的地址中,变化后再送回到显示的地址中去显示。 图形的碰边处理: 如果不对图形进行边框处理,图形就会一直移动,看不到我们想要的效果。我是用把边框数据与图形数据进行位运算。再判断这些数据就可以得到图形是否到边。 3 硬件电路 2.1 74HC573驱动芯片电路

此芯片时个锁存器,也可以做驱动芯片驱动LED点阵屏幕,这里面的电源和地系统附加了 但是实际中的加上去,不然芯片不能工作。
2.2 8*8LED点阵的接口电路
上面的是仿真的图 上端接数据 下端开片选 但是实际中引脚很不规则,所有的花时间去测 用一节干电池,或者用指针万用表打到电阻10K档。
2.3 单片机最小系统电路 2.4 整体电路图以及仿真效果
但是里面的电源、地、晶振、复位、EA等 在仿真中系统自动加的 要是在实际生活中的加进去。
4 系统调试 3.1 硬件调试 第一 检查单片机的最小系统是否正常,包括检查晶振、单片机2端电压、复位电路已经EA 第二 看驱动芯片是否工作正常、接法是否正确,再检查LED点阵是否接的正确,可以用一节干电池测,也可以用指针万用表打到电阻10K档位测。 3.2 软件调试 流程图
程序代码
5 作品展示 6 元器件清单 AT89S52芯片一个 8元 5个按键 0.5元 74HC573驱动芯片 2元 LED点阵屏幕 8元 1个1K的上拉排阻 1元 一个10uf电容电解电容 8个100的限流电阻 2个30pf电容无极性 一个LED指示灯 1个330的电阻 一个10K电阻 1个11.0592的晶振 合计:24元 7 结束语 我在前面的一些处理还是比较顺利,比如说按键的处理、下移、左右移、旋转、消行、碰边等问题,2天的时间就弄好了。最浪费我时间的是与下面的图形相遇的处理。开始判倒是能够判断,但只能在一个固定的区域里停止下移。后来经过老师指导要我把显示图形的三个地址作为一个整体判断,也弄了好久,还是有些地方不能判断出来,思考好久之后我才想到用这个方法判断出来。还有旋转,开始总想不到算法,最后老师指导我用位地址操作 先把图形放旋转区旋转 在放到操作地址区,记下左右上下移动次数确实帮了我不少的忙 碰边处理用异或处理。触底时把每一行数据放个定义的地址区域,最后与#0FFH判断做很妙。 还有就是硬件处理的比较麻烦,开始不太清楚点阵的引脚排布,这里弄了好久,后来驱动那里也出现了好多问题,开始我用74HS373来驱动,没注意引脚排列,最后用了74HC573 他们功能一样,但是74HC573输入输出接在一边便于排线。 开始没有规划好地址的用途。到最后出现了地址不够用的现象,所以良好的编程习惯很重要。 通过这个项目,真的时对自己思维的一次很大的挑战,程序1200多行,AT89S51装不下,改用AT89S52做。 通过这次项目我找到点成就感,也希望自己以后能经常有这种成就感,在电子领域站一席之地。 致 谢 在此论文撰写过程中,要特别感谢我的导师的指导与督促,同时感谢她的谅解与包容。没有何老师的帮助也就没有今天的这篇论文。求学历程是艰苦的,但又是快乐的。感谢我的班主任XXX老师,谢谢他在这三年中为我们全班所做的一切,他不求回报,无私奉献的精神很让我感动,再次向他表示由衷的感谢。在这三年的学期中结识的各位生活和学习上的挚友让我得到了人生最大的一笔财富。在此,也对他们表示衷心感谢。 谢谢我的父母,没有他们辛勤的付出也就没有我的今天,在这一刻,将最崇高的敬意献给你们! 本文参考了大量的文献资料,在此,向各学术界的前辈们致敬!
单片机源程序如下:
- ;俄罗斯方块,采用移片选的方法.
- ;编译时间: 09年1月15
- ;编译者: 谭华
- ;实现功能: 俄罗斯方块的旋转,左移,右移
- ; 消行 碰边 触底 产生随即数等 基本实现右移的基本功能
- ;==============初始化自定义========================================
- pianxuan equ p2
- shuchu equ p1
- bt0 equ 20h.0
- bt1 equ 20h.1
- bt2 equ 20h.2
- bt3 equ 20h.3
- bt4 equ 20h.4
- bt5 equ 20h.5
- bt6 equ 20h.6
- bt8 equ 21h.0
- bt9 equ 21h.1
- bt10 equ 21h.2
- bt11 equ 21h.3
- ;============================================
- org 0000h
- ajmp start
- org 0bh
- ljmp intt0
- org 30h
- ;=============主程序初始化================================
- start: mov sp, #60h
- mov tmod, #21h
- mov th0, #0b1h
- mov tl0, #0e0h
- mov th1, #25
- mov tl1, #25
- mov r1, #00
- call chushihua
- call chuzhi
- setb ea
- setb et0
- setb tr0
- setb tr1
- clr bt0
- clr bt1
- clr bt2
- clr bt3
- clr bt4
- clr bt5
- clr bt8
- clr bt9
- clr bt10
- clr bt11
- setb bt6
- mov 35h, #0feh
- mov r2, #00
- mov r4, #00
- ;=====================================================
- ; 主程序
- ;======================================================
- main:
- jnb bt0, main
- clr bt0
- call saomiao ;扫描按键
- call xianshi0 ;调用下移显示画面子程序
- call xianshi ;调用触边后静态图形显示的子程序
- jb bt10, loop ;判断是否触顶,=1,游戏结束,跳到满屏显示
- call chudi ;调用触底子程序
- call xiaohang ;调用消行判断子程序
- call yanshi_40ms ;调用延时40ms消抖子程序,40ms到,BT5置1
- jnb bt5, xia0
- clr bt5
- call panduan ;调用按键判断处理子程序
- xia0: jnb bt9, xia ;图形快速下落标志位,=1快速下落
- clr bt9
- call xialuo ;调用图形下落子程序
- ajmp main
- xia: call yanshi_1s ;延时1s子程序.1s到,BT1=1
- jnb bt1, main
- clr bt1
- call xialuo
- ajmp main
- loop: call yanshi_500ms ;调用延时500ms子程序,500ms到bt11=1
- jnb bt11, main
- clr bt11
- call manping ;调用满屏全亮子程序
- ajmp main
-
-
- ;=====================================================
- ; 按键扫描
- ;=====================================================
- saomiao:
- jb p3.2, qq0
- setb bt2
- ajmp qq
- qq0: jb p3.1, qq1
- setb bt3
- ajmp qq
- qq1: jb p3.0, qq2
- setb bt4
- ajmp qq
- qq2: jb p3.3, qq4
- setb bt8
- ajmp qq
- qq4: setb bt6
- clr bt2
- clr bt3
- clr bt4
- clr bt8
- qq: ret
- ;=====================================================
- ; 图形下移子程序
- ;=====================================================
- xialuo:
- mov a, 35h
- rl a
- mov 35h, a
- ret
-
- ;============================================
- ; 判断子程序
- ;=====================================================
- panduan:
- jnb bt2, ww0
- clr bt2
- jnb bt6, ww0
- clr bt6
- call youyi
- ajmp ww
- ww0: jnb bt3, ww1
- clr bt3
- jnb bt6, ww1
- clr bt6
- call zuoyi
- ajmp ww
- ww1: jnb bt4, ww2
- clr bt4
- jnb bt6, ww2
- clr bt6
- call zhuan
- ajmp ww
- ww2: jnb bt8, ww
- clr bt8
- jnb bt6, ww
- clr bt6
- call kuaixia
- ww: ret
-
-
- ;============================================================
- ; 快速下落子程序
- ;=============================================================
- kuaixia: setb bt9
- ret
- ;============================================================
- ; 满屏子程序
- ;============================================================
- manping: mov 41h, #0ffh
- mov 42h, #0ffh
- mov 43h, #0ffh
- mov 44h, #0ffh
- mov 45h, #0ffh
- mov 46h, #0ffh
- mov 47h, #0ffh
- mov 48h, #0ffh
- ret
- ;============================================================
- ; 清屏子程序
- ;============================================================
- qingping: mov 41h, #00h
- mov 42h, #00h
- mov 43h, #00h
- mov 44h, #00h
- mov 45h, #00h
- mov 46h, #00h
- mov 47h, #00h
- mov 48h, #00h
- ret
- ;============================================
- ; 下移显示
- ;=====================================================
- xianshi0: mov a, 35h
- mov p1, 31h
- mov p2, a
- call delay
- rl a
- mov p1, #00
- mov p1, 32h
- mov p2, a
- call delay
- rl a
- mov p1, #00
- mov p1, 33h
- mov p2, a
- call delay
- mov p1, #00
- ret
- ;=====================================================
- ; 图形右移子程序
- ;=====================================================
- zuoyi:
- mov a, 31h
- jnb acc.0, dd1
- ajmp dd
- dd1: mov a, 32h
- jnb acc.0, dd2
- ajmp dd
- dd2: mov a, 33h
- jnb acc.0, dd3
- ajmp dd
- dd3: mov a, 35h
- cjne a,#0feh,sa0
- call sad0
- ajmp dd
- sa0: mov a, 35h
- cjne a,#0fdh,sa1
- call sad1
- ajmp dd
- sa1: mov a, 35h
- cjne a,#0fbh,sa2
- call sad2
- ajmp dd
- sa2: mov a, 35h
- cjne a,#0f7h,sa3
- call sad3
- ajmp dd
- sa3: mov a, 35h
- cjne a,#0efh,sa4
- call sad4
- ajmp dd
- sa4: mov a, 35h
- cjne a,#0bfh,dd
- call sad5
- ajmp dd
- dd: ret
-
- sad0: mov a, 33h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,43h
- cjne a,#00,dd4
- mov 33h, 39h
- mov a, 32h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,42h
- cjne a,#00,dd4
- mov 32h, 39h
- mov a, 31h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,41h
- cjne a,#00,dd4
- mov 31h, 39h
- dec 51h
- dd4: ret
- sad1: mov a, 33h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,44h
- cjne a,#00,dd5
- mov 33h, 39h
- mov a, 32h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,43h
- cjne a,#00,dd5
- mov 32h, 39h
- mov a, 31h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,42h
- cjne a,#00,dd5
- mov 31h, 39h
- dec 51h
- dd5: ret
- sad2: mov a, 33h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,45h
- cjne a,#00,dd6
- mov 33h, 39h
- mov a, 32h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,44h
- cjne a,#00,dd6
- mov 32h, 39h
- mov a, 31h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,43h
- cjne a,#00,dd6
- mov 31h, 39h
- dec 51h
- dd6: ret
- sad3: mov a, 33h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,46h
- cjne a,#00,dd7
- mov 33h, 39h
- mov a, 32h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,45h
- cjne a,#00,dd7
- mov 32h, 39h
- mov a, 31h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,44h
- cjne a,#00,dd7
- mov 31h, 39h
- dec 51h
- dd7: ret
- sad4: mov a, 33h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,47h
- cjne a,#00,dd8
- mov 33h, 39h
- mov a, 32h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,46h
- cjne a,#00,dd8
- mov 32h, 39h
- mov a, 31h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,45h
- cjne a,#00,dd8
- mov 31h, 39h
- dec 51h
- dd8: ret
- sad5: mov a, 33h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,48h
- cjne a,#00,dd9
- mov 33h, 39h
- mov a, 32h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,47h
- cjne a,#00,dd9
- mov 32h, 39h
- mov a, 31h
- rr a
- mov 39h,#00
- mov 39h, a
- anl a,46h
- cjne a,#00,dd9
- mov 31h, 39h
- dec 51h
- dd9: ret
-
- ;===============图形左移子程序======================================
- ;通过图形移动一位,与静止图形相与,为零则移动,否则原地不动
- ;
- ;=====================================================
- youyi: mov a, 31h
- jnb acc.7, cc0
- ajmp cc20
- cc0: mov a, 32h
- jnb acc.7, cc1
- ajmp cc20
- cc1: mov a, 33h
- jnb acc.7, cc
- ajmp cc20
- cc: mov a, 35h
- cjne a,#0feh,zz0
- call scd0
- ajmp cc20
- zz0: mov a, 35h
- cjne a,#0fdh,zz1
- call scd1
- ajmp cc20
- zz1: mov a, 35h
- cjne a,#0fbh,zz2
- call scd2
- ajmp cc20
- zz2: mov a, 35h
- cjne a,#0f7h,zz3
- call scd3
- ajmp cc20
- zz3: mov a, 35h
- cjne a,#0efh,zz4
- call scd4
- ajmp cc20
- zz4: mov a, 35h
- cjne a,#0bfh,cc20
- call scd5
- ajmp cc20
- cc20: ret
-
- scd0: mov a, 33h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,43h
- cjne a,#00,cc2
- mov 33h, 39h
- mov a, 32h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,42h
- cjne a,#00,cc2
- mov 32h, 39h
- mov a, 31h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,41h
- cjne a,#00,cc2
- mov 31h, 39h
- inc 51h
- cc2: ret
- scd1: mov a, 33h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,44h
- cjne a,#00,cc3
- mov 33h, 39h
- mov a, 32h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,43h
- cjne a,#00,cc3
- mov 32h, 39h
- mov a, 31h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,42h
- cjne a,#00,cc3
- mov 31h, 39h
- inc 51h
- cc3: ret
- scd2: mov a, 33h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,45h
- cjne a,#00,cc4
- mov 33h, 39h
- mov a, 32h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,44h
- cjne a,#00,cc4
- mov 32h, 39h
- mov a, 31h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,43h
- cjne a,#00,cc4
- mov 31h, 39h
- inc 51h
- cc4: ret
- scd3: mov a, 33h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,46h
- cjne a,#00,cc5
- mov 33h, 39h
- mov a, 32h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,45h
- cjne a,#00,cc5
- mov 32h, 39h
- mov a, 31h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,44h
- cjne a,#00,cc5
- mov 31h, 39h
- inc 51h
- cc5: ret
- scd4: mov a, 33h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,47h
- cjne a,#00,cc6
- mov 33h, 39h
- mov a, 32h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,46h
- cjne a,#00,cc6
- mov 32h, 39h
- mov a, 31h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,45h
- cjne a,#00,cc6
- mov 31h, 39h
- inc 51h
- cc6: ret
- scd5: mov a, 33h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,48h
- cjne a,#00,cc7
- mov 33h, 39h
- mov a, 32h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,47h
- cjne a,#00,cc7
- mov 32h, 39h
- mov a, 31h
- rl a
- mov 39h,#00
- mov 39h, a
- anl a,46h
- cjne a,#00,cc7
- mov 31h, 39h
- inc 51h
- cc7: ret
- ;======================================================
- ; 图形旋转子程序
- ;======================================================
- zhuan: cjne r1,#0, bu0
- call zhuan0
- ajmp bu
- bu0: cjne r1,#1, bu1
- call zhuan1
- ajmp bu
- bu1: cjne r1,#2, bu2
- call zhuan2
- ajmp bu
- bu2: cjne r1,#3, bu3
- call zhuan3
- ajmp bu
- bu3: cjne r1,#4, bu
- call zhuan4
- bu: ret
- zhuan0: inc r2
- cjne r2,#1, gg0
- mov 31h, #10h
- mov 32h, #18h
- mov 33h, #10h
- call yizhou
- ajmp gg
- gg0: cjne r2,#2, gg1
- mov 31h, #38h
- mov 32h, #10h
- mov 33h, #00h
- call yizhou
- ajmp gg
- gg1: cjne r2,#3, gg2
- mov 31h, #10h
- mov 32h, #30h
- mov 33h, #10h
- call yizhou
- ajmp gg
- gg2: cjne r2,#4, gg
- mov r2, #00
- mov 31h, #10h
- mov 32h, #38h
- mov 33h, #00h
- call yizhou
- gg: ret
- zhuan1: inc r2
- cjne r2,#1, ggg0
- mov 31h, #08h
- mov 32h, #18h
- mov 33h, #10h
- call yizhou
- ajmp ggg
- ggg0: cjne r2,#2, ggg
- mov 31h, #30h
- mov 32h, #18h
- mov 33h, #00h
- mov r2, #00
- call yizhou
- ggg: ret
-
- zhuan2: inc r2
- cjne r2,#1, hh0
- mov 31h, #18h
- mov 32h, #30h
- mov 33h, #00h
- call yizhou
- ajmp hh
- hh0: cjne r2,#2, hh
- mov 31h, #10h
- mov 32h, #18h
- mov 33h, #08h
- mov r2, #00
- call yizhou
- hh: ret
- zhuan3: inc r2
- cjne r2,#1, hh1
- mov 31h, #20h
- mov 32h, #38h
- mov 33h, #00h
- call yizhou
- ajmp hh4
- hh1: cjne r2,#2, hh2
- mov 31h, #18h
- mov 32h, #10h
- mov 33h, #10h
- call yizhou
- ajmp hh4
- hh2: cjne r2,#3, hh3
- mov 31h, #38h
- mov 32h, #08h
- mov 33h, #00h
- call yizhou
- ajmp hh4
- hh3: cjne r2,#4, hh4
- mov r2, #00
- mov 31h, #10h
- mov 32h, #10h
- mov 33h, #30h
- call yizhou
- hh4: ret
- zhuan4: inc r2
- cjne r2,#1, hh5
- mov 31h, #10h
- mov 32h, #10h
- mov 33h, #18h
- call yizhou
- ajmp hh8
- hh5: cjne r2,#2, hh6
- mov 31h, #38h
- mov 32h, #20h
- mov 33h, #00h
- call yizhou
- ajmp hh8
- hh6: cjne r2,#3, hh7
- mov 31h, #18h
- mov 32h, #08h
- mov 33h, #08h
- call yizhou
- ajmp hh8
- hh7: cjne r2,#4, hh8
- mov r2, #00
- mov 31h, #08h
- mov 32h, #38h
- mov 33h, #00h
- call yizhou
- hh8: ret
- ;====================================================
- yizhou:
- mov a, 51h
- cjne a,#5, tt7
- jmp tt
- tt7: cjne a,#6, tt0
- call yyizhou
- jmp tt
- tt0: cjne a,#7, tt1
- call yyizhou
- call yyizhou
- call zhuanpan0
- jmp tt
- tt1: cjne a,#8, tt2
- call yyizhou
- call yyizhou
- call yyizhou
- call zhuanpan0
- jmp tt
- tt2: cjne a,#9, tt3
- call yyizhou
- call yyizhou
- call yyizhou
- call yyizhou
- call zhuanpan0
- jmp tt
- tt3: cjne a,#4, tt4
- call zyizhou
- jmp tt
- tt4: cjne a,#3, tt5
- call zyizhou
- call zyizhou
- jmp tt
- tt5: cjne a,#2, tt6
- call zyizhou
- call zyizhou
- call zyizhou
- call zhuanpan1
- jmp tt
- tt6: cjne a,#1, tt
- call zyizhou
- call zyizhou
- call zyizhou
- call zyizhou
- call zhuanpan1
- tt: ret
- ;=========触边旋转判断====================
- zhuanpan0:
- mov a, 31h
- jnb acc.0, hui0
- call zyizhou
- ajmp hui
- hui0: mov a, 32h
- jnb acc.0, hui1
- call zyizhou
- ajmp hui
- hui1: mov a, 33h
- jnb acc.0, hui
- call zyizhou
- hui: ret
- ;========触边旋转判断====================
- zhuanpan1:
- mov a, 31h
- jnb acc.7, hui3
- call yyizhou
- ajmp hui2
- hui3: mov a, 32h
- jnb acc.7, hui4
- call yyizhou
- ajmp hui2
- hui4: mov a, 33h
- jnb acc.7, hui2
- call yyizhou
- hui2: ret
- ;===========X轴右移一位=================
- yyizhou:
- mov a, 31h
- rl a
- mov 31h, a
- mov a, 32h
- rl a
- mov 32h, a
- mov a, 33h
- rl a
- mov 33h, a
- ret
- ;=========X轴左移一位=================
- zyizhou:
- mov a, 31h
- rr a
- mov 31h, a
- mov a, 32h
- rr a
- mov 32h, a
- mov a, 33h
- rr a
- mov 33h, a
- ret
- ;==============显示子程序==========================
- xianshi: mov p1, 41h
- mov p2, #0feh
- call delay
- mov p1, #00
- mov p1, 42h
- mov p2, #0fdh
- call delay
- mov p1, #00
- mov p1, 43h
- mov p2, #0fbh
- call delay
- mov p1, #00
- mov p1, 44h
- mov p2, #0f7h
- call delay
- mov p1, #00
- mov p1, 45h
- mov p2, #0efh
- call delay
- mov p1, #00
- mov p1, 46h
- mov p2, #0dfh
- call delay
- mov p1, #00
- mov p1, 47h
- mov p2, #0bfh
- call delay
- mov p1, #00
- mov p1, 48h
- mov p2, #7fh
- call delay
- mov p1, #00
- ret
- ;===========消行显示子程序==================
- xiaohang: mov a, 48h
- cjne a,#0ffh,zh0
- call tiaozhen0
- zh0: mov a, 47h
- cjne a,#0ffh,zh1
- call tiaozhen1
- zh1: mov a, 46h
- cjne a,#0ffh,zh2
- call tiaozhen2
- zh2: mov a, 45h
- cjne a,#0ffh,zh3
- call tiaozhen3
- zh3: mov a, 44h
- cjne a,#0ffh,zh4
- call tiaozhen4
- zh4: mov a, 43h
- cjne a,#0ffh,zh5
- call tiaozhen5
- zh5: mov a, 42h
- cjne a,#0ffh,zh6
- call tiaozhen6
- zh6: ret
- tiaozhen0: mov 48h, #00
- mov 49h, 48h
- mov 48h, 47h
- mov 47h, 46h
- mov 46h, 45h
- mov 45h, 44h
- mov 44h, 43h
- mov 43h, 42h
- mov 42h, 41h
- mov 41h, 49h
- ret
- tiaozhen1: mov 47h, #00
- mov 49h, 47h
- mov 47h, 46h
- mov 46h, 45h
- mov 45h, 44h
- mov 44h, 43h
- mov 43h, 42h
- mov 42h, 41h
- mov 41h, 49h
- ret
- tiaozhen2: mov 46h, #00
- mov 49h, 46h
- mov 46h, 45h
- mov 45h, 44h
- mov 44h, 43h
- mov 43h, 42h
- mov 42h, 41h
- mov 41h, 49h
- ret
- tiaozhen3: mov 45h, #00
- mov 49h, 45h
- mov 45h, 44h
- mov 44h, 43h
- mov 43h, 42h
- mov 42h, 41h
- mov 41h, 49h
- ret
- tiaozhen4: mov 44h, #00
- mov 49h, 44h
- mov 44h, 43h
- mov 43h, 42h
- mov 42h, 41h
- mov 41h, 49h
- ret
- tiaozhen5: mov 43h, #00
- mov 49h, 43h
- mov 43h, 42h
- mov 42h, 41h
- mov 41h, 49h
- ret
- tiaozhen6: mov 42h, #00
- mov 49h, 42h
- mov 42h, 41h
- mov 41h, 49h
- ret
- ;=================================================
- ; 延时1秒子程序
- ;==================================================
- yanshi_1s:
- inc r3
- mov a, r3
- cjne a,4dh, xx
- mov r3,#00
- setb bt1
- xx: ret
- yanshi_500ms:
- inc r3
- mov a, r3
- cjne a,#25, xx11
- mov r3,#00
- setb bt11
- xx11: ret
- ;=================================================
- ; 延时40m秒子程序
- ;==================================================
- yanshi_40ms:
- inc r4
- cjne r4,#3, ee
- mov r4, #00
- setb bt5
- ee: ret
- suiji: mov a, tl1
- mov b, #5
- div ab
- mov r1, b
- ret
- ;====================================================
- ; 触底子程序
- ;======================================================
- chudi: mov a, 33h
- cjne a,#00, bbb0
- mov a, 32h
- cjne a,#00h, bbb1
- ljmp bbb
- bbb0: ljmp bbb3
- bbb1: mov a, 35h
- cjne a,#0bfh,nn7
- ljmp nn6
- nn7: mov a, 35h
- cjne a,#0feh,nn8
- ljmp kk0
- nn8: mov a, 35h
- cjne a,#0fdh,nn9
- ljmp kk1
- nn9: mov a, 35h
- cjne a,#0fbh,nn10
- ljmp kk2
- nn10: mov a, 35h
- cjne a,#0f7h,nn11
- ljmp kk3
- nn11: mov a, 35h
- cjne a,#0efh,nn12
- ljmp kk4
- nn12: mov a, 35h
- cjne a,#0dfh,kk5
- ljmp kk5
- kk0: mov a, 32h
- anl a, 43h
- cjne a,#00h, nn0
- ljmp bbb
- kk1: mov a, 32h
- anl a, 44h
- cjne a,#00h, nn1
- ljmp bbb
- kk2: mov a, 32h
- anl a, 45h
- cjne a,#00h, nn2
- ljmp bbb
- kk3: mov a, 32h
- anl a, 46h
- cjne a,#00h, nn3
- ljmp bbb
- kk4: mov a, 32h
- anl a, 47h
- cjne a,#00h, nn4
- ljmp bbb
- kk5: mov a, 32h
- anl a, 48h
- cjne a,#00h, nn5
- ljmp bbb
-
- nn0: mov 35h, #0feh
- mov a, 32h
- orl a, 42h
- mov 42h, a
- mov a, 31h
- orl a, 41h
- mov 41h, a
- setb bt10
- call suiji
- call chuzhi
- ljmp bbb
- nn1: mov 35h, #0feh
- mov a, 32h
- orl a, 43h
- mov 43h, a
- mov a, 31h
- orl a, 42h
- mov 42h, a
- call suiji
- call chuzhi
- ljmp bbb
- nn2: mov 35h, #0feh
- mov a, 32h
- orl a, 44h
- mov 44h, a
- mov a, 31h
- orl a, 43h
- mov 43h, a
- call suiji
- call chuzhi
- ljmp bbb
- nn3: mov 35h, #0feh
- mov a, 32h
- orl a, 45h
- mov 45h, a
- mov a, 31h
- orl a, 44h
- mov 44h, a
- call suiji
- call chuzhi
- ljmp bbb
- nn4: mov 35h, #0feh
- mov a, 32h
- orl a, 46h
- mov 46h, a
- mov a, 31h
- orl a, 45h
- mov 45h, a
- call suiji
- call chuzhi
- ljmp bbb
- nn5: mov 35h, #0feh
- mov a, 32h
- orl a, 47h
- mov 47h, a
- mov a, 31h
- orl a, 46h
- mov 46h, a
- call suiji
- call chuzhi
- ljmp bbb
- nn6: mov 35h, #0feh
- mov a, 32h
- orl a, 48h
- mov 48h, a
- mov a, 31h
- orl a, 47h
- mov 47h, a
- call suiji
- call chuzhi
- ljmp bbb
-
- bbb3: mov a, 35h
- cjne a,#0dfh,bb6
- ljmp bb5
- bb6: mov a, 35h
- cjne a,#0feh,bb7
- ljmp jj0
- bb7: mov a, 35h
- cjne a,#0fdh,bb8
- ljmp jj1
- bb8: mov a, 35h
- cjne a,#0fbh,bb9
- ljmp jj2
- bb9: mov a, 35h
- cjne a,#0f7h,bb10
- ljmp jj3
- bb10: mov a, 35h
- cjne a,#0efh,bbb9
- ljmp jj4
- bbb9: ljmp bbb
- jj0: mov a, 33h
- anl a, 44h
- cjne a,#00h, bb0
- mov a, 32h
- anl a, 43h
- cjne a,#00h, bb0
- ljmp bbb
- jj1: mov a, 33h
- anl a, 45h
- cjne a,#00h, bb1
- mov a, 32h
- anl a, 44h
- cjne a,#00h, bb1
- ljmp bbb
- jj2: mov a, 33h
- anl a, 46h
- cjne a,#00h, bb2
- mov a, 32h
- anl a, 45h
- cjne a,#00h, bb2
- ljmp bbb
- jj3: mov a, 33h
- anl a, 47h
- cjne a,#00h, bb3
- mov a, 32h
- anl a, 46h
- cjne a,#00h, bb3
- ljmp bbb
- jj4: mov a, 33h
- anl a, 48h
- cjne a,#00h, bb11
- mov a, 32h
- anl a, 47h
- cjne a,#00h, bb4
- ljmp bbb
- bb11: ljmp bb4
- bb0: mov 35h, #0feh
- mov a, 33h
- orl a, 43h
- mov 43h, a
- mov a, 32h
- orl a, 42h
- mov 42h, a
- mov a, 31h
- orl a, 41h
- mov 41h, a
- setb bt10
- call suiji
- call chuzhi
- ljmp bbb
- bb1: mov 35h, #0feh
- mov a, 33h
- orl a, 44h
- mov 44h, a
- mov a, 32h
- orl a, 43h
- mov 43h, a
- mov a, 31h
- orl a, 42h
- mov 42h, a
- call suiji
- call chuzhi
- ljmp bbb
- bb2: mov 35h, #0feh
- mov a, 33h
- orl a, 45h
- mov 45h, a
- mov a, 32h
- orl a, 44h
- mov 44h, a
- mov a, 31h
- orl a, 43h
- mov 43h, a
- call suiji
- call chuzhi
- ljmp bbb
- bb3: mov 35h, #0feh
- mov a, 33h
- orl a, 46h
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
单片机俄罗斯方块游戏设计大全(设计思路大全_程序大全).doc
(629.5 KB, 下载次数: 22)
|