汇编编写的1602驱动,PROTEUS仿真成功点亮

2020-02-05 09:16发布

这段时间在学汇编,为了验证自己到底学了多少,于是用汇编的方式写个1602的显示驱动。
由于没有实物,只能用仿真,所以不敢保证在实物上也能正常工作。
初学汇编,不能像高手那样精简代码,程序也可能不完善,希望高手能指点一下,但是请不要指指点点。
因为是仿真,所以就没用“读忙”操作。代码如下(有点乱):
rs equ p2.0;                //定义接口,变量地址
rw equ p2.1;
en equ p2.2;
lcd equ p0;
cmd equ 0c0h;
dat equ 0c1h;
x equ  0c2h;
y equ  0c3h;
org 0000h;
ajmp start;
org 30h;
start: lcall delay;                //初始化
               mov cmd,#38h;
           lcall w_cmd;
           mov cmd,#0ch;
           lcall w_cmd;
           mov cmd,#06h;
           lcall w_cmd;
           mov cmd,#01h;
           lcall w_cmd;
loop: mov x,#00h;                 //显示数据
      mov y,#00h;
          mov dptr,#tab1;
          lcall display;
          mov x,#00h;
      mov y,#01h;
          mov dptr,#tab2;
          lcall display;
      sjmp $;
display:mov a,y;                  //判断哪一行显示
        cjne a,#01h,dis1;
            mov a,#0c0h;
        add a,x;
        mov cmd,a;
        sjmp dis2;
         dis1: mov a,#80h;
         add a,x;
         mov cmd,a;
         dis2:  lcall w_cmd;
          lcall w_dat;
         ret;
w_cmd:mov p2,#00h;                 //写命令call
            mov a,cmd;
             mov lcd,a;
          clr rs;
          lcall dims;
          clr rw;
          lcall dims;
          setb en;
          lcall dims;
          clr en;
          ret;
w_dat:       mov p2,#00h;        //写数据call
                 mov r5,x;
  da1:           mov a,r5;
          movc a,@a+dptr;
                   mov lcd,a;
          setb rs;
          lcall dims;
          clr rw;
          lcall dims;
          setb en;
          lcall dims;
          clr en;
          inc r5;
          cjne r5,#0fh,da1;
          ret;
dims:mov r7,#25;                           //延时5ms,晶振为12MHz
  di1:mov r6,#50;
   di2: djnz r6,di2;
        djnz r7,di1;
        ret;
                          
delay:mov r7,#100;                        //延时
   d1:mov r6,#100;
   d2: djnz r6,d2;
       djnz r7,d1;
           ret;
tab1: db 20h,57h,57h,57h,2eh,4fh,55h,52h,44h,45h;  //“www.ourdev.cn
      db 56h,2eh,43h,4eh,20h,20h;
tab2: db 20h,20h,4bh,65h,76h,69h,6eh,53h,74h,61h;  //"kevinstar888"
      db 72h,38h,38h,38h,20h,20h;
end;
1602仿真图.jpg (104.54 KB, 下载次数: 0) 下载附件 2012-5-25 23:43 上传
0条回答

一周热门 更多>