| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1624 人关注过本帖
标题:求助:帮忙修改一个1602液晶程序
只看楼主 加入收藏
justinzheng
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-10-1
收藏
 问题点数:0 回复次数:4 
求助:帮忙修改一个1602液晶程序
初次学习写液晶程序,谁能帮忙看下这段程序为何每次显示完成以后总是会刷新,然后又重新显示。
如何才能让一次显示完以后一直保持显示状态,而不更新。也就是所存。
;***************************************************
;FILE:LED1
;NAME:1602液晶显示器基础
;date:2007年3月1日
;function;开机时显示"welcome! abcd
; www.abcd.edu.cn"
;***************************************************
RS BIT P3.3 ;寄存器选择,1表示数据寄存器,0表示指令寄存器
RW BIT P3.5 ;读写信号线,高电平为读,低电平为写,
;RS RW同时为低表示写指令,RS低RW高则是读忙信号,反之写入数据
E BIT P3.4 ;液晶显示使能,高到低时执行命令
OUTPUT EQU P0
org 0000h
ajmp main
org 0040h
main: mov sp,#60h
mov output,#01h ;清屏
lcall enable ;每次操作都要保存
mov output,#38h ;功能选择
lcall enable
mov output,#0fh ;开显示幕
lcall enable
mov output,#06h ;表示光标向右移,屏幕上文字不移动
lcall enable
mov output,#80h ;设定第一行起始地址
lcall enable
mov dptr,#table1
lcall display
mov output,#0c0h
lcall enable
mov dptr,#table2
lcall display
mov output,#0c0h ;表示光标停在第二行第一个'0'这里
ret
;-----------------写入程序寄存器--------------------------
enable:clr rs ;写指令到寄存器
clr rw
clr e ;先禁止,在第二次进入的时候就有效了
lcall delay
setb e
ret
;------------------写入数据寄存器,显示-------------------
display: clr rs0
clr rs1
mov r1,#16 ;每行显示十六个字
loop1: clr a
movc a,@a+dptr
mov output,a
clr rw ;写数据到寄存器
setb rs
clr e
lcall delay
setb e
inc dptr
djnz r1,loop1
ret
;----------------延时程序---------------------------------
delay:mov r7,#248 ;50ms延时
loop2:mov r6,#100
loop3:djnz r6,loop3
djnz r7,loop2
ret
table1:db ' welcome!abcd '
table2:db 'www.abcd.edu.cn '
end
搜索更多相关主题的帖子: 液晶程序 液晶显示器 寄存器 abcd 
2007-03-15 21:28
knate
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-3-9
收藏
得分:0 
;***************************************************
RS BIT P3.3 ;寄存器选择,1表示数据寄存器,0表示指令寄存器
RW BIT P3.5 ;读写信号线,高电平为读,低电平为写,
;RS RW同时为低表示写指令,RS低RW高则是读忙信号,反之写入数据
E BIT P3.4 ;液晶显示使能,高到低时执行命令
OUTPUT EQU P0
org 0000h
ajmp main
org 0040h
main: mov sp,#60h
mov output,#01h ;清屏
lcall enable ;每次操作都要保存
begin: mov output,#38h ;功能选择
lcall enable
mov output,#0fh ;开显示幕
lcall enable
mov output,#06h ;表示光标向右移,屏幕上文字不移动
lcall enable
mov output,#80h ;设定第一行起始地址
lcall enable
mov dptr,#table1
lcall display
mov output,#0c0h
lcall enable
mov dptr,#table2
lcall display
mov output,#0c0h ;表示光标停在第二行第一个'0'这里
ljmp begin
;-----------------写入程序寄存器--------------------------
enable:clr rs ;写指令到寄存器
clr rw
clr e ;先禁止,在第二次进入的时候就有效了
lcall delay
setb e
ret
;------------------写入数据寄存器,显示-------------------
display: clr rs0
clr rs1
mov r1,#16 ;每行显示十六个字
loop1: clr a
movc a,@a+dptr
mov output,a
clr rw ;写数据到寄存器
setb rs
clr e
lcall delay
setb e
inc dptr
djnz r1,loop1
ret
;----------------延时程序---------------------------------
delay:mov r7,#248 ;50ms延时
loop2:mov r6,#100
loop3:djnz r6,loop3
djnz r7,loop2
ret
table1:db ' welcome!abcd '
table2:db 'www.abcd.edu.cn '
end

解析
mov output,#0c0h ;表示光标停在第二行第一个'0'这里
ret
这个ret 用得不好!!
改为转跳到清屏指令后看看!!

2007-03-16 19:28
justinzheng
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-10-1
收藏
得分:0 
恩,我尝试下啊,我后来也想出一个办法,
将mov output,#0c0h ;表示光标停在第二行第一个'0'这里
ret
将ret改为ajmp $就没有问题了!
2007-03-17 12:50
yuzhuixin
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-4-6
收藏
得分:0 
回复:(justinzheng)求助:帮忙修改一个1602液晶程序...

将mov output,#0c0h ;表示光标停在第二行第一个'0'这里
ret
将ret改为ajmp $就没有问题了!

这一句有什么用呢?没用。

那我在mov output,#0c0h 后加上
mov a,p0,
为什么A是一个固定值,即使我这样:
mov output,#0c0h
mov P0,#0ffh
mov a,p0,
(A)不等于0FFH

2007-04-06 22:27
zwanddlqq
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-4-24
收藏
得分:0 
2007-04-25 11:54
快速回复:求助:帮忙修改一个1602液晶程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059703 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved