首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

?查表,该如何解决

2012-02-25 
??查表ORG0000HRSEQUP2.1确定具体硬件的连接方式RWEQUP2.0确定具体硬件的连接方式EEQUP2.2确定具体硬件

??查表
ORG   0000H
                RS   EQU   P2.1;确定具体硬件的连接方式
                RW   EQU   P2.0;确定具体硬件的连接方式
                E     EQU   P2.2;确定具体硬件的连接方式

                AJMP         START

                ORG           0030H
START:     MOV           SP,#30H

MAIN:       LCALL       DELAY                 ;延时一段时间
               
                MOV           P0,#01H               ;写指令01H,清屏
                LCALL       ENABLE
               
                MOV           P0,#38H             ;写指令38H,设定LCD为16*2显示,5*7点阵,8位数据接口
                LCALL       ENABLE
               
                MOV           P0,#0FH             ;写指令0FH,显示ON,光标ON,闪烁ON
                LCALL       ENABLE
               
                MOV           P0,#06H             ;写指令06H,光标输入方式增量移位
                LCALL       ENABLE
               
      L1:              
                MOV           P0,#80H             ;第一行起始字符地址
                LCALL       ENABLE
               
                MOV           DPTR,#TABLE1   ;第一行显示字符表头地址
                LCALL       DISP                   ;显示第一行数据
               
                ;MOV           P0,#0C0H           ;第二行起始字符地址
              ;   LCALL       ENABLE
               
              ;   MOV           DPTR,#TABLE2   ;第二行显示字符表头地址
              ;   LCALL       DISP                   ;显示第二行数据
               
                AJMP         $                   ;返回主程序循环


  ;-----------------
ENABLE:  
                CLR           RS                       ;写指令子程序(请参照1602LCD使用说明书)
                CLR           RW
                CLR           E
                LCALL       DELAY
                SETB         E
                RET
  ;-----------------
DISP:       MOV           R1,#0FH               ;准备显示一行16个字符
LOOP:       MOV           A,#00H               ;将ACC清零
                MOVC         A,@A+DPTR         ;查表取得要显示的数据

                LCALL       DISP1                 ;写入一个数据
                INC           DPTR                   ;数据表指针加1,准备取下一个数据
                DJNZ   R1,LOOP                     ;一行没有显示完就继续
                RET

  ;-----------------
DISP1:
                SETB         RS                       ;写数据时序
                CLR           RW
                CLR           E
                LCALL       DELAY
                SETB         E
                NOP
                MOV           P0,A                   ;写1字节数据到显示端口
                NOP
                CLR           E
                RET
      ;-----------------
DELAY:           MOV   p0,#0FFH   ;;判断液晶显示器是否忙的子程序
                      CLR   RS
                      SETB   RW
                      CLR   E
                      NOP
                      SETB   E
                      JB   p0.7,DELAY;;如果p0.7为高电平表示忙就循环等待
                      RET



TABLE1:   DB   '   abcdefghijklmn   '
TABLE2:   DB   '   opqrstuvwxyz       '

              END

运行到查表指令时它会没运行完就跳到下一条指令,如可能查表就到   a   ,但下一此它却查到了   o   去了,为什么,程序是不是有问题

[解决办法]
你哪查表了?

你再看一下你查表的思路和结构...

热点排行