来点另类的
刚学51不久,汇编这几天才开始。下面来个练手的。开始用C写的,就这么两行字居然占了400字节,看来C编小程序没有优势呀!昨天用汇编写了一个,200多字节,想着想着还是不爽,今天琢磨着优化了一下,一开始是126字节,接着124、123,最后115了。实在是压榨不了它了,哪位高手来支支招,看还能缩减不?附上最终的源程序:
EN BIT P1.2
RW BIT P1.1
RS BIT P1.0
ORG 0000H
LJMPSTART
START: MOV SP,#60H
LCDINT: CLR RW;没有读这一操作,所以读写标志位常设为写
CLR RS ;写指令
MOV A,#01H ;清屏
ACALL WRBYT
LOOP: CLR RS ;写指令
MOV A,#38H ;8位总线方式,双行5*7点阵字符
ACALL WRBYT
MOV A,#06H ;设置文字不移动
ACALL WRBYT
MOV A,#0CH ;开显示,无光标,不闪烁
ACALL WRBYT ;
MOV A,#80H ;写第一行起始地址
ACALL WRBYT
SETBRS ;写数据
MOV DPTR,#CHR1;调第一行字符串首地址
LCALL WRITE
CLR RS;写指令
MOV A,#0C0H ;第二行起始地址
ACALL WRBYT
SETBRS;写数据
MOV DPTR,#CHR2;调第二行字符串首地址
LCALL WRITE
LJMPLOOP
WRITE: MOV R3,#16
WCHAR: MOV A,#0
MOVC A,@A+DPTR;调对应位置字符内容
ACALL WRBYT;把调用的字符写入LCD
INC DPTR;字符地址加1
DJNZR3,WCHAR ;如果这一行没有写完,返回到WRCHR继续写。
RET
WRBYT: LCALL DELLAY
MOV P0,A
SETBEN
CLR EN
RET
DELLAY: MOV R4,#20
DJNZR4,$
RET
CHR1: DB " Hi! welcome to "
CHR2: DB "www.shoudian.org"
END 牛X,哈哈 把能缩减的都缩减了,读忙操作砍掉,延时也尽量缩短,这样在复位的时候基本看不到屏幕的闪烁。
下一步,让它动起来! 我很想搞个1802显示屏玩玩 原帖由 发烧友 于 2009-3-13 20:51 发表 http://www.shoudian.org/images/common/back.gif
我很想搞个1802显示屏玩玩
你可以拿你的透镜手电和我换 看看 这是源程序吧,编译后体积会变化的啊! 又见牛人。 原帖由 djliubo 于 2009-3-14 10:19 发表 http://www.shoudian.org/images/common/back.gif
这是源程序吧,编译后体积会变化的啊!
我说的当然是指编译后的了。
页:
[1]