打印
[AVR单片机]

多年前自已写的M8驱动LCD1602,全汇编,翻出来共享。

[复制链接]
1870|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
plc_avr|  楼主 | 2011-7-20 06:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 plc_avr 于 2011-7-20 09:10 编辑

;1602液晶显示子程序

.include  "m8def.inc"
.device  atmega8

;>>>>>>>接口定义>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.def data = r20                        ;数据/地址,输入输出寄存器
.def command = r21                ;液晶显示设置命令寄存器
.set d_port = portd                ;液晶与MCU的数据接口
.set c_port = portc                ;液晶控制信号所用MCU端口
.set d_ddr  = ddrd                ;
.equ busy = 7
.equ en = 3                                ;液晶的"EN"控制信号与MCU的接口
.equ rw = 4                                 ;液晶的"R/W"控制信号与MCU的接口
.equ rs = 5                                ;液晶的"RS"控制信号与MCU的接口
;<<<<<<<接口定义结束<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

.org 0x000
rjmp reset

.org 0x015
reset:        
;>>>>>>>MCU初始化,作为子程序时应结合主程序修改并放置主程序开始处>>>>>>>>>>
        ldi r16 , high(ramend)                ;        
        out sph , r16                                ;         
        ldi r16 , low(ramend)                ;        
        out spl , r16               ;初始化堆栈指针
        
        ldi r20 , 0x0ff                 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        
        out ddrd , r20                        ;
        out ddrc , r20                        ;有关MCU与液晶接口的一些初始化
        ldi r20 , 0x00                        ;
        out portc , r20                        ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;<<<<<<<<MCU初始化结束<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

        
        rcall lcd_initi        
        ldi data , 0x80
        rcall lcd_d_write
        rcall read_lcd_busy

        ldi r27 , 0x10
        ldi data , 0x41
dh:
        rcall lcd_d_write
        rcall read_lcd_busy
        inc data
        dec r27
        brne dh

over: rjmp over
        



;>>>>>>LCD初始化、工作方式设置子程序,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
lcd_initi:
        ldi command , 0x30                ;>>>>液晶初始化>>>>>>>>>>>>>>>>>>>
        rcall lcd_c_write                ;写入初始化命令
        rcall delay                                ;延时(延时时间>1.4ms)
        rcall delay        

        rcall lcd_c_write                ;再次写入初始化命令
        rcall delay                                ;延时(延时时间>100us)

        rcall lcd_c_write                ;最后一次写入初始化命令
        rcall read_lcd_busy                ;<<<<<检测LCD状态,初始化结束<<<<<<


        ldi command , 0x38                ;>>>>>液晶工作方式设置>>>>>>>>>>>>>
        rcall lcd_c_write                ;写入控制字,选择8位数据并行方式
        rcall read_lcd_busy                ;检测液晶状态

        ldi command , 0x01                ;清屏
        rcall lcd_c_write                ;
        rcall read_lcd_busy                ;

        ldi command , 0x02                ;归位
        rcall lcd_c_write
        rcall read_lcd_busy               

        ldi command , 0x06                ;输入方式设置,AC自动增一,画面不动
        rcall lcd_c_write
        rcall read_lcd_busy

        ldi command , 0x0f                ;显示开关控制,显示开,光标开,闪烁开
        rcall lcd_c_write
        rcall read_lcd_busy

        ret
;<<<<<<<<<<<<LCD初始化、工作方式设置结束<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


;>>>>>写命令子程序"lcd_c_write">>>>>>>>>>>>>>>>>>>>>
lcd_c_write:
        sbi c_port , en
        out d_port , command
        cbi c_port , en
        ret
;<<<<<写命令子程序"lcd_c_write"结束<<<<<<<<<<<<<<<<<<


;>>>>>写数据子程序"lcd_d_write">>>>>>>>>>>>>>>>>>>>>
lcd_d_write:
        sbi c_port , rs
        sbi c_port , en
        out d_port , data
        cbi c_port , en
        cbi c_port , rs
        ret
;<<<<<写数据子程序"lcd_d_write"结束<<<<<<<<<<<<<<<<<<


;>>>>液晶状态读取子程序read_lcd_busy>>>>>>>>>>>>>>>>>>
read_lcd_busy:
        cbi d_port , busy
        cbi d_ddr  , busy
        sbi c_port , rw
        sbi c_port , en
        nop
back:        
        sbic pind   , busy
        rjmp back
        cbi  c_port , rw
        sbi  d_ddr  , busy
        ret
;>>>>液晶状态读取子程序read_lcd_busy结束>>>>>>>>>>>>>>>




delay:
        ldi r31 , 0x08
agi:
        ldi r30 , 0xf0
again:        
        dec r30
        breq tiao
        rjmp again
tiao:
        dec r31
        breq dover
        rjmp agi
dover:
        ret

相关帖子

沙发
快乐之星| | 2011-10-5 23:33 | 只看该作者
看不懂。。。。。。。

使用特权

评论回复
板凳
murex| | 2011-10-9 12:26 | 只看该作者
烈火真狠啊,顶个

使用特权

评论回复
地板
快乐之星| | 2011-10-15 00:10 | 只看该作者
不懂。。。。。。。

使用特权

评论回复
5
weshiluwei6| | 2011-10-16 17:08 | 只看该作者
汇编完全不会啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:烈火DIY Mini四轴飞行器群:234879071  http://fire-dragon.taobao.com/

42

主题

1633

帖子

23

粉丝