搜索
bottom↓
回复: 11

HD61202/3 128×64液晶模块汇编程序

[复制链接]

出0入0汤圆

发表于 2005-5-20 23:54:02 | 显示全部楼层 |阅读模式
;********************************************************************

;*

;* 子程序名:        LCDM(HD128×64).asm

;* 程序名称:        128×64液晶显示模块(HD61202/3芯片)子程序

;* 版本:            1.0

;* 适用 MCU 型号:   ATmega16 (适用 AVR 所有型号)

;* 入口条件:        

;* 出口条件:        

;* 使用资源:        

;*

;* 程序功能:        

;*   本程序是

;* 注释:            

;*   本程序是

;*

;* 编作者:         

;* 编作者 E-Mail:   PTZSW@163.COM

;* 编制日期:        2004年12月18日

;*                  

;********************************************************************

;*

;* 指令条数:        0 + return

;* 指令执行周期:    0 + return

;* 低位寄存器使用:  None

;* 高位寄存器使用:  None

;* 指针寄存器使用:  None

;* 状态寄存器使用:  None

;*

;********************************************************************





;******** 本程序包括的定义文件:

.include   "LCDM(HD128×64)def.inc"  ;寄存器变量和常数定义





;******** 程序指令代码清单:

;LCDM_OpenBL----------------“打开背景灯子程序”

;LCDM_CloseBL---------------“关闭背景灯子程序”

;LCDM_RESET-----------------“液晶模块复位子程序”

;LCDM_OPENSCN---------------“初始化液晶模块和打开显示子程序”

;LCDM_CLOSESCN--------------“关闭显示子程序”

;LCDM_SetupSLine------------“设置显示开始行子程序”

;LCDM_SetupYAddr------------“设置Y地址子程序”

;LCDM_SetupPageNum----------“设置写入数据页数子程序”

;LCDM_WRPageNum-------------“计算单个字符写入的页数值子程序”

;LCDM_WRRNCNTNum------------“计算单列写入字符的次数子程序”

;LCDM_LWriteSWord-----------“行方式写单个字符子程序”

;LCDM_RWriteSWord-----------“列方式写单个字符子程序”

;LCDM_LWriteSData-----------“行方式写单个数据“XX”子程序”

;LCDM_ClearSCN--------------“清除全屏幕子程序”

;LCDM_FLWriteWord-----------“整行方式写入字符子程序”

;

;

;TDELAY1000ms---------------“延时1000ms子程序”

;TDELAY500ms----------------“延时500ms子程序”

;TDELAY50ms-----------------“延时50ms子程序”

;TDELAY10us-----------------“延时10us子程序”

;TDELAY2us------------------“延时2us子程序”







;**************** 打开背景灯子程序 - “LCDM_OpenBL”

LCDM_OpenBL:

    sbi BLCtrlPORT,BLCtrlPINNum       ;定义背景灯控制引脚为输出端

    nop                               ;空操作,用于稳定输出状态

    sbi BLCtrlPIN,BLCtrlPINNum        ;打开背景灯

    nop                               ;空操作,用于稳定输出状态

    ret                               ;子程序返回



;**************** 关闭背景灯子程序 - “LCDM_CloseBL”

LCDM_CloseBL:

    sbi BLCtrlPORT,BLCtrlPINNum       ;定义背景灯控制引脚为输出端

    nop                               ;空操作,用于稳定输出状态

    cbi BLCtrlPIN,BLCtrlPINNum        ;关闭背景灯

    nop                               ;空操作,用于稳定输出状态

    ret                               ;子程序返回



;**************** 液晶模块复位子程序 - “LCDM_RESET”

LCDM_RESET:

    push ADDER                        ;压入寄存器中的数值到堆栈

    ldi ADDER,0                       ;清除复位信号控制引脚,

    out LCDM_RST_PORT,ADDER           ;端口的输入/输出方向状态

    sbi LCDM_RST_PORT,LCDM_RST_PINNum ;定义复位信号控制引脚为输出端

    cbi LCDM_RST_PIN,LCDM_RST_PINNum  ;置复位信号为低电平

    rcall TDELAY50ms                  ;延时50ms

    sbi LCDM_RST_PIN,LCDM_RST_PINNum  ;置复位信号为高电平

    rcall TDELAY50ms                  ;延时50ms

    pop ADDER                         ;弹出堆栈中的数值到寄存器

    ret                               ;子程序返回



;**************** 初始化液晶模块和打开显示子程序 - “LCDM_OPENSCN”

LCDM_OPENSCN:

    push ADDER                        ;压入寄存器中的数值到堆栈

;*** 初始化液晶模块的各个控制引脚

    sbi LCDM_CS1_PORT,LCDM_CS1_PINNum ;定义片选1控制引脚为输出端

    sbi LCDM_CS2_PORT,LCDM_CS2_PINNum ;定义片选2控制引脚为输出端

    sbi LCDM_DI_PORT,LCDM_DI_PINNum   ;定义寄存器选择控制引脚为输出端

    sbi LCDM_RW_PORT,LCDM_RW_PINNum   ;定义读/写选择控制引脚为输出端

    sbi LCDM_EN_PORT,LCDM_EN_PINNum   ;定义使能信号控制引脚为输出端

    ser ADDER                         ;定义数据端口为输出端

    out LCDM_DATA_PORT,ADDER

;*** 打开液晶模块显示

    cbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为L

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    sbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为H

    ldi ADDER,LCDM_ON_Display         ;置打开液晶的控制指令字,

    out LCDM_DATA_PIN,ADDER      ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;取消片选1

    sbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;置片选2为H

    ldi ADDER,LCDM_ON_Display         ;置打开液晶的控制指令字,

    out LCDM_DATA_PIN,ADDER      ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;取消片选2

;*** 此段程序用于设置显示开始行为第一行

    cbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为L

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    sbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为H

    ldi ADDER,LCDM_FSLineCINS         ;置片1开始显示行控制指令字,

    out LCDM_DATA_PIN,ADDER           ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为L

    sbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;置片选2为H

    ldi ADDER,LCDM_FSLineCINS         ;置片2开始显示行控制指令字,

    out LCDM_DATA_PIN,ADDER           ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;片选2为L

;***

    pop ADDER                         ;弹出堆栈中的数值到寄存器

    ret                               ;子程序返回



;**************** 关闭显示子程序 - “LCDM_CLOSESCN”

LCDM_CLOSESCN:

    push ADDER                        ;压入寄存器中的数值到堆栈

;*** 初始化液晶模块的各个控制引脚

    sbi LCDM_CS1_PORT,LCDM_CS1_PINNum ;定义片选1控制引脚为输出端

    sbi LCDM_CS2_PORT,LCDM_CS2_PINNum ;定义片选2控制引脚为输出端

    sbi LCDM_DI_PORT,LCDM_DI_PINNum   ;定义寄存器选择控制引脚为输出端

    sbi LCDM_RW_PORT,LCDM_RW_PINNum   ;定义读/写选择控制引脚为输出端

    sbi LCDM_EN_PORT,LCDM_EN_PINNum   ;定义使能信号控制引脚为输出端

    ser ADDER                         ;定义数据端口为输出端

    out LCDM_DATA_PORT,ADDER

;*** 关闭液晶模块显示

    cbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为L

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    sbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为H

    ldi ADDER,LCDM_OFF_Display        ;置关闭液晶的控制指令字,

    out LCDM_DATA_PIN,ADDER      ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;取消片选1

    sbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;置片选2为H

    ldi ADDER,LCDM_OFF_Display        ;置关闭液晶的控制指令字,

    out LCDM_DATA_PIN,ADDER      ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;取消片选2

    pop ADDER                         ;弹出堆栈中的数值到寄存器

    ret                               ;子程序返回



;**************** 设置显示开始行子程序 - “LCDM_SetupSLine”

;入口条件:

;  在调用此子程序前,需要设置下面这个存储 SRAM 中的数值:

;      LCDM_SLineAddr ----- 液晶模块中的显示开始行地址数。

LCDM_SetupSLine:

    push ADDER                        ;压入寄存器中的数值到堆栈

;*** 初始化液晶模块的各个控制引脚

    sbi LCDM_CS1_PORT,LCDM_CS1_PINNum ;定义片选1控制引脚为输出端

    sbi LCDM_CS2_PORT,LCDM_CS2_PINNum ;定义片选2控制引脚为输出端

    sbi LCDM_DI_PORT,LCDM_DI_PINNum   ;定义寄存器选择控制引脚为输出端

    sbi LCDM_RW_PORT,LCDM_RW_PINNum   ;定义读/写选择控制引脚为输出端

    sbi LCDM_EN_PORT,LCDM_EN_PINNum   ;定义使能信号控制引脚为输出端

    ser ADDER                         ;定义数据端口为输出端

    out LCDM_DATA_PORT,ADDER

;*** 设置显示开始行

    cbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为L

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    sbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为H

    cbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为L

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    lds ADDER,LCDM_SLineAddr          ;置片1开始显示行数,

    out LCDM_DATA_PIN,ADDER           ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为L

    sbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;置片选2为H

    lds ADDER,LCDM_SLineAddr          ;置片1开始显示行数,

    out LCDM_DATA_PIN,ADDER           ;输出到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    nop                               ;空操作,用于稳定输出状态

    cbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;片选2为L

;***

    pop ADDER                         ;弹出堆栈中的数值到寄存器

    ret                               ;子程序返回



;**************** 设置Y地址子程序 - “LCDM_SetupYAddr”

;入口条件:

;  在调用此子程序前,需要设置下面这个存储 SRAM 中的数值:

;      LCDM_YAddrNum ----- 液晶模块中显示RAM数据的Y地址数。

LCDM_SetupYAddr:

    cbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为L

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    lds ADDER,LCDM_YAddrNum           ;取存储器中显示数据的Y地址数

    out LCDM_DATA_PIN,ADDER           ;输出Y地址数到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    ret                               ;子程序返回



;**************** 设置写入数据页数子程序 - “LCDM_SetupPageNum”

;入口条件:

;  在调用此子程序前,需要设置下面这个存储 SRAM 中的数值:

;      LCDM_PageNum ----- 写入数据到液晶模块中的RAM页数字。

LCDM_SetupPageNum:

    cbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为L

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    lds ADDER,LCDM_PageNum            ;取存储器中写入数据的页数

    out LCDM_DATA_PIN,ADDER           ;输出写入数据的页数到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;使能信号为L

    ret                               ;子程序返回



;**************** 计算单个字符写入的页数值子程序 - “LCDM_WRPageNum”

;入口条件:

;  在调用此子程序前,需要设置下面这个存储 SRAM 中的数值:

;      CHAR_LDotNum ------------- 单个字符数据行点阵数。

LCDM_WRPageNum:

    push ADDER                        ;压入寄存器中的数值到堆栈

    lds REGISTER_A,CHAR_LDotNum       ;取单个字符数据行点阵数

    clr ADDER                         ;清单个字符写入的页数值

    sts CHAR_NPageNum,ADDER

LCDM_WRPageNum1:

    lds ADDER,CHAR_NPageNum           ;取存储器中单个字符写入的页数值

    inc ADDER                         ;单个字符写入的页数值加1

    sts CHAR_NPageNum,ADDER           ;结果送回到存储器中

    ldi ADDER,LCDM_SLMaxDotNum        ;取液晶每列中可显示的最大行点阵数

    cp REGISTER_A,ADDER               ;比较字符行点阵数和最大行点阵数大小

    brlo LCDM_WRPageNum2              ;小于则转到结束

    sub REGISTER_A,ADDER              ;单个字符行点阵数减最大行点阵数

    brne LCDM_WRPageNum1              ;两者不相等,则继续

LCDM_WRPageNum2:

    pop ADDER                         ;弹出堆栈中的数值到寄存器

    ret                               ;子程序返回



;**************** 计算单列写入字符的次数子程序 - “LCDM_WRRNCNTNum”

;入口条件:

;  在调用此子程序前,需要设置下面这个存储 SRAM 中的数值:

;      CHAR_RDotNum ------------- 单个字符数据列点阵数。

LCDM_WRRNCNTNum:

    push ADDER                        ;压入寄存器中的数值到堆栈

    ldi REGISTER_A,LCDM_SRMaxDotNum   ;取液晶每行中可显示的最大列点阵数

    clr ADDER                         ;清单列写入字符的次数值

    sts CHAR_RNCNTNum,ADDER

LCDM_WRRNCNTNum1:

    lds ADDER,CHAR_RNCNTNum           ;取存储器中单列写入字符的次数值

    inc ADDER                         ;单列写入字符的次数值加1

    sts CHAR_RNCNTNum,ADDER           ;结果送回到存储器中

    lds ADDER,CHAR_RDotNum            ;取单个字符数据列点阵数

    cp REGISTER_A,ADDER               ;比较字符列点阵数和最大列点阵数大小

    brlo LCDM_WRRNCNTNum2             ;小于则转到结束

    sub REGISTER_A,ADDER              ;最大列点阵数减单个字符列点阵数

    brne LCDM_WRRNCNTNum1             ;两者不相等,则继续

LCDM_WRRNCNTNum2:

    pop ADDER                         ;弹出堆栈中的数值到寄存器

    ret                               ;子程序返回



;**************** 行方式写单个字符子程序 - “LCDM_LWriteSWord”

;入口条件:

;  在调用此子程序前,需设置下列存储器中的数值和数据地址指针:

;      ZL(r30) ------------------- 指向显示字符数据地址的Z指针低字节

;      ZH(r31) ------------------- 指向显示字符数据地址的Z指针高字节

;      CHAR_RDotNum -------------- 单个字符数据列点阵数

;      LCDM_YAddrNum ------------- 液晶中的显示数据的Y地址数

;      LCDM_PageNum -------------- 液晶中的显示数据页数

;  可使用如下面指令来设置显示字符数据地址的低和高字节:

;      ldi ZL,low(显示字符数据表的标号*2)

;      ldi ZH,high(显示字符数据表的标号*2)

;注意:

;    在本程序运行完之后地址指针Z指针,将指向本字符数据存放地址的

;下一个地址(即下一个字符数据的第一个存放地址)。此地址指针Z指针

;所用的寄存器对(r30:r31)没有进行堆栈保护,程序运行完之后这对寄存

;器对(r30:r31)中的数值将以改变后的内容返回调用程序。

;    在本程序运行完之后液晶中的显示数据页数(LCDM_PageNum)将返回为

;调用前的原始数值。

;    在本程序运行完之后液晶中的显示数据的Y地址数(LCDM_YAddrNum)

;将改变后的内容返回调用程序。

LCDM_LWriteSWord:

    lds ADDER,CHAR_NPageNum           ;取单个字符写入的页数值,

    sts CycleCounter1,ADDER         ;存储此数值到循环计数器1中

LCDM_LWriteSWord1:

    rcall LCDM_SetupYAddr             ;设置字符的Y地址数

    rcall LCDM_SetupPageNum           ;设置字符的显示页数

    sbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为H

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    lds ADDER,CHAR_RDotNum            ;取字符的列点阵数值,

    sts CycleCounter2,ADDER         ;存储此数值到循环计数器2中

LCDM_LWriteSWord2:

    lpm ADDER,Z+                      ;读Z指针的字符数据到寄存器中,

                                      ;然后Z指针加1

    out LCDM_DATA_PIN,ADDER

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为L

    lds ADDER,CycleCounter2           ;取循环计数器2数值

    dec ADDER                         ;循环计数器2减1

    sts CycleCounter2,ADDER           ;结果送回到存储器中

    brne LCDM_LWriteSWord2            ;本页字符所有列点阵写完否?

    lds ADDER,LCDM_PageNum            ;取字符显示页数值

    inc ADDER                         ;字符显示页数加1

    sts LCDM_PageNum,ADDER            ;结果送回到存储器中

    lds ADDER,CycleCounter1           ;取循环计数器1数值

    dec ADDER                         ;循环计数器1减1

    sts CycleCounter1,ADDER           ;结果送回到存储器中

    brne LCDM_LWriteSWord1            ;本字符所有页数写完否?

    lds REGISTER_A,CHAR_NPageNum      ;取单个字符写入的页数值

    lds ADDER,LCDM_PageNum            ;取字符显示页数值

    sub ADDER,REGISTER_A              ;字符显示页数减写入的页数值

    sts LCDM_PageNum,ADDER            ;结果送回到存储器中

    lds REGISTER_A,CHAR_RDotNum       ;取单个字符的列点阵数

    lds ADDER,LCDM_YAddrNum           ;取单个字符的Y地址数

    add ADDER,REGISTER_A              ;字符的Y地址数加列点阵数

    sts LCDM_YAddrNum,ADDER           ;结果送回到存储器中

    ret                               ;子程序返回



;**************** 列方式写单个字符子程序 - “LCDM_RWriteSWord”

;入口条件:

;  在调用此子程序前,需设置下列存储器中的数值和数据地址指针:

;      ZL(r30) ------------------- 指向显示字符数据地址的Z指针低字节

;      ZH(r31) ------------------- 指向显示字符数据地址的Z指针高字节

;      CHAR_RDotNum -------------- 单个字符数据列点阵数

;      LCDM_YAddrNum ------------- 液晶中的显示数据的Y地址数

;      LCDM_PageNum -------------- 液晶中的显示数据页数

;  可使用如下面指令来设置显示字符数据地址的低和高字节:

;      ldi ZL,low(显示字符数据表的标号*2)

;      ldi ZH,high(显示字符数据表的标号*2)

;注意:

;    在本程序运行完之后地址指针Z指针,将指向本字符数据存放地址的

;下一个地址(即下一个字符数据的第一个存放地址)。此地址指针Z指针

;所用的寄存器对(r30:r31)没有进行堆栈保护,程序运行完之后这对寄存

;器对(r30:r31)中的数值将以改变后的内容返回调用程序。

;    在本程序运行完之后液晶中的显示数据页数(LCDM_PageNum)将以改变

;后的内容返回调用程序。

;    在本程序运行完之后液晶中的显示数据的Y地址数(LCDM_YAddrNum)

;将返回为调用前的原始数值。

LCDM_RWriteSWord:

    lds ADDER,CHAR_NPageNum           ;取单个字符写入的页数值,

    sts CycleCounter1,ADDER         ;存储此数值到循环计数器1中

LCDM_RWriteSWord1:

    rcall LCDM_SetupYAddr             ;设置字符的Y地址数

    rcall LCDM_SetupPageNum           ;设置字符的显示页数

    sbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为H

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    lds ADDER,CHAR_RDotNum            ;取字符的列点阵数值,

    sts CycleCounter2,ADDER         ;存储此数值到循环计数器2中

LCDM_RWriteSWord2:

    lpm ADDER,Z+                      ;读Z指针的字符数据到寄存器中,

                                      ;然后Z指针加1

    out LCDM_DATA_PIN,ADDER

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为L

    lds ADDER,CycleCounter2           ;取循环计数器2数值

    dec ADDER                         ;循环计数器2减1

    sts CycleCounter2,ADDER           ;结果送回到存储器中

    brne LCDM_RWriteSWord2            ;本页字符所有列点阵写完否?

    lds ADDER,LCDM_PageNum            ;取字符显示页数值

    inc ADDER                         ;字符显示页数加1

    sts LCDM_PageNum,ADDER            ;结果送回到存储器中

    lds ADDER,CycleCounter1           ;取循环计数器1数值

    dec ADDER                         ;循环计数器1减1

    sts CycleCounter1,ADDER           ;结果送回到存储器中

    brne LCDM_RWriteSWord1            ;本字符所有页数写完否?

    ret                               ;子程序返回



;**************** 行方式写单个数据“XX”子程序 - “LCDM_LWriteSData”

;入口条件:

;  在调用此子程序前,需设置下列存储器中的数值和数据地址指针:

;      ZL(r30) ------------------- 指向显示字符数据地址的Z指针低字节

;      ZH(r31) ------------------- 指向显示字符数据地址的Z指针高字节

;      CHAR_RDotNum -------------- 单个字符数据列点阵数

;      LCDM_YAddrNum ------------- 液晶中的显示数据的Y地址数

;      LCDM_PageNum -------------- 液晶中的显示数据页数

;      CHAR_SWordData ------------ 写入单个数据“XX”的数值

;  可使用如下面指令来设置显示字符数据地址的低和高字节:

;      ldi ZL,low(显示字符数据表的标号*2)

;      ldi ZH,high(显示字符数据表的标号*2)

;注意:

;    在本程序运行完之后地址指针Z指针,将指向本字符数据存放地址的

;下一个地址(即下一个字符数据的第一个存放地址)。此地址指针Z指针

;所用的寄存器对(r30:r31)没有进行堆栈保护,程序运行完之后这对寄存

;器对(r30:r31)中的数值将以改变后的内容返回调用程序。

;    在本程序运行完之后液晶中的显示数据页数(LCDM_PageNum)将返回为

;调用前的原始数值。

;    在本程序运行完之后液晶中的显示数据的Y地址数(LCDM_YAddrNum)

;将改变后的内容返回调用程序。

LCDM_LWriteSData:

    lds ADDER,CHAR_NPageNum           ;取单个字符写入的页数值,

    sts CycleCounter1,ADDER         ;存储此数值到循环计数器1中

LCDM_LWriteSData1:

    rcall LCDM_SetupYAddr             ;设置字符的Y地址数

    rcall LCDM_SetupPageNum           ;设置字符的显示页数

    sbi LCDM_DI_PIN,LCDM_DI_PINNum    ;置寄存器选择为H

    cbi LCDM_RW_PIN,LCDM_RW_PINNum    ;置读/写选择为L

    lds ADDER,CHAR_RDotNum            ;取字符的列点阵数值,

    sts CycleCounter2,ADDER         ;存储此数值到循环计数器2中

LCDM_LWriteSData2:

    lds ADDER,CHAR_SWordData          ;写单个数据“XX”到寄存器中,

    out LCDM_DATA_PIN,ADDER           ;输出数据“XX”到数据端口

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为L

    rcall TDELAY2us                   ;延时2us

    sbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为H

    rcall TDELAY2us                   ;延时2us

    cbi LCDM_EN_PIN,LCDM_EN_PINNum    ;置使能信号为L

    lds ADDER,CycleCounter2           ;取循环计数器2数值

    dec ADDER                         ;循环计数器2减1

    sts CycleCounter2,ADDER           ;结果送回到存储器中

    brne LCDM_LWriteSData2            ;本页字符所有列点阵写完否?

    lds ADDER,LCDM_PageNum            ;取字符显示页数值

    inc ADDER                         ;字符显示页数加1

    sts LCDM_PageNum,ADDER            ;结果送回到存储器中

    lds ADDER,CycleCounter1           ;取循环计数器1数值

    dec ADDER                         ;循环计数器1减1

    sts CycleCounter1,ADDER           ;结果送回到存储器中

    brne LCDM_LWriteSData1            ;本字符所有页数写完否?

    lds REGISTER_A,CHAR_NPageNum      ;取单个字符写入的页数值

    lds ADDER,LCDM_PageNum            ;取字符显示页数值

    sub ADDER,REGISTER_A              ;字符显示页数减写入的页数值

    sts LCDM_PageNum,ADDER            ;结果送回到存储器中

    lds REGISTER_A,CHAR_RDotNum       ;取单个字符的列点阵数

    lds ADDER,LCDM_YAddrNum           ;取单个字符的Y地址数

    add ADDER,REGISTER_A              ;字符的Y地址数加列点阵数

    sts LCDM_YAddrNum,ADDER           ;结果送回到存储器中

    ret                               ;子程序返回



;**************** 整行方式写入字符子程序 - “LCDM_FLWriteWord”

;入口条件:

;  在调用此子程序前,需设置下列存储器中的数值和数据地址指针:

;      ZL(r30) ------------------- 指向显示字符数据地址的Z指针低字节

;      ZH(r31) ------------------- 指向显示字符数据地址的Z指针高字节

;      LCDM_PageNum -------------- 液晶中的显示数据页数

;      LCDM_YAddrNum ------------- 液晶中的显示数据的Y地址数

;      CHAR_RNCNTNum ------------- 单列需写入字符的次数值

;  可使用如下面指令来设置显示字符数据地址的低和高字节:

;      ldi ZL,low(显示字符数据表的标号*2)

;      ldi ZH,high(显示字符数据表的标号*2)

;注意:

;    在本程序运行完之后地址指针Z指针,将指向本字符数据存放地址的

;下一个地址(即下一个字符数据的第一个存放地址)。此地址指针Z指针

;所用的寄存器对(r30:r31)没有进行堆栈保护,程序运行完之后这对寄存

;器对(r30:r31)中的数值将以改变后的内容返回调用程序。

;    在本程序运行完之后液晶中的显示数据页数(LCDM_PageNum)将返回为

;调用前的原始数值。

;    在本程序运行完之后液晶中的显示数据的Y地址数(LCDM_YAddrNum)

;将改变后的内容返回调用程序。



LCDM_FLWriteWord:

    sbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为H

    lds ADDER,CHAR_RNCNTNum           ;置单列写入字符的次数值,

    sts CycleCounter6,ADDER           ;为循环计数器6的初值

LCDM_FLWriteWord1:

    call LCDM_LWriteSWord             ;写入单个字符

    lds ADDER,CycleCounter6           ;取存储器中循环计数器6的数值,

    dec ADDER                         ;循环计数器6减1,

    sts CycleCounter6,ADDER           ;结果送回到存储器中

    brne LCDM_FLWriteWord1            ;循环计数器6计数完否?

    cbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;取消片选1

    ldi ADDER,LCDM_FYAddrCINS         ;显示数据的Y地址为1

    sts LCDM_YAddrNum,ADDER

    sbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;置片选2为H

    lds ADDER,CHAR_RNCNTNum           ;置单列写入字符的次数值,

    sts CycleCounter6,ADDER           ;为循环计数器6的初值

LCDM_FLWriteWord2:

    call LCDM_LWriteSWord             ;写入单个字符

    lds ADDER,CycleCounter6           ;取存储器中循环计数器6的数值,

    dec ADDER                         ;循环计数器6减1,

    sts CycleCounter6,ADDER           ;结果送回到存储器中

    brne LCDM_FLWriteWord2            ;循环计数器6计数完否?

    cbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;取消片选2

    ret                               ;子程序返回





;**************** 清除全屏幕子程序 - “LCDM_ClearSCN”

LCDM_ClearSCN:

    ldi ADDER,8                       ;置单个数据行点阵数

    sts CHAR_LDotNum,ADDER

    ldi ADDER,8                       ;置单个数据列点阵数

    sts CHAR_RDotNum,ADDER

    call LCDM_WRPageNum               ;计算单个数据需写入的页数值

    call LCDM_WRRNCNTNum              ;计算单列写入字符的次数值

    ldi ADDER,LCDM_FPageCINS          ;置显示数据为第1页

    sts LCDM_PageNum,ADDER

    ldi ADDER,LCDM_FYAddrCINS         ;显示数据的Y地址为1

    sts LCDM_YAddrNum,ADDER

    ldi ADDER,0x00                    ;写入的数据“XX”值为“00”

    sts CHAR_SWordData,ADDER

    ldi ADDER,8                       ;置显示最大页数,

    sts CycleCounter5,ADDER           ;为循环计数器5的初值

LCDM_ClearSCN1:

    ldi ADDER,LCDM_FYAddrCINS         ;显示数据的Y地址为1

    sts LCDM_YAddrNum,ADDER

    sbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;置片选1为H

    lds ADDER,CHAR_RNCNTNum           ;置单列写入字符的次数值,

    sts CycleCounter6,ADDER           ;为循环计数器6的初值

LCDM_ClearSCN2:

    call LCDM_LWriteSData             ;写入单个数据“00”

    lds ADDER,CycleCounter6           ;取存储器中循环计数器6的数值,

    dec ADDER                         ;循环计数器6减1,

    sts CycleCounter6,ADDER           ;结果送回到存储器中

    brne LCDM_ClearSCN2               ;循环计数器6计数完否?

    cbi LCDM_CS1_PIN,LCDM_CS1_PINNum  ;取消片选1

    ldi ADDER,LCDM_FYAddrCINS         ;显示数据的Y地址为1

    sts LCDM_YAddrNum,ADDER

    sbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;置片选2为H

    lds ADDER,CHAR_RNCNTNum           ;置单列写入字符的次数值,

    sts CycleCounter6,ADDER           ;为循环计数器6的初值

LCDM_ClearSCN3:

    call LCDM_LWriteSData             ;写入单个数据“00”

    lds ADDER,CycleCounter6           ;取存储器中循环计数器6的数值,

    dec ADDER                         ;循环计数器6减1,

    sts CycleCounter6,ADDER           ;结果送回到存储器中

    brne LCDM_ClearSCN3               ;循环计数器6计数完否?

    cbi LCDM_CS2_PIN,LCDM_CS2_PINNum  ;取消片选2

    lds ADDER,LCDM_PageNum            ;显示数据页加1页

    inc ADDER

    sts LCDM_PageNum,ADDER

    lds ADDER,CycleCounter5           ;取存储器中循环计数器5的数值,

    dec ADDER                         ;循环计数器5减1,

    sts CycleCounter5,ADDER           ;结果送回到存储器中

    brne LCDM_ClearSCN1               ;循环计数器5计数完否?

    ret                               ;子程序返回



;**************** 延时1000ms子程序 - “TDELAY1000ms”

TDELAY1000ms:

    ldi ADDER,TD1000ms_INV1           ;置延时循环计数器2初值,

    sts TimeDelayCNT2,ADDER           ;存储此数值到存储器中

TDELAY1000ms1:

    ldi ADDER,TD1000ms_INV2           ;置延时循环计数器1初值,

    sts TimeDelayCNT1,ADDER           ;存储此数值到存储器中

TDELAY1000ms2:

    ldi ADDER,TD1000ms_INV3           ;置延时循环计数器初值

TDELAY1000ms3:

    dec ADDER                         ;延时循环计数器减1

    brne TDELAY1000ms3                ;延时循环时间到否?

    lds ADDER,TimeDelayCNT1           ;取存储器中循环计数器1值,

    dec ADDER                         ;延时循环计数器1减1,

    sts TimeDelayCNT1,ADDER           ;结果送回到存储器中

    brne TDELAY1000ms2                ;计数器1延时时间到否?

    lds ADDER,TimeDelayCNT2           ;取存储器中循环计数器2值,

    dec ADDER                         ;延时循环计数器2减1,

    sts TimeDelayCNT2,ADDER           ;结果送回到存储器中

    brne TDELAY1000ms1                ;计数器2延时循环时间到否?

    ret                               ;子程序返回



;**************** 延时500ms子程序 - “TDELAY500ms”

TDELAY500ms:

    ldi ADDER,TD500ms_INV1            ;置延时循环计数器2初值,

    sts TimeDelayCNT2,ADDER           ;存储此数值到存储器中

TDELAY500ms1:

    ldi ADDER,TD500ms_INV2            ;置延时循环计数器1初值,

    sts TimeDelayCNT1,ADDER           ;存储此数值到存储器中

TDELAY500ms2:

    ldi ADDER,TD500ms_INV3            ;置延时循环计数器初值

TDELAY500ms3:

    dec ADDER                         ;延时循环计数器减1

    brne TDELAY500ms3                 ;延时循环时间到否?

    lds ADDER,TimeDelayCNT1           ;取存储器中循环计数器1值,

    dec ADDER                         ;延时循环计数器1减1,

    sts TimeDelayCNT1,ADDER           ;结果送回到存储器中

    brne TDELAY500ms2                 ;计数器1延时时间到否?

    lds ADDER,TimeDelayCNT2           ;取存储器中循环计数器2值,

    dec ADDER                         ;延时循环计数器2减1,

    sts TimeDelayCNT2,ADDER           ;结果送回到存储器中

    brne TDELAY500ms1                 ;计数器2延时循环时间到否?

    ret                               ;子程序返回



;**************** 延时50ms子程序 - “TDELAY50ms”

TDELAY50ms:

    ldi ADDER,TD50ms_INV1             ;置延时循环计数器2初值,

    sts TimeDelayCNT2,ADDER           ;存储此数值到存储器中

TDELAY50ms1:

    ldi ADDER,TD50ms_INV2             ;置延时循环计数器1初值,

    sts TimeDelayCNT1,ADDER           ;存储此数值到存储器中

TDELAY50ms2:

    ldi ADDER,TD50ms_INV3             ;置延时循环计数器初值

TDELAY50ms3:

    dec ADDER                         ;延时循环计数器减1

    brne TDELAY50ms3                  ;延时循环时间到否?

    lds ADDER,TimeDelayCNT1           ;取存储器中循环计数器1值,

    dec ADDER                         ;延时循环计数器1减1,

    sts TimeDelayCNT1,ADDER           ;结果送回到存储器中

    brne TDELAY50ms2                  ;计数器1延时时间到否?

    lds ADDER,TimeDelayCNT2           ;取存储器中循环计数器2值,

    dec ADDER                         ;延时循环计数器2减1,

    sts TimeDelayCNT2,ADDER           ;结果送回到存储器中

    brne TDELAY50ms1                  ;计数器2延时循环时间到否?

    ret                               ;子程序返回



;**************** 延时10us子程序 - “TDELAY10us”

TDELAY10us:

    ldi ADDER,TD10us_INV2             ;置延时循环计数器1初值

    sts TimeDelayCNT1,ADDER           ;存储此数值到存储器中

TDELAY10us1:

    ldi ADDER,TD10us_INV1             ;置延时循环计数器初值

TDELAY10us2:

    dec ADDER                         ;延时循环计数器减1

    brne TDELAY10us2                  ;延时循环时间到否?

    lds ADDER,TimeDelayCNT1           ;取存储器中循环计数器1值,

    dec ADDER                         ;延时循环计数器2减1,

    sts TimeDelayCNT1,ADDER           ;结果送回到存储器中

    brne TDELAY10us1                  ;计数器1延时循环时间到否?

    ret                               ;子程序返回



;**************** 延时2us子程序 - “TDELAY2us”

TDELAY2us:

    ldi ADDER,TD2us_INV1              ;置延时循环计数器初值

TDELAY2us1:

    dec ADDER                         ;延时循环计数器减1

    brne TDELAY2us1                   ;延时循环时间到否?

    ret                               ;子程序返回







;********************************************************************

;*

;* 子程序名:        LCDM(HD128×64)def.inc

;* 程序名称:        ATmega16 控制128×64液晶模块(HD61202/3)

;*                  显示程序单片机程序的寄存器和常数定义

;* 版本:            1.0

;* 适用 MCU 型号:   ATmega16_16PI

;* 入口条件:        

;* 出口条件:        

;* 使用资源:        

;*

;* 程序功能:        

;*   本程序是定义ATmega16 控制128×64液晶模块(HD61202/3)

;* 显示程序单片机程序的寄存器和常数定义

;*

;* 注释:

;*   本程序仅使用两个寄存器分别对应工作于C51方式下的累加器和

;* 寄存器A,以保持程序兼容性。

;*

;* 编作者:         

;* 编作者 E-Mail:   PTZSW@163.COM

;* 编制日期:        2003年12月18日

;*                  

;********************************************************************



;******** 常数定义:



.equ  BOOTPSaddr       =  THIRDBOOTSTART    ;引导程序区开始地址数值





;*** 液晶模块参数定义:

.equ  BLCtrlPORT       =  DDRA              ;液晶的背景灯控制端口

.equ  BLCtrlPIN        =  PORTA             ;液晶的背景灯控制端口数据寄存器

.equ  BLCtrlPINNum     =  6                 ;液晶的背景灯控制引脚数字

.equ  LCDM_DI_PORT     =  DDRD              ;液晶的寄存器选择控制端口

.equ  LCDM_DI_PIN      =  PORTD             ;液晶的寄存器选择控制端口数据寄存器

.equ  LCDM_DI_PINNum   =  1                 ;液晶的寄存器选择控制引脚数字

.equ  LCDM_RW_PORT     =  DDRD              ;液晶的读/写选择控制端口

.equ  LCDM_RW_PIN      =  PORTD             ;液晶的读/写选择控制端口数据寄存器

.equ  LCDM_RW_PINNum   =  2                 ;液晶的读/写选择控制引脚数字

.equ  LCDM_EN_PORT     =  DDRD              ;液晶的使能信号控制端口

.equ  LCDM_EN_PIN      =  PORTD             ;液晶的使能信号控制端口数据寄存器

.equ  LCDM_EN_PINNum   =  3                 ;液晶的使能信号控制引脚数字

.equ  LCDM_CS1_PORT    =  DDRD              ;液晶的片选1控制端口

.equ  LCDM_CS1_PIN     =  PORTD             ;液晶的片选1控制端口数据寄存器

.equ  LCDM_CS1_PINNum  =  4                 ;液晶的片选1控制引脚数字

.equ  LCDM_CS2_PORT    =  DDRD              ;液晶的片选2控制端口

.equ  LCDM_CS2_PIN     =  PORTD             ;液晶的片选2控制端口数据寄存器

.equ  LCDM_CS2_PINNum  =  5                 ;液晶的片选2控制引脚数字

.equ  LCDM_RST_PORT    =  DDRD              ;液晶的复位信号控制端口

.equ  LCDM_RST_PIN     =  PORTD             ;液晶的复位信号控制端口数据寄存器

.equ  LCDM_RST_PINNum  =  6                 ;液晶的复位信号控制引脚数字

.equ  LCDM_DATA_PORT   =  DDRB              ;液晶模块的数据端口

.equ  LCDM_DATA_PIN    =  PORTB             ;液晶模块的数据端口数据寄存器



;*** 液晶显示数据常数定义:

.equ  LCDM_SLMaxDotNum =  8                 ;液晶每列中可显示的最大行点阵数

.equ  LCDM_SRMaxDotNum =  64                ;液晶每行中可显示的最大列点阵数

.equ  LCDM_ON_Display  =  63                ;打开液晶显示的控制指令字

.equ  LCDM_OFF_Display =  62                ;关闭液晶显示的控制指令字

.equ  LCDM_FPageCINS   =  184               ;显示数据为第1页的控制指令字

.equ  LCDM_FYAddrCINS  =  64                ;显示数据的Y地址为1的控制指令字

.equ  LCDM_FSLineCINS  =  192               ;开始显示行数为1的控制指令字





;*** 延时循环子程序常数定义:

;下面计算以单片机的时钟= 1 MHz 为依据进行时间运算。

;定义中的数值为实际运行时钟周期的数值。



;延时1000ms计数器初值共计:1000000 个时钟周期。

.equ    TD1000ms_INV1      = 250

.equ    TD1000ms_INV2      = 182

.equ    TD1000ms_INV3      = 5

;延时500ms计数器初值共计:500000 个时钟周期。

.equ    TD500ms_INV1       = 250

.equ    TD500ms_INV2       = 92

.equ    TD500ms_INV3       = 5

;延时50ms计数器初值共计:50000 个时钟周期。

.equ    TD50ms_INV1        = 245

.equ    TD50ms_INV2        = 9

.equ    TD50ms_INV3        = 5

;延时10us计数器初值共计:10 个时钟周期。

.equ    TD10us_INV1        = 2

.equ    TD10us_INV2        = 1

;延时2us计数器初值共计:2 个时钟周期。

.equ    TD2us_INV1         = 1





;******** 寄存器变量定义:

.def    ADDER              = r16          ;工作于累加器方式的寄存器

.def    REGISTER_A         = r17          ;工作于寄存器A方式的寄存器





;******** 各类工作于通用寄存器方式的在 SRAM 中存储地址定义:



.equ    ADDERTEMP          = $200         ;暂存累加器数值

.equ    CycleCounter1      = $201         ;循环计数器1

.equ    CycleCounter2      = $202         ;循环计数器2

.equ    CycleCounter3      = $203         ;循环计数器3

.equ    CycleCounter4      = $204         ;循环计数器4

.equ    CycleCounter5      = $205         ;循环计数器5

.equ    CycleCounter6      = $206         ;循环计数器6

.equ    CycleCounter7      = $207         ;循环计数器7

.equ    CycleCounter8      = $208         ;循环计数器8

.equ    TimeDelayCNT1      = $211         ;延时循环计数器1

.equ    TimeDelayCNT2      = $212         ;延时循环计数器2

.equ    TimeDelayCNT3      = $213         ;延时循环计数器3

.equ    TimeDelayCNT4      = $214         ;延时循环计数器4



.equ    LCDM_PageNum       = $221         ;液晶中的显示数据页数

.equ    LCDM_YAddrNum      = $222         ;液晶中的显示数据的Y地址数

.equ    LCDM_SLineAddr     = $223         ;液晶中的开始显示行地址数



.equ    CHAR_LDotNum       = $231         ;单个字符数据行点阵数

.equ    CHAR_RDotNum       = $232         ;单个字符数据列点阵数

.equ    CHAR_NPageNum      = $233         ;单个字符写入的页数值

.equ    CHAR_RNCNTNum      = $234         ;单列需写入字符的次数值

.equ    CHAR_SWordData     = $235         ;写入单个字符的数据值



;★★★★★ 定义文件结束!!! ★★★★★

出0入0汤圆

发表于 2005-5-21 08:02:46 | 显示全部楼层
很好的例程,顶上去

出0入0汤圆

发表于 2005-5-21 08:39:46 | 显示全部楼层
佩服,要向LYStudio 磊元兄學習學習

出0入0汤圆

发表于 2006-1-10 22:41:23 | 显示全部楼层
好文章,一定顶上去!让更多从事汇编的初学者看到!

出0入0汤圆

发表于 2006-12-19 23:24:48 | 显示全部楼层
实在的好文,顶

出0入0汤圆

发表于 2007-4-21 21:06:06 | 显示全部楼层
不错,非常详细好文章

出0入0汤圆

发表于 2009-9-2 16:03:55 | 显示全部楼层
谢谢楼主,收藏!

出0入0汤圆

发表于 2010-3-30 13:08:16 | 显示全部楼层
回复【6楼】xuexuedede 山东姑娘
谢谢楼主,收藏!
-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-5-24 17:46:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-26 16:09:30 | 显示全部楼层
有没有c语言的程序呀这个我有点不明白呀

出0入0汤圆

发表于 2010-8-8 12:52:35 | 显示全部楼层
可怎么没见到人写AVR的320240液晶汇编呢?

出0入0汤圆

发表于 2010-8-8 15:46:22 | 显示全部楼层
汇编。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 22:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表