📄 key_display.src
字号:
; SOURCE LINE # 137
; for(i=0;i!=12;i++) //送入12位数据,低位在前
; SOURCE LINE # 138
;---- Variable 'i?1049' assigned to Register 'R5' ----
CLR A
MOV R5,A
?C0022:
; {
; SOURCE LINE # 139
; if (cmd&1) {CH452_DIN_SET;}
; SOURCE LINE # 140
MOV A,R7
JNB ACC.0,?C0025
SETB CH452_DIN
SJMP ?C0026
?C0025:
; else {CH452_DIN_CLR;} // 输出位数据
; SOURCE LINE # 141
CLR CH452_DIN
?C0026:
; // 另外的表达CH452_DIN=cmd&1;
; CH452_DCLK_CLR;
; SOURCE LINE # 143
CLR CH452_DCLK
; cmd>>=1;
; SOURCE LINE # 144
MOV A,R6
CLR C
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
; DELAY_1US;
; SOURCE LINE # 145
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 146
NOP
NOP
; CH452_DCLK_SET; //上升沿有效
; SOURCE LINE # 147
SETB CH452_DCLK
; }
; SOURCE LINE # 148
INC R5
CJNE R5,#0CH,?C0022
?C0023:
; CH452_LOAD_SET; //加载数据,LOAD上升沿
; SOURCE LINE # 149
SETB CH452_LOAD
; DELAY_1US; //命令数据加载周期不小于6US,CH451不需要该周期
; SOURCE LINE # 150
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 151
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 152
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 153
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 154
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 155
NOP
NOP
; DELAY_1US; //命令数据加载周期不小于6US,CH451不需要该周期
; SOURCE LINE # 156
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 157
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 158
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 159
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 160
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 161
NOP
NOP
; DELAY_1US; //命令数据加载周期不小于6US,CH451不需要该周期
; SOURCE LINE # 162
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 163
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 164
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 165
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 166
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 167
NOP
NOP
;
; ENABLE_KEY_INTERRUPT;
; SOURCE LINE # 169
ORL EIE2,#020H
; }
; SOURCE LINE # 170
RET
; END OF _CH452_Write
;
;
;
; /***********CH452读出*********************/
; uchar CH452_Read( void )
RSEG ?PR?CH452_Read?KEY_DISPLAY
CH452_Read:
USING 0
; SOURCE LINE # 175
; {
; SOURCE LINE # 176
; uchar i;
; SOURCE LINE # 177
; uchar cmd,keycode; //定义命令字,和数据存储器
; DISABLE_KEY_INTERRUPT; //禁止键盘中断,防止传输过程中被CH452中断而进入中断服务程序中再次传输
; SOURCE LINE # 179
ANL EIE2,#0DFH
; cmd=0x07; //读按键的命令字
; SOURCE LINE # 180
;---- Variable 'cmd?1151' assigned to Register 'R7' ----
MOV R7,#07H
; CH452_LOAD_CLR;
; SOURCE LINE # 181
CLR CH452_LOAD
; for(i=0;i!=4;i++) // 只需要发出高4位,多发也可以,但应该确保最后留下的4位是该命令码
; SOURCE LINE # 182
;---- Variable 'i?1150' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0028:
; {
; SOURCE LINE # 183
; if (cmd&1) {CH452_DIN_SET;}
; SOURCE LINE # 184
MOV A,R7
JNB ACC.0,?C0031
SETB CH452_DIN
SJMP ?C0032
?C0031:
; else {CH452_DIN_CLR;} // 输出位数据
; SOURCE LINE # 185
CLR CH452_DIN
?C0032:
; CH452_DCLK_CLR;
; SOURCE LINE # 186
CLR CH452_DCLK
; cmd>>=1; //往右移一位
; SOURCE LINE # 187
MOV A,R7
CLR C
RRC A
MOV R7,A
; CH452_DCLK_SET; //产生时钟上升沿锁通知CH451输入位数据
; SOURCE LINE # 188
SETB CH452_DCLK
; }
; SOURCE LINE # 189
INC R6
CJNE R6,#04H,?C0028
?C0029:
; CH452_LOAD_SET; //产生加载上升沿通知CH451处理命令数据
; SOURCE LINE # 190
SETB CH452_LOAD
; keycode=0; //清除keycode
; SOURCE LINE # 191
;---- Variable 'keycode?1152' assigned to Register 'R7' ----
CLR A
MOV R7,A
; for(i=0;i!=7;i++)
; SOURCE LINE # 192
MOV R6,A
?C0033:
; {
; SOURCE LINE # 193
; keycode<<=1; //数据移入keycode,高位在前,低位在后
; SOURCE LINE # 194
MOV A,R7
ADD A,ACC
MOV R7,A
; if (CH452_DOUT) keycode++; //从高到低读入451的数据
; SOURCE LINE # 195
JNB CH452_DOUT,?C0036
INC R7
?C0036:
; CH452_DCLK_CLR; //产生时钟下升沿通知CH451输出下一位
; SOURCE LINE # 196
CLR CH452_DCLK
; CH452_DCLK_SET;
; SOURCE LINE # 197
SETB CH452_DCLK
; }
; SOURCE LINE # 198
INC R6
CJNE R6,#07H,?C0033
?C0034:
; CLEAR_KEY_INTER_FLAG; //清中断标志
; SOURCE LINE # 199
ANL P3IF,#07FH
; ENABLE_KEY_INTERRUPT;
; SOURCE LINE # 200
ORL EIE2,#020H
; return(keycode); //反回键值
; SOURCE LINE # 201
; }
; SOURCE LINE # 202
?C0037:
RET
; END OF CH452_Read
; /***********CH452初始化*********************/
; void CH452_Init(void)
RSEG ?PR?CH452_Init?KEY_DISPLAY
CH452_Init:
USING 0
; SOURCE LINE # 204
; {
; SOURCE LINE # 205
; //CH452_Write(CH452_RESET); //此套020板子千万不可用020复位,否则数码管不亮
; DELAY_1US;
; SOURCE LINE # 207
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 208
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 209
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 210
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 211
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 212
NOP
NOP
; CH452_Write( CH452_SYSON2 ); /* 启用键盘和数码管 */
; SOURCE LINE # 213
MOV R7,#03H
MOV R6,#04H
LCALL _CH452_Write
; CH452_Write( CH452_BCD ); /* BCD译码,8个数码管 */ // | CH452_SCANLIMIT_7
; SOURCE LINE # 214
MOV R7,#080H
MOV R6,#05H
LCALL _CH452_Write
; DELAY_1US;
; SOURCE LINE # 215
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 216
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 217
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 218
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 219
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 220
NOP
NOP
; }
; SOURCE LINE # 221
RET
; END OF CH452_Init
; /***********键盘数字转换(0-9)******************/
; uchar key_tran(uchar x)
RSEG ?PR?_key_tran?KEY_DISPLAY
_key_tran:
USING 0
; SOURCE LINE # 223
;---- Variable 'a?1354' assigned to Register 'R6' ----
;---- Variable 'x?1353' assigned to Register 'R7' ----
; {
; SOURCE LINE # 224
;
; uchar a;
; if(x==0x78){a=1;}
; SOURCE LINE # 227
CJNE R7,#078H,?C0039
MOV R6,#01H
?C0039:
; if(x==0x50){a=2;}
; SOURCE LINE # 228
CJNE R7,#050H,?C0040
MOV R6,#02H
?C0040:
; if(x==0x58){a=3;}
; SOURCE LINE # 229
CJNE R7,#058H,?C0041
MOV R6,#03H
?C0041:
; if(x==0x79){a=4;}
; SOURCE LINE # 230
CJNE R7,#079H,?C0042
MOV R6,#04H
?C0042:
; if(x==0x51){a=5;}
; SOURCE LINE # 231
CJNE R7,#051H,?C0043
MOV R6,#05H
?C0043:
; if(x==0x59){a=6;}
; SOURCE LINE # 232
CJNE R7,#059H,?C0044
MOV R6,#06H
?C0044:
; if(x==0x7A){a=7;}
; SOURCE LINE # 233
CJNE R7,#07AH,?C0045
MOV R6,#07H
?C0045:
; if(x==0x52){a=8;}
; SOURCE LINE # 234
CJNE R7,#052H,?C0046
MOV R6,#08H
?C0046:
; if(x==0x5A){a=9;}
; SOURCE LINE # 235
CJNE R7,#05AH,?C0047
MOV R6,#09H
?C0047:
; if(x==0x7B){a=0;}
; SOURCE LINE # 236
CJNE R7,#07BH,?C0048
CLR A
MOV R6,A
?C0048:
; return(a);
; SOURCE LINE # 237
XCH A,R7
MOV A,R6
XCH A,R7
;
; }
; SOURCE LINE # 239
?C0049:
RET
; END OF _key_tran
;
; /***********在数码管上0-3显示数字(包括小数点和负数)*****************/
; void BCDdisplay_l(float n)
RSEG ?PR?_BCDdisplay_l?KEY_DISPLAY
_BCDdisplay_l:
USING 0
; SOURCE LINE # 242
MOV n?1455+03H,R7
MOV n?1455+02H,R6
MOV n?1455+01H,R5
MOV n?1455,R4
; {
; SOURCE LINE # 243
; signed int x;
; signed char a[4],b,t;
; x=abs((int)n);
; SOURCE LINE # 246
LCALL ?C?CASTF
LCALL _abs
MOV x?1456,R6
MOV x?1456+01H,R7
; for(t=0;t<4;t++)
; SOURCE LINE # 247
CLR A
MOV t?1459,A
?C0050:
; CH452_Write((CH452_DIG0+ (t<<8))|16);
; SOURCE LINE # 248
MOV R7,t?1459
LCALL L?0093
INC t?1459
CLR C
MOV A,t?1459
XRL A,#080H
SUBB A,#084H
JC ?C0050
?C0051:
; //if( ( n < 0.00000001 ) || ( n > -0.00000001 ) ) CH452_Write((CH452_DIG0));
; //else
; //{
; for(t=0;t<4;t++)
; SOURCE LINE # 252
CLR A
MOV t?1459,A
?C0053:
; {
; SOURCE LINE # 253
; a[t]=x%10;
; SOURCE LINE # 254
MOV R6,x?1456
MOV R7,x?1456+01H
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?SIDIV
MOV A,#LOW (a?1457)
ADD A,t?1459
MOV R0,A
XCH A,@R0
MOV A,R5
XCH A,@R0
; x=x/10;
; SOURCE LINE # 255
MOV R6,x?1456
MOV R7,x?1456+01H
MOV R4,#00H
MOV R5,#0AH
LCALL ?C?SIDIV
MOV x?1456,R6
MOV x?1456+01H,R7
; if(a[t]) b=t;
; SOURCE LINE # 256
MOV A,#LOW (a?1457)
ADD A,t?1459
MOV R0,A
MOV A,@R0
JZ ?C0055
MOV b?1458,t?1459
; }
; SOURCE LINE # 257
?C0055:
INC t?1459
MOV A,t?1459
CJNE A,#04H,?C0053
?C0054:
;
; x=abs((int)n);
; SOURCE LINE # 259
MOV R7,n?1455+03H
MOV R6,n?1455+02H
MOV R5,n?1455+01H
MOV R4,n?1455
LCALL ?C?CASTF
LCALL _abs
MOV x?1456,R6
MOV x?1456+01H,R7
; if(x-(int)n)
; SOURCE LINE # 260
MOV R7,n?1455+03H
MOV R6,n?1455+02H
MOV R5,n?1455+01H
MOV R4,n?1455
LCALL ?C?CASTF
CLR C
MOV A,x?1456+01H
SUBB A,R7
MOV R7,A
MOV A,x?1456
SUBB A,R6
ORL A,R7
JZ ?C0057
; {
; SOURCE LINE # 261
; x=b+1;x<<=8;
; SOURCE LINE # 262
MOV R7,b?1458
MOV A,R7
RLC A
SUBB A,ACC
MOV R6,A
MOV A,R7
ADD A,#01H
MOV x?1456+01H,A
CLR A
ADDC A,R6
MOV x?1456,A
MOV A,x?1456+01H
MOV x?1456+01H,#00H
MOV x?1456,A
; CH452_Write((CH452_DIG1+x)|18);
; SOURCE LINE # 263
CLR A
ADD A,x?1456+01H
MOV R7,A
MOV A,x?1456
ADDC A,#09H
MOV R6,A
MOV A,R7
ORL A,#012H
MOV R7,A
LCALL _CH452_Write
; DELAY_1US;
; SOURCE LINE # 264
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 265
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 266
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 267
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 268
NOP
NOP
; }
; SOURCE LINE # 269
?C0057:
; for(t=0;t<=b;t++)
; SOURCE LINE # 270
CLR A
MOV t?1459,A
?C0058:
SETB C
MOV A,b?1458
XRL A,#080H
MOV R0,A
MOV A,t?1459
XRL A,#080H
SUBB A,R0
JNC ?C0059
; {
; SOURCE LINE # 271
; x=t;x<<=8;
; SOURCE LINE # 272
MOV R7,t?1459
MOV A,R7
RLC A
SUBB A,ACC
MOV x?1456,A
MOV x?1456+01H,R7
MOV A,x?1456+01H
MOV x?1456+01H,#00H
MOV x?1456,A
; CH452_Write((CH452_DIG1+x)|a[t]);
; SOURCE LINE # 273
MOV A,#LOW (a?1457)
ADD A,R7
MOV R0,A
MOV A,@R0
MOV R7,A
RLC A
SUBB A,ACC
MOV R6,A
CLR A
ADD A,x?1456+01H
MOV R5,A
MOV A,x?1456
ADDC A,#09H
ORL A,R6
MOV R6,A
MOV A,R5
ORL A,R7
MOV R7,A
LCALL _CH452_Write
; DELAY_1US;
; SOURCE LINE # 274
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 275
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 276
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 277
NOP
NOP
; DELAY_1US;
; SOURCE LINE # 278
NOP
NOP
;
; }
; SOURCE LINE # 280
INC t?1459
SJMP ?C0058
?C0059:
;
; CH452_Write(0x1F9);//写小数点
; SOURCE LINE # 282
MOV R7,#0F9H
MOV R6,#01H
LCALL _CH452_Write
; n=(n-(int)n);
; SOURCE LINE # 283
MOV R7,n?1455+03H
MOV R6,n?1455+02H
MOV R5,n?1455+01H
MOV R4,n?1455
MOV A,R4
PUSH ACC
MOV A,R5
PUSH ACC
MOV A,R6
PUSH ACC
MOV A,R7
PUSH ACC
LCALL ?C?CASTF
XCH A,R5
MOV A,R7
XCH A,R5
XCH A,R4
MOV A,R6
XCH A,R4
MOV A,R4
LCALL ?C?FCASTI
XCH A,R0
MOV A,R4
XCH A,R0
XCH A,R1
MOV A,R5
XCH A,R1
XCH A,R2
MOV A,R6
XCH A,R2
XCH A,R3
MOV A,R7
XCH A,R3
POP ACC
MOV R7,A
POP ACC
MOV R6,A
POP ACC
MOV R5,A
POP ACC
MOV R4,A
LCALL ?C?FPSUB
MOV n?1455+03H,R7
MOV n?1455+02H,R6
MOV n?1455+01H,R5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -