📄 lcd.c
字号:
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 + -