kevinstar888 发表于 2012-5-25 23:44:31

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

这段时间在学汇编,为了验证自己到底学了多少,于是用汇编的方式写个1602的显示驱动。
由于没有实物,只能用仿真,所以不敢保证在实物上也能正常工作。
初学汇编,不能像高手那样精简代码,程序也可能不完善,希望高手能指点一下,但是请不要指指点点。
因为是仿真,所以就没用“读忙”操作。代码如下(有点乱):
rs equ p2.0;                //定义接口,变量地址
rw equ p2.1;
en equ p2.2;
lcd equ p0;
cmd equ 0c0h;
dat equ 0c1h;
x equ0c2h;
y equ0c3h;
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;
页: [1]
查看完整版本: 汇编编写的1602驱动,PROTEUS仿真成功点亮