⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 从asm到c控制1602.txt

📁 从asm到c控制1602 c语言控制1602lcd c语言控制1602液晶显示程序根据汇编程序改写的c程序
💻 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 + -