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

📄 lcd.c

📁 C51 DOS/WINDOWS下的MCS51系列液晶显示器(LCD)的C驱动程序
💻 C
📖 第 1 页 / 共 3 页
字号:
      DAT2=(ZBUF(I)-J*100)/10+10H;
      K=DAT2-10H;
      CALL OUT1;
      DAT2=(ZBUF(I)-J*100-K*10)+10H;
      CALL OUT1;
      CI=249;
    END;        /* 时间数据显示 */

    CI=296;      /* 频率数据显示,ZBUF(4)=实际时间,ZBUF(5)=设定时间,单位HZ */
    DO I=4 TO 5;
      AA=0;
      DAT1=CIL;   /* 低8位地址 */
      DAT2=CIH;   /* 高8位地址 */
      COM=24H;  
      CALL OUT1;/* 文本区地址 */
      AA=1;
      DAT2=ZBUF(I)/1000+10H;   /* 显示码=数据+10H,西文 */
      J=DAT2-10H;
      COM=0C0H;
      CALL OUT1;
      DAT2=(ZBUF(I)-J*1000)/100+10H;
      K=DAT2-10H;
      CALL OUT1;
      DAT2=(ZBUF(I)-J*1000-K*100)/10+10H;
      DAT1=DAT2-10H;
      CALL OUT1;
      DAT2=(ZBUF(I)-J*1000-K*100-DAT1*10)+10H;
      CALL OUT1;
      CI=312;
    END;        /* 频率数据显示 */

    CI=361;/* 模式显示 */
    AA=0;
    DAT1=CIL;   /* 低8位地址 */
    DAT2=CIH;   /* 高8位地址 */
    COM=24H;  
    CALL OUT1;/* 文本区地址 */
    AA=1;
    DAT2=ZBUF(6)+10H; /* 显示码=数据+10Hh,西文 */
    COM=0C0H;
    CALL OUT1; /* 运行模式显示 */
    CI=377;
    AA=0;
    DAT1=CIL;   /* 低8位地址 */
    DAT2=CIH;   /* 高8位地址 */
    COM=24H;  
    CALL OUT1;/* 文本区地址 */
    AA=1;
    DAT2=ZBUF(7)+10H;
    COM=0C0H;  
    CALL OUT1; /* 设置模式显示 */
END DISPLAY;


  T0INT:PROCEDURE INTERRUPT 1;/* 定时器中断 */ 
    TH0=0;  
    TL0=0; 
  END T0INT; 

  T1INT:PROCEDURE INTERRUPT 3;/* 定时器定时中断 */ 
    TH1=3CH;   /* 定时系数高8位,3CAFH=50毫秒,在12M时钟;EC78H=10毫秒在6M时钟 */ 
    TL1=0AFH;  /* 定时系数低8位 */
    INA=INA+1;       
    IF INA=19 THEN DO;      /* 1秒到,下列程序需要50ms */
                    DD=DD+1;/* 秒单元加1 */
                    IF DD=61 THEN DD=0;
                    INA=0; /* 50毫秒计数单元回零 */
                    TR1=0; /* 关定时器T1 */
                    TH0=0;
                    TL0=0;  /* 计数器回零 */
                    TR2=0;  /* */
        Ding1:if T0=1 then do;/* TMP4输入脉冲在T0处已反相,T1为低,T2为高 */
                 Ding2:if T0=0 then do;
                                     TR0=1;/*开T0,高信号开始计数 */
                               Ding3:if T0=1 then do;
                                                   TR0=0;   /*关T0*/
                                                   TTH=TH0; /*取T1 TMP4*/
                                                   TTL=TL0; 
                                                   TH0=0;   /* T0清零 */
                                                   TL0=0;
                                                   TR0=1;   /*开T0*/
                                          Ding4:if T0=0 then do;
                                                    TR0=0;   /*关T0*/
                                                    DIH=TH0; /*取T1 TMP4*/
                                                    DIL=TL0; /* 带!!!为T1大于8ms时,采用公式*/
                                                    DI=DI/50;    /* DI=DI/100    !!!*/
                                                    TT=(8*TT)/DI;/* TT=(4*TT)/DI !!!*/
                                                    IF TT>235 THEN TT=235;
                                                    TT=(235-TT)*10;/*TT=235-((400*TT)/DI);*/
                                                      GOTO ding5;  
                                                             End;
                                                        Else goto ding4;     
                                                   End;
                                             Else goto ding3;    
                                    End;
                               else goto ding2;
                           End;
                      Else goto ding1;   
             Ding5:TR1=1;  /* 开定时器T1 */
                   ER=1;
                   ZBUF(0)=TT;  /* =380 */
                   END; 

    IF RUN=1 THEN DO;/* 调制输出电极脉冲 */
                   INB=INB+1;
                   if am=0 then do; /* 显示时,不能开T2定时器,T493C要误显示 */
                   IF INB<20 THEN TR2=1;/* 开电脉冲 */
                             ELSE TR2=0;/* 关电脉冲 */
                                end;  
                   IF INB>(20+ZBUF(7)*8) THEN INB=0;/* ZBUF(7)设置模式编号X50毫秒 */ 
                  END;
   enable;
  END T1INT;
  
  T2INT:PROCEDURE INTERRUPT 5;/* 定时器定时中断,由TR2控制 */ 
    VAR I BYTE;
    TF2=0;        /*   */
    P1_1=1; 
    P1_1=0;       /* 输出有效,高脉冲 */
    DO I=0 TO 2; /* DELAY 30US,OUTPUT 30US ACTIVE高脉冲30微秒 */
     I=I;
    END;
 T2I:P1_1=1;
    enable;
  END T2INT;

 RUNING:PROCEDURE; /* 运行程序 */
   IF RUN=1 THEN DO; /* RUN=1, 运行 */
                  OLED=OLED OR 10H; /* 运行指示灯亮 */
                  OULED=OLED;
           IF ZBUF(0)<(ZBUF(1)-10) THEN P1_0=0;  /* 实际值<设置值+1?度,开加热器 */
                                   ELSE P1_0=1;  /* 关加热器 */
                  IF DD>59 THEN DO;    /* 判别运行时间完成 */
                                  DD=0;
                                  ZBUF(2)=ZBUF(2)-1;/* 运行时间-1秒 */
                                  IF ZBUF(2)=0 THEN DO;/* 运行结束 */
                                                     RUN=0;/* 关运行标志  */
                                                     TR2=0;/* 关T2定时器 */
                                                     AP=1;
                                                     WORK=0;/* 关工作标志* /
                                                     RUNM=0;
                                                     P1_3=0;/* 蜂鸣器响 */
                                                    END;
                                END;
                  BUF(113)=23;
                  BUF(114)=24;
                 END;
            ELSE DO;   /* RUN=0 停止 */
                  OLED=OLED AND 0EFH; /* 关运行指示灯 */
                  OULED=OLED;
                  P1_0=1; /* 关加热器 */
                  P1_1=1; /* 关电脉冲 */
                  TR2=0;  /* 关T2定时器,在T2定时中断中输出电脉冲 */
                  IF RUNM=1 THEN DO;
                                  BUF(113)=27; /* 送"暂停" */
                                  BUF(114)=28;
                                 END;
                            ELSE DO;
                                  BUF(113)=28; /* 送"停止" */
                                  BUF(114)=29;
                                 END;
                 END;
 END RUNING; 

DOG:PROCEDURE;
    P1_4=1; /* EEPROM /CS=1 */
    P1_4=0; /* /CS=0        */
    P1_4=1; /* /CS=1        */
END DOG;

ST:SP=60H;
  P1=0FFH;
  TMOD=0001$0001B;   /* T0定时, T1定时中断*/
  TH1=3CH;   /* 定时系数高8位,3CAFH=50毫秒,在12M时钟;EC78H=10毫秒在6M时钟 */ 
  TL1=0AFH;  /* 定时系数低8位 */ 
  TH0=0;
  TL0=0;
  RCAP2H=0FEH; /* 65135D=0FE6FH */
  RCAP2L=6FH;  /* T2 INITIAL */
  T2CON=0;
  PT1=1; /* T1:HIGH INTERUPT LEVEL */
  PT2=0; /* T2:LOW  INTERUPT LEVEL */
  EA=1;
  ET0=0; /* 开定时器0中断 */
  ET1=1; /* 开定时器1中断 */
  ET2=1;
  TR0=0; /* =1开定时器0,=0关定时器T0 */
  TR1=0; /* =1开定时器1,=0关定时器T1 */
  TR2=0;
  RE=0;
  TT=0;AA=0;BB=0;RUN=0;RUNM=0;BP=0;AM=0;AP=0;   /*  */
  BUF(0)=0;BUF(1)=0;BUF(2)=0;BUF(3)=1;BUF(4)=2;/* 中文显示缓冲区第1行 */
  BUF(5)=3;BUF(6)=4;BUF(7)=5;BUF(8)=6;BUF(9)=0;
  BUF(10)=0;BUF(11)=0;BUF(12)=0;BUF(13)=0;BUF(14)=0;

  BUF(15)=0;BUF(16)=0;BUF(17)=0;BUF(18)=0;BUF(19)=0;/*中文显示缓冲区第2行*/
  BUF(20)=0;BUF(21)=0;BUF(22)=0;BUF(23)=0;BUF(24)=0;
  BUF(25)=0;BUF(26)=0;BUF(27)=0;BUF(28)=0;BUF(29)=0;

  BUF(30)=7;BUF(31)=8;BUF(32)=9;BUF(33)=10;BUF(34)=0;/*中文显示缓冲区第3行*/
  BUF(35)=0;BUF(36)=10;BUF(37)=0;BUF(38)=19;BUF(39)=20;
  BUF(40)=9;BUF(41)=10;BUF(42)=0;BUF(43)=0;BUF(44)=10;

  BUF(45)=11;BUF(46)=12;BUF(47)=13;BUF(48)=14;BUF(49)=0;/*中文显示缓冲区第4行*/
  BUF(50)=0;BUF(51)=21;BUF(52)=0;BUF(53)=19;BUF(54)=20;
  BUF(55)=13;BUF(56)=14;BUF(57)=0;BUF(58)=0;BUF(59)=21;

  BUF(60)=11;BUF(61)=12;BUF(62)=15;BUF(63)=16;BUF(64)=0;/*中文显示缓冲区第5行*/
  BUF(65)=0;BUF(66)=22;BUF(67)=0;BUF(68)=19;BUF(69)=20;
  BUF(70)=15;BUF(71)=16;BUF(72)=0;BUF(73)=0;BUF(74)=22;

  BUF(75)=11;BUF(76)=12;BUF(77)=17;BUF(78)=18;BUF(79)=0;/*中文显示缓冲区第6行*/
  BUF(80)=0;BUF(81)=0;BUF(82)=0;BUF(83)=19;BUF(84)=20;
  BUF(85)=17;BUF(86)=18;BUF(87)=0;BUF(88)=0;BUF(89)=0;

  BUF(90)=0;BUF(91)=0;BUF(92)=0;BUF(93)=0;BUF(94)=0;/*中文显示缓冲区第7行*/
  BUF(95)=0;BUF(96)=0;BUF(97)=0;BUF(98)=0;BUF(99)=0;
  BUF(100)=0;BUF(101)=0;BUF(102)=0;BUF(103)=0;BUF(104)=0;

  BUF(105)=0;BUF(106)=0;BUF(107)=23;BUF(108)=24;BUF(109)=25;/*中文显示缓冲区第8行*/
  BUF(110)=26;BUF(111)=0;BUF(112)=0; BUF(113)=28;BUF(114)=29; 
  BUF(115)=0;BUF(116)=0;BUF(117)=0;BUF(118)=0;BUF(119)=0;
    
  ZBUF(0)=300;ZBUF(1)=380;ZBUF(2)=0;ZBUF(3)=60;/* 实际温度、设置温度、运行时间、设置时间 */
  ZBUF(4)=0;ZBUF(5)=2500;ZBUF(6)=1;ZBUF(7)=1; /* 运行频率、设置频率、运行模式、设置模式 */
  INA=0;INB=0;OLED=0;GUNWEI=27;DD=0;ER=0;
  SWEND=0;STIME=0;SFREQ=0;SMODE=0;RESET=0;WORK=0;
  ee(0)=10;ee(1)=1;ee(2)=2;ee(3)=3;ee(4)=4;ee(5)=5;ee(6)=6;ee(7)=7;ee(8)=8;ee(9)=9;ee(10)=10;
  /*CALL EEPROMW;*/ /*CALL EEPROMR;*/
  TR1=1;/* 开定时器T1 */ 
  OULED=OLED;
  CALL INI;
  CALL CLERAM;
  OULED=OLED;
LP1:am=1;
    tr2=0;
    CALL DISPLAY;
    am=0;
LP2:CALL KEYIN;  /* KEYVAL IN CC 键值在CC中 */
    CALL RUNING; /* 运行 */
    IF AP>0 THEN DO;
                  AP=AP+1;
                  IF AP=3 THEN AP=0;
                  BUF(113)=28; /* 送"停止" */
                  BUF(114)=29;
                  GOTO LP3;/* 显示提示行 */
                 END;
    IF CC=0 THEN GOTO LP4;/* 无键,转移 */
    IF CC<7 THEN DO;
                 IF RUN=1 THEN GOTO LP3;/* ???!!! */
                 END;
    IF CC=1 THEN DO;/* 设置温度键 */
                 IF SWEND=1 THEN DO;/* 已有温度标记,退出温度设置  */
                                  GUNWEI=27; /* 光标回原位 */
                                  SWEND=0;/* 取消温度设置标记 */
                                  OLED=OLED AND 0FEH;/* 关温度设置灯 */

⌨️ 快捷键说明

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