|
我不懂C,玩过51,还有PIC,一直都是用汇编,当然程序都不是很大。近来玩AVR的128,得到块5.7寸液晶屏,是RA8835AP控制芯片,内带32KRAM,用汇编写了个测试程序,可怎么也行,请高手指点!程序如下:
*******
;AVR汇编程序实例
;sed1335 320*240 Atmega128 显示‘液’字!
;********************************************************
.include "m128def.inc" ;引用器件I/O配置文件
;定义程序中使用的变量名(在寄存器空间)
.def temp = r23 ;临时变量
.def temp1 = r24 ;临时变量
;中断向量区定义,flash空间$0000-$0045
.org $0000
jmp reset ;复位处理
;程序开始
.org $0046
reset:
ldi r16,high(RAMEND) ;设置堆栈指针高位
out sph,r16
ldi r16,low(RAMEND) ;设置堆栈指针低位
out spl,r16
ser temp
out ddra,temp ;设置PORTA为输出,段码输出
out ddrc,temp ;设置PORTC为输出,位码控制
sbi $02,2 ; 设E口第二位为输出
ldi temp,0x80
out mcucr,temp
MAIN:
rcall begin
rcall display
rjmp main
begin:
cbi $15,7 ;LED-CS
cbi $03,2 ;开灯
ldi temp,0x40 ;初始化设置
sts 0x1101,temp
rcall delay
clr temp1
begin1:
clr r0
ldi zl,low(tab1*2)
ldi zh,high(tab1*2)
add zl,temp1
adc zh,r0
lpm
sts 0x1100,r0
rcall delay
inc temp1
cpi temp1,0x09
brne begin1
clr temp1
ldi temp,0x44 ;显示域设置
sts 0x1101,temp
rcall delay
begin2:
clr r0
ldi zl,low(tab2*2)
ldi zh,high(tab2*2)
add zl,temp1
adc zh,r0
lpm
sts 0x1100,r0
rcall delay
inc temp1
cpi temp1,0x0b
brne begin2
begin3:
ldi temp,0x5a ;点位移动设置
sts 0x1101,temp
rcall delay
ldi temp,0x00
sts 0x1100,temp
rcall delay
ldi temp,0x5b ;显示合成设置
sts 0x1101,temp
rcall delay
ldi temp,0x00
sts 0x1100,temp
rcall delay
ldi temp,0x59 ;显示状态设置
sts 0x1101,temp
rcall delay
ldi temp,0x04
sts 0x1100,temp
rcall delay
ldi temp,0x46 ;设置光标地址
sts 0x1101,temp
rcall delay
ldi temp,0x00
sts 0x1100,temp
rcall delay
ldi temp,0x4c ;光标移动方向设置
sts 0x1101,temp
rcall delay
ret
display:
clr r16
clr r17
ldi temp,0x47 ;读出光标地址
sts 0x1101,temp
rcall delay
lds r16,0x1101
rcall delay
lds r17,0x1101
rcall delay
ldi temp,0x4f ;光标移动方向设置
sts 0x1101,temp
rcall delay
ldi temp,0x42 ;显示数据写入
sts 0x1100,temp
rcall delay
play1:
clr r0
ldi zl,low(hanzi*2)
ldi zh,high(hanzi*2)
add zl,temp1
adc zh,r0
lpm
sts 0x1100,r0
rcall delay
inc temp1
inc temp1
cpi temp1,0x20
brne play1
ldi temp,0x46 ;光标移动方向设置
sts 0x1101,temp
rcall delay
ldi temp,0x08
add temp,r17
sts 0x1101,temp
rcall delay
ldi temp,0x42 ;显示数据写入
sts 0x1101,temp
rcall delay
ldi temp1,0x01
play2:
clr r0
ldi zl,low(hanzi*2)
ldi zh,high(hanzi*2)
add zl,temp1
adc zh,r0
lpm
sts 0x1100,r0
rcall delay
inc temp1
inc temp1
cpi temp1,0x21
brne play2
ret
delay:
ldi temp,$ff
dela:
nop
nop
nop
nop
nop
dec temp
brne dela
ret
.CSEG
tab1:
.db 0x30,0x87,0x07,0x27,0x32,0xef,0x28,0x00
.CSEG
tab2:
.db 0x00,0x00,0xf0,0xb0,0x04,0xf0,0x30,0x2a,0xe0,0x2e
.CSEG
hanzi:
.db 0x00,0x80,0x40,0x44,0x37,0xfe,0x10,0x20,0x81,0x20,0x61,0x3c,0x22,0x44,0x0a,0x64
.db 0x16,0x98,0x2b,0x48,0xe2,0x50,0x22,0x20,0x22,0x50,0x22,0x8e,0x23,0x04,0x22,0x00;液
以下蓝色文字由站长:armok 于:2010-08-27,20:51:29 加入。 你的原标题:“<font color=black>近来很痛苦!” 不合符规定。请更改成能说明帖子大意的标题
试想一下,如果本论坛的帖子标题清一色的‘帮助!’,‘ADC求救!’等笼统的标题,你在阅读的过程中会造成许多麻烦。
所以本论坛规定:一定要起一个能说明帖子大意的标题。不允许“关于 AVR 的 ADC 使用!”这种笼统标题。作为标题,必须说明清楚:
①你是在请教问题,还是在介绍有关的知识?
②ADC的问题有许多,你是想说那方面的内容?
注意以上两点,标题应该改成如:“请教:ADC 可以不使用中断吗?”。
起一个能说明帖子大意的标题,除了减轻我们的帖子分类整理工作,还方便其它人阅读,节省大家的时间。
注:使用合格的标题,对你来说只是举手之劳,但却会为我们的管理工作提供很大的便利。谢谢你的支持。
![](http://./bbs_upload/files_6/armok01122228.gif) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|