|
发表于 2009-2-23 15:15:04
|
显示全部楼层
我用的是24M的晶振。。在CRT显示器上也能用,当时我买回来再来看这贴发现是24.1680M但我也把它做出来了,结果能显示。。。
另:我把程序删成这样了,这样也许能看懂些。。。下面这个程序还是能正常显示。。。
;======================================================;
; 俄罗斯方块游戏程序 ;
;======================================================;
;MCU: AT89C2051 ;
;OSC: 24MH ;
;VER: V1.1 ;
;DESIGN: Cowboy 2009/02 ;
;640*480@60Hz,这时行频是31.46875K,场频率是59.94Hz
;系统的主循环选用显示一帧的时间约16.66MS(60Hz),所有任务必须在这时间内处理完成.
;只有128字节内存,要储存一幅画面,显示缓存就需占大部分.主窗口内的面积越大,占用内存就越多.
;经估算窗口内用14行*8列比较合适.此时显示缓冲占用112字节.
;余下的16字节用于程序中的工作寄器5字节, 堆栈2字节,其它为全局量.
;======================================================;
;==============系统常数===============
Hsyn equ 01h
Vsyn equ 02h;分别表示Hsyn和Vsyn位
red equ 13h;00010011
green equ 0bh;00001011
blue equ 07h;00000111
yellow equ 1bh;00011011
lightblue equ 0fh;00001111
purple equ 17h;00010111
white equ 1Fh;00011111;分别表示要显示的颜色
blank equ 03h;00000011;不显示即颜色为空白
;============= 口线定义 ==============
dataP equ P2
;========================= 程序开始 =======================
org 0000h
;=================主循环====================== 0+2=2
Loop:
acall V_syn
acall Delay45
;================ 等待扫描到显示区 ================ 31+1=32
mov r6,#22 ;19
Wait: acall H_syn ;17
acall Delay45 ;62
djnz r6,Wait ;64
/*******************************
显示一行
********************************/
oneline:
acall H_syn ;17
mov dataP,#red
mov dataP,#blank
mov dataP,#yellow
mov dataP,#blank
mov dataP,#white
mov dataP,#blank
mov dataP,#purple
mov dataP,#blank
mov dataP,#lightblue
mov dataP,#blank
mov dataP,#green
mov dataP,#blank
mov dataP,#blue
mov dataP,#blank
mov dataP,#red
mov dataP,#blank
mov dataP,#yellow
mov dataP,#blank
mov dataP,#white
mov dataP,#blank
mov dataP,#purple
mov dataP,#blank
inc r6
cjne r6,#137,oneline
;---------------------
acall H_syn ;17
acall Delay46 ;62
mov r6,#0
;---------------------
;================================================= 476
oneline1:
acall H_syn ;17
mov dataP,#red
mov dataP,#blank
mov dataP,#yellow
mov dataP,#blank
mov dataP,#white
mov dataP,#blank
mov dataP,#purple
mov dataP,#blank
mov dataP,#lightblue
mov dataP,#blank
mov dataP,#green
mov dataP,#blank
mov dataP,#blue
mov dataP,#blank
mov dataP,#red
mov dataP,#blank
mov dataP,#yellow
mov dataP,#blank
mov dataP,#white
mov dataP,#blank
mov dataP,#purple
mov dataP,#blank
inc r6
cjne r6,#137,oneline1
acall H_syn ;17
acall delay40
acall H_syn ;17
acall Delay60
;============ 所有处理已完成,等待下一帧开始 =========
Done: ajmp loop
;================= 行同步 ======================
H_syn: mov dataP,#Hsyn ;2 ;(2+13+2)=17T
nop
nop
nop
nop
mov dataP,#(Hsyn or Vsyn) ;11
ret
;================= 场同步 ======================
V_syn: mov dataP,#0;2
nop
nop
nop
nop
mov dataP,#Vsyn ;11
nop
nop
ret ;13
;==================== 延时程序 ======================
Delay69:nop
Delay68:nop
Delay67:nop
Delay66:nop
Delay65:nop
Delay64:nop
Delay63:nop
Delay62:nop
Delay61:nop
Delay60:nop
Delay59:nop
Delay58:nop
Delay57:nop
Delay56:nop
Delay55:nop
Delay54:nop
Delay53:nop
Delay52:nop
Delay51:nop
Delay50:nop
Delay49:nop
Delay48:nop
Delay47:nop
Delay46:nop
Delay45:nop
Delay44:nop
Delay43:nop
Delay42:nop
Delay41:nop
Delay40:nop
Delay39:nop
Delay38:nop
Delay37:nop
Delay36:nop
Delay35:nop
Delay34:nop
Delay33:nop
Delay32:nop
Delay31:nop
Delay30:nop
Delay29:nop
Delay28:nop
Delay27:nop
Delay26:nop
Delay25:nop
Delay24:nop
Delay23:nop
Delay22:nop
Delay21:nop
Delay20:nop
Delay19:nop
Delay18:nop
Delay17:nop
Delay16:nop
Delay15:nop
Delay14:nop
Delay13:nop
Delay12:nop
Delay11:nop
Delay10:nop
Delay09:nop
Delay08:nop
Delay07:nop
Delay06:nop
Delay05:nop
Delay04:ret
;==================== 程序结束 ======================
end |
|