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

📄 lcd.c

📁 C51 DOS/WINDOWS下的MCS51系列液晶显示器(LCD)的C驱动程序
💻 C
📖 第 1 页 / 共 3 页
字号:
TAN:DO;/* 治疗仪  SENSOR FOR TMP04 2001/8/25*/
$INCLUDE (REG52.DCL)
  DECLARE VAR LITERALLY 'DECLARE';
  VAR BUF(120) BYTE PUBLIC AT(80H) IDATA;    /* 中文显示缓冲区 */
  VAR ZBUF(8) WORD PUBLIC;/* 数据显示缓冲区 */
  VAR DI WORD PUBLIC;     /* 传感器缓冲T2 sensor value buf */
  VAR DIH BYTE PUBLIC AT(.DI);
  VAR DIL BYTE PUBLIC AT(.DI+1);
  VAR (ADR,TT,CI)WORD PUBLIC AT(0FAH) IDATA;  /* 显示指针,传感器缓冲T1     */
  VAR (INA,INB,GUNWEI,RUN,DD,RUNM,BP,ER,AM,AP) BYTE PUBLIC;
/*50毫秒计数,脉冲计数,光标位置,运行标置,运行:秒-分单元, 脉冲输出标记,运行脉冲间隔(调制脉冲) */
  VAR ADRH BYTE PUBLIC AT(.ADR) IDATA;
  VAR ADRL BYTE PUBLIC AT(.ADR+1) IDATA;
  VAR CIH BYTE PUBLIC AT(.CI) IDATA;
  VAR CIL BYTE PUBLIC AT(.CI+1) IDATA;
  VAR TTH BYTE PUBLIC AT(.TT) IDATA;
  VAR TTL BYTE PUBLIC AT(.TT+1) IDATA;
  VAR (AA,BB,CC,DAT1,DAT2,COM) BYTE PUBLIC;/* 键值,第一参数,第二参数,指令 */
  VAR (SWEND,STIME,SFREQ,SMODE,RESET,WORK) BYTE PUBLIC;/*温度、时间、频率、模式标记*/
  VAR OLED BYTE PUBLIC;                       /* LED灯输出缓冲 */
  VAR KEYPORT BYTE PUBLIC AT(9C00H) AUXILIARY;/* 键盘输入口        */
  VAR OULED BYTE PUBLIC AT(9400H) AUXILIARY;  /* LED灯输出口,高有效 */
  VAR OULCD BYTE PUBLIC AT(9000H) AUXILIARY;  /* LCD输出数据口  */ 
  VAR IND BYTE PUBLIC AT(9100H) AUXILIARY;    /* LCD输出命令口  */ 
  VAR EEBUF BYTE PUBLIC;  /* EEPROM用缓冲区  */
  VAR EE(20) BYTE PUBLIC; /* EEPROM:EE(0)写或读字节数,EE(1...)数据 */
  VAR RE BIT PUBLIC;


STUS:PROCEDURE;/* LCD状态输入子程序1 */
      VAR STU BYTE;
     ST1:STU=IND;/* 输入LCD状态 */
          STU=STU AND 03H;
          IF STU <>03H THEN GOTO ST1;/* 允许写,准备好 */
END STUS;

STUS1:PROCEDURE; /* LCD状态输入子程序2 */
      VAR STUU BYTE;
     ST2:STUU=IND;/* 输入LCD状态 */
          STUU=STUU AND 08H;
          IF STUU=0 THEN GOTO ST2;/* 允许自动写,准备好 */
END STUS1;
 
OUT1:PROCEDURE;/* LCD输出参数和指令,AA=1输出1个参数,AA=2无参数,其它2个参数 */
    DISABLE;
    IF AA=2 THEN GOTO OU2;
    IF AA=1 THEN GOTO OU1;
    CALL STUS;
    OULCD=DAT1; /* 输出参数1 */
OU1:CALL STUS;
    OULCD=DAT2; /* 输出参数2 */
OU2:CALL STUS;
    IND=COM;  /* 输出指令码 */
    ENABLE;
END OUT1;

INI:PROCEDURE;/* LCD初始化 */ 
    AA=2;
    COM=0A7H;
    CALL OUT1;
    AA=0;
    DAT1=0;   /* 低8位地址 */
    DAT2=0;   /* 高8位地址 */
    COM=40H;  
    CALL OUT1;/* 图形区首址 */
    DAT1=20H;   /* 低8位地址 */
    DAT2=0;   /* 高8位地址 */
    COM=41H;  
    CALL OUT1;/* 图形区首址 */
    DAT1=00H; /* 图形区宽度,字节数/行 */
    DAT2=08H;  /* 08H */
    COM=42H;  /* 图形区宽度 */
    CALL OUT1;
    DAT1=20H; /* 图形区宽度,字节数/行 */
    DAT2=00;
    COM=43H;  /* 图形区宽度 */
    CALL OUT1;
    CALL STUS;
    IND=0A7H; 
    CALL STUS;
    IND=80H;
    CALL STUS;
    IND=9FH;/* 9CH */
    AA=0;
    DAT1=15;/* 光标指针水平位置 */
    DAT2=15; /* 光标指针垂直位置 */
    COM=21H;
    CALL OUT1;
END INI;

CLERAM:PROCEDURE;/* LCD清屏幕 */
       DAT1=00H;
       DAT2=00H;
       COM=24H;
       CALL OUT1;
       CALL STUS;
       IND=0B0H;
       DO ADR=0 TO 2000h;
          CALL STUS1;
          OULCD=00H;
       END;
       CALL STUS;
       IND=0B2H;
END CLERAM;

DISPLAY:PROCEDURE;   /* 显示程序,显示  */
  VAR X(30) STRUCTURE (Y(32) BYTE) CONSTANT/*显示字模矩阵,X=代码编号,Y=字模*/
      (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/* 0 NULL*/
       10H,10H,57H,3AH,13H,0FEH,13H,32H, 3BH,56H,53H,93H,15H,15H,19H,11H,/* 1糖 */
       40H,24H,0FEH,20H,0FCH,24H,0FEH,24H,0FCH,20H,0FCH,04H,004H,04H,0FCH,04H,
       00H,3FH,20H,20H,3FH,20H,20H,2EH,22H,22H,24H,24H,48H,50H,82H,001H,/* 2尿 */
       04H,0FEH,04H,04H,0FCH,84H,80H,0A4H,0A8H,0B0H,0A0H,90H,8EH,84H,80H,00H,
       00H,00H,1FH,10H,90H,57H,50H,10H,37H,54H,94H,14H,25H,24H,44H,04H,/* 3病 */
       80H,44H,0FEH,00H,08H,0FCH,40H,44H,0FEH,44H,44H,0A4H,14H,04H,14H,08H,
       00H,40H,31H,11H,82H,67H,20H,08H,13H,22H,0E2H,22H,22H,22H,23H,22H,/* 4治 */
       80H,80H,00H,10H,08H,0FCH,00H,08H,0FCH,08H,08H,08H,08H,08H,0F8H,08H,
       01H,00H,1FH,10H,90H,57H,50H,10H,30H,50H,0D0H,10H,20H,22H,41H,00H,/* 5疗 */
       00H,84H,0FEH,00H,00H,0F8H,10H,20H,40H,40H,40H,40H,40H,40H,40H,80H,
       08H,08H,08H,12H,12H,32H,51H,91H,10H,10H,10H,10H,11H,12H,14H,18H,/* 6仪 */
       00H,80H,64H,24H,04H,08H,08H,10H,90H,0A0H,40H,0A0H,10H,08H,0EH,04H,
       02H,01H,7FH,48H,86H,02H,10H,0CH,04H,0FFH,01H,01H,02H,04H,18H,60H,/* 7实 */
       00H,00H,0FEH,02H,84H,80H,80H,80H,84H,0FEH,00H,40H,20H,10H,0CH,04H,
       00H,7DH,44H,48H,48H,50H,4BH,48H,44H,44H,44H,69H,52H,40H,40H,40H,/* 8际 */
       08H,0FCH,00H,00H,00H,04H,0FEH,20H,20H,0A8H,0A4H,22H,22H,20H,0A0H,40H,
       00H,43H,32H,12H,83H,62H,22H,0BH,10H,27H,0E4H,24H,24H,24H,2FH,20H,/* 9温 */
       08H,0FCH,08H,08H,0F8H,08H,08H,0F8H,0H,0FCH,0A4H,0A4H,0A4H,0A4H,0FEH,0H,
       01H,00H,3FH,22H,22H,3FH,22H,23H,20H,2FH,22H,21H,20H,43H,8CH,30H,/* 10度 */
       00H,84H,0FEH,20H,28H,0FCH,20H,0E0H,00H,0F0H,20H,40H,80H,60H,1EH,04H,
       00H,43H,30H,10H,00H,07H,0F0H,10H,11H,11H,12H,17H,10H,28H,47H,00H,/* 11运 */
       10H,0F8H,00H,00H,08H,0FCH,80H,80H,00H,20H,10H,0F8H,08H,06H,0FCH,00H,
       08H,0BH,10H,20H,40H,08H,17H,30H,50H,90H,10H,10H,10H,10H,10H,10H,/* 12行 */
       08H,0FCH,00H,0H,00H,04H,0FEH,10H,10H,10H,10H,10H,10H,10H,50H,20H,
       00H,04H,7EH,44H,47H,44H,44H,7CH,44H,44H,44H,44H,7CH,44H,00H,00H,/* 13时 */
       08H,08H,08H,08H,0FEH,08H,08H,88H,48H,48H,08H,08H,008H,48H,28H,10H,
       20H,1BH,08H,40H,4FH,48H,48H,48H,4FH,48H,48H,48H,4FH,48H,40H,40H,/* 14间 */
       04H,0FEH,04H,24H,0F4H,24H,24H,24H,0E4H,24H,24H,24H,0E4H,24H,14H,08H,
       10H,13H,54H,5EH,51H,55H,0FFH,11H,55H,55H,55H,95H,08H,10H,20H,43H,/* 15频 */
       04H,0FEH,20H,44H,0FEH,04H,24H,24H,24H,24H,24H,24H,20H,50H,8CH,04H,
       02H,01H,7FH,001H,42H,27H,11H,22H,4FH,01H,01H,0FFH,01H,01H,01H,01H,/* 16率*/
       00H,08H,0FCH,00H,44H,88H,10H,48H,0E4H,20H,04H,0FEH,00H,00H,00H,00H,
       11H,11H,1FH,11H,0FDH,13H,32H,3BH,56H,53H,90H,1FH,10H,10H,11H,16H,/* 17模 */
       10H,14H,0FEH,10H,18H,0FCH,08H,0F8H,08H,0F8H,40H,0FEH,40H,0B0H,0EH,04H,
       00H,00H,00H,00H,0FFH,00H,00H,3EH,08H,08H,08H,09H,00EH,70H,20H,00H,/* 18式 */
       80H,0A0H,90H,84H,0FEH,80H,80H,80H,80H,40H,40H,20H,22H,12H,0AH,04H,
       01H,21H,11H,11H,01H,02H,0F4H,13H,11H,11H,10H,10H,14H,18H,13H,0CH,/* 19设 */
       0F0H,10H,10H,10H,10H,0EH,00H,0F8H,08H,10H,90H,0A0H,40H,0B0H,0EH,04H,
       02H,01H,7FH,40H,80H,1FH,01H,01H,11H,11H,11H,11H,11H,29H,47H,80H,/* 20定 */
       00H,00H,0FEH,02H,24H,0F0H,00H,00H,20H,0F0H,00H,00H,00H,06H,0FCH,00H,
       00H,04H,04H,08H,08H,10H,20H,4FH,84H,04H,04H,04H,04H,08H,11H,20H,/* 21分 */
       80H,80H,40H,40H,20H,10H,08H,0EEH,24H,20H,20H,20H,20H,20H,40H,80H,
       08H,08H,7EH,08H,08H,0FFH,14H,14H,36H,75H,94H,14H,14H,14H,24H,4DH,/* 22赫 */
       20H,28H,0FCH,20H,024H,0FEH,50H,50H,0D8H,56H,52H,50H,50H,50H,90H,30H,
       00H,00H,7FH,01H,001H,01H,01H,01H,01H,01H,01H,01H,001H,0FFH,0H,00H,/* 23工 */
       00H,08H,0FCH,0H,000H,00H,00H,00H,00H,00H,00H,00H,04H,0FEH,00H,00H,
       09H,09H,09H,11H,12H,32H,54H,98H,10H,10H,10H,10H,10H,10H,10H,10H,/* 24作 */
       00H,00H,04H,0FEH,80H,80H,90H,0F8H,80H,80H,88H,0FCH,80H,80H,80H,80H,
       08H,08H,08H,48H,28H,2FH,08H,08H,18H,28H,49H,0C9H,9H,0AH,0CH,08H,/* 25状 */
       40H,50H,48H,40H,44H,0FEH,40H,40H,0A0H,0A0H,10H,10H,8H,0EH,04H,00H,
       01H,01H,0FFH,01H,02H,04H,0AH,31H,0C0H,02H,29H,29H,28H,48H,07H,00H,/* 26态 */
       00H,04H,0FEH,00H,80H,040H,30H,0EH,04H,00H,10H,08H,24H,24H,0E0H,00H,
       10H,7EH,10H,28H,7EH,08H,0FEH,09H,0AH,00H,1FH,10H,1FH,10H,1FH,10H,/* 27暂 */
       0CH,0F0H,80H,84H,0FEH,90H,90H,10H,10H,10H,0F8H,10H,0F0H,10H,0F0H,10H,
       10H,10H,17H,20H,23H,62H,0A3H,20H,2FH,28H,33H,20H,20H,20H,21H,20H,/* 28停 */
       80H,48H,0FCH,0H,0F8H,08H,0F8H,00H,0FEH,02H,0F4H,40H,40H,40H,40H,80H,
       01H,01H,01H,11H,11H,11H,11H,11H,11H,11H,11H,11H,11H,11H,0FFH,00H,/* 29=止 */
       00H,00H,00H,00H,00H,10H,0F8H,00H,00H,00H,00H,00H,00H,04H,0FEH,00H);
  VAR M WORD;
  VAR (I,J,K) BYTE;
  IF BP=0FFH THEN GOTO DIS2;/* BB>0 为数据刷新 */
  IF BP=55H THEN GOTO DIS1;
  ADR=0800H;/* 图形区首址 */
  M=ADR;
  AA=0;
  CI=ADR;
  DO K=0 TO 6;     /* K汉字行数,最多为8行 */
    DO I=0 TO 14;  /* I 每行汉字符数=15  */
      DO J=0 TO 15;/* 1汉字符行数=16     */
        DAT1=ADRL;
        DAT2=ADRH;
  	    COM=24H;     /* 地址指针位置  */
  	    CALL OUT1;
  	    CALL STUS;
        OULCD=X(BUF(I+K*15)).Y(J); 
  	    CALL STUS;
        IND=0C0H; /* 自动写设置  */
        CALL STUS;
        OULCD=X(BUF(I+K*15)).Y(J+16);
  	    CALL STUS;
        IND=0C0H; /* 自动写设置  */
        ADR=ADR+20H;
      END;    
      M=M+2;
      ADR=M;
    END;
    CI=CI+512;
    ADR=CI;
    M=ADR;
  END;

DIS1:ADR=1600H; /* */
     K=7;       /* */
     M=ADR;     /* */
     DO I=0 TO 14;  /* I 每行汉字符数=15  */
      DO J=0 TO 15;/* 1汉字符行数=16     */
        DAT1=ADRL;
        DAT2=ADRH;
  	    COM=24H;     /* 地址指针位置  */
  	    CALL OUT1;
  	    CALL STUS;
        OULCD=X(BUF(I+K*15)).Y(J); 
  	    CALL STUS;
        IND=0C0H; /* 自动写设置  */
        CALL STUS;
        OULCD=X(BUF(I+K*15)).Y(J+16);
  	    CALL STUS;
        IND=0C0H; /* 自动写设置  */
        ADR=ADR+20H;
      END;    
      M=M+2;
      ADR=M;
    END;

DIS2:CI=168;      /* 温度数据显示,ZBUF(0)=实际温度,ZBUF(1)=设定温度 */
     DO I=0 TO 1;
      AA=0;
      DAT1=CIL;   /* 低8位地址 */
      DAT2=CIH;   /* 高8位地址 */
      COM=24H;  
      CALL OUT1;/* 文本区地址 */
      AA=1;
      DAT2=ZBUF(I)/100+10H;   /* 显示码,西文 */
      J=DAT2-10H;
      COM=0C0H;
      CALL OUT1;
      DAT2=(ZBUF(I)-J*100)/10+10H;
      K=DAT2-10H;
      CALL OUT1;
      DAT2=0EH;   /* 显示码,西文小数点 */
      CALL OUT1;
      DAT2=(ZBUF(I)-J*100-K*10)+10H;
      CALL OUT1;
      CI=184;
     END;        /* 温度数据显示 */

    CI=233;      /* 时间数据显示,ZBUF(2)=实际时间,ZBUF(3)=设定时间,单位分 */
    DO I=2 TO 3;
      AA=0;
      DAT1=CIL;   /* 低8位地址 */
      DAT2=CIH;   /* 高8位地址 */
      COM=24H;  
      CALL OUT1;/* 文本区地址 */
      AA=1;
      DAT2=ZBUF(I)/100+10H;   /* 显示码=数据+10H,西文 */
      J=DAT2-10H;
      COM=0C0H;
      CALL OUT1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -