📄 从asm到c控制1602.txt
字号:
从asm到c控制1602
c语言控制1602lcd
//------------------------------------------------------------
// c语言控制1602液晶显示程序
//根据汇编程序改写的c程序,在keilc上编译通过。
// e-mail:zhongvv@163.com
//assembling STARTUP.A51...
//compiling 1602.c...
//linking...
//Program Size: data=9.0 xdata=0 code=204
//"1602" - 0 Error(s), 0 Warning(s).
//------------------------------------------------------------
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
sbit rs=P3^0;
sbit rw=P3^1;
sbit e=P3^5;
delay(uchar time)//延时函数
{ while(time>0)
{time--;}
}
enrw()//写使能
{rs=0;
rw=0;
e=0;
delay(250);
e=1;
}
write_data(uchar c)//写数据
{
P1=c;
rs=1;
rw=0;
e=0;
delay(250);
e=1;
}
init_lcd(void)//初始化
{
P1=0x01;//清屏幕
enrw();
P1=0x38;//数据长度为8位,双行显示,5*7字符。
enrw();
P1=0x0c;//打开显示开关
enrw();
P1=0x06;//地址计数递增,显示屏不移动
enrw();
}
write_cmd(uchar m)//写命令,注意与写数据的区别
{ P1=m;
enrw();
}
position(uchar row,uchar colum)//写位置
{uchar p;
if(row==1)
p=0x80+colum-1;
else
p=0xC0+colum-1;
write_cmd(p);
}
display(uchar *s)//写字符串,简单的指针应用
{
for(;*s!='\0';s++)
write_data(*s);
}
void main(void)
{
init_lcd();
position(1,1);
display("zhongvv@163.com";//""把字符串转换成ascii码
position(2,1);
display("www.ucos.net.cn";
while(1)
{ ; }
}
c语言可以很容易移植。
;------------------------------------------------------------
; asm语言控制1602lcd显示程序
;原程序来自网络,经过本人编辑注释,在keilc上编译通过。
; e-mail:zhongvv@163.com
;Build target 'Target 1'
;assembling 1602.asm...
;linking...
;Program Size: data=8.0 xdata=0 code=133
;"lcd1602asm" - 0 Error(s), 0 Warning(s).
;------------------------------------------------------------
;p1 口为数据接口
rs bit p3.0
rw bit p3.1
e bit p3.5
org 00h
mov sp,#70h ;堆栈
mov p1,#01h;清lcd屏幕
call enrw
mov p1,#38h;数据长度为8位,双行显示,5*7字符。
call enrw
mov p1,#0ch;打开显示开关。
call enrw
mov p1,#06h;地址计数递增,显示屏不移动
call enrw;以上为1602初始化设置
mov p1,#80h;设置第一行地址,注意,有些液晶第一行地址为00H
call enrw
mov dptr,#tab; 把表的首地址赋给数据指针
call rwram
mov p1,#0c0h;设置第二行地址,注意:有些液晶第二行地址为40H
call enrw
mov dptr,#tab1;把表1首地址赋给数据指针。
call rwram
;mov p1,#0c2h;16进制数在字母前面一定要加0,
;call enrw
jmp $;表示自循环。
enrw:clr rs; 写使能
clr rw
clr e
call delay
setb e
ret
rwram:mov r1,#00h;写ram
a1: mov a,r1
movc a,@a+dptr
call rwram2
inc r1;数据位置加1
cjne a,#00h,a1
ret
rwram2:mov p1,a;
setb rs
clr rw
clr e
call delay
setb e
ret
delay:mov r4,#05 ;延迟程序
d1: mov r5,#0ffh
djnz r5,$
djnz r4,d1
ret
tab: db 'zhongvv@163.com',00h;所要显示的字符
tab1:db 'www.ucos.net.cn' ,00h
end
汇编语言很简洁。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -