📄 1.s
字号:
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x00,0x00,0xFF,0xF8,0x12,0x08,0x12,0x48,0x12,0x48,0x12,0x48,0x7E,0x48,0x12,0x48,
; 0x12,0x48,0x12,0xA8,0x1C,0xA0,0xE1,0x22,0x01,0x22,0x02,0x22,0x04,0x1E,0x08,0x00,
;
; /*-- 文字: 在 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x02,0x00,0x02,0x00,0x7F,0xFE,0x04,0x00,0x04,0x00,0x08,0x40,0x18,0x40,0x17,0xFC,
; 0x30,0x40,0x50,0x40,0x90,0x40,0x10,0x40,0x10,0x40,0x17,0xFE,0x10,0x00,0x00,0x00,
;
; /*-- 文字: 与 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x00,0x00,0x08,0x00,0x08,0x04,0x0F,0xFE,0x08,0x00,0x08,0x00,0x0F,0xFC,0x00,0x04,
; 0x00,0x04,0x00,0x24,0x7F,0xF4,0x00,0x04,0x00,0x04,0x00,0x48,0x00,0x30,0x00,0x00,
;
; /*-- 文字: 未 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x03,0x00,
; 0x03,0x80,0x05,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
;
; /*-- 文字: 来 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x09,0x30,0x05,0x20,0x03,0x40,0x7F,0xFE,
; 0x01,0x80,0x03,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
;
; /*-- 文字: 却 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x08,0x00,0x08,0x7C,0x08,0x44,0x7F,0x44,0x08,0x44,0x08,0x44,0x08,0x44,0xFF,0x44,
; 0x10,0x44,0x12,0x44,0x21,0x44,0x27,0xD4,0x79,0x48,0x20,0x40,0x00,0x40,0x00,0x40,
;
; /*-- 文字: 由 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
; 0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x20,0x08,0x00,0x00,
;
; /*-- 文字: 我 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
; 0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02,
;
;
; /*-- 文字: 们 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x0A,0x00,0x09,0x00,0x11,0xBC,0x11,0x04,0x34,0x04,0x24,0x04,0x64,0x04,0xA4,0x04,
; 0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x14,0x24,0x08,0x00,0x00,
;
;
; /*-- 文字: 掌 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x11,0x10,0x09,0x20,0x7F,0xFE,0x40,0x04,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x00,
; 0x3F,0xF0,0x01,0x00,0x3F,0xF8,0x01,0x00,0x7F,0xFC,0x01,0x00,0x05,0x00,0x02,0x00,
;
; /*-- 文字: 握 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
; 0x20,0x00,0x23,0xFC,0x22,0x04,0xFB,0xFC,0x22,0x00,0x23,0xFE,0x2A,0x40,0x32,0x88,
; 0x63,0xFC,0xA2,0x24,0x22,0x20,0x23,0xFC,0x24,0x20,0x24,0x20,0xAB,0xFE,0x40,0x00,
; };
; //下面是数字储存数组
; const data1[10][16]=
; {
; /*-- 文字: 0 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},
;
; /*-- 文字: 1 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00},
;
; /*-- 文字: 2 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00},
;
; /*-- 文字: 3 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00},
;
; /*-- 文字: 4 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00},
;
; /*-- 文字: 5 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00},
;
; /*-- 文字: 6 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00},
;
; /*-- 文字: 7 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},
;
; /*-- 文字: 8 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},
;
; /*-- 文字: 9 --*/
; /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
; {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00}
; };
; //下面是驱动行 驱动74LS154
; const uchar ROW[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};//行控制数组
; #pragma data:data
; /***************************************************************************************************
; 把上述代码放在code区
; ****************************************************************************************************/
;
; /***************************************************************************************************
; 下面32*80大点阵驱动程序
; ****************************************************************************************************/
; //送绿色数据
; void Send_Byte_DG(uchar data)
; {
.dbline 231
; uchar i=0;
clr R20
.dbline 232
; clr_DR( );
cbi 0x18,7
.dbline 233
; for(i=0;i<8;i++)
xjmp L21
L18:
.dbline 234
; {
.dbline 235
; clr_CLK();
cbi 0x18,5
.dbline 236
; if((data&0x80)==0)
sbrc R16,7
rjmp L22
.dbline 237
; clr_DG();
cbi 0x18,6
xjmp L23
L22:
.dbline 239
; else//列控制
; set_DG();
sbi 0x18,6
L23:
.dbline 240
sbi 0x18,5
.dbline 241
lsl R16
.dbline 242
L19:
.dbline 233
inc R20
L21:
.dbline 233
cpi R20,8
brlo L18
.dbline 243
; set_CLK();
; data<<=1;
; }
; clr_DG();
cbi 0x18,6
.dbline -2
L17:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 16 c
.dbend
.dbfunc e Send_Byte_DR _Send_Byte_DR fV
; i -> R20
; data -> R16
.even
_Send_Byte_DR::
xcall push_gset1
.dbline -1
.dbline 247
; }
; //送红色数据
; void Send_Byte_DR(uchar data)
; {
.dbline 248
; uchar i=0;
clr R20
.dbline 249
; clr_DG();
cbi 0x18,6
.dbline 250
; for(i=0;i<8;i++)
xjmp L28
L25:
.dbline 251
; {
.dbline 252
; clr_CLK();
cbi 0x18,5
.dbline 253
; if((data&0x80)==0)
sbrc R16,7
rjmp L29
.dbline 254
; clr_DR();
cbi 0x18,7
xjmp L30
L29:
.dbline 256
; else//列控制 该位所在列的二极管得正电位 在允许接地的情况下发光!!!
; set_DR();
sbi 0x18,7
L30:
.dbline 257
sbi 0x18,5
.dbline 258
lsl R16
.dbline 259
L26:
.dbline 250
inc R20
L28:
.dbline 250
cpi R20,8
brlo L25
.dbline 260
; set_CLK();
; data<<=1;
; }
; clr_DR();
cbi 0x18,7
.dbline -2
L24:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 16 c
.dbend
.dbfunc e Send_Byte_DR_DG _Send_Byte_DR_DG fV
; i -> R20
; data -> R16
.even
_Send_Byte_DR_DG::
xcall push_gset1
.dbline -1
.dbline 264
; }
; //送橙色数据
; void Send_Byte_DR_DG(uchar data)
; {
.dbline 265
; uchar i=0;
clr R20
.dbline 266
; for(i=0;i<8;i++)
xjmp L35
L32:
.dbline 267
; {
.dbline 268
; clr_CLK();
cbi 0x18,5
.dbline 270
;
; if((data&0x80)==0)
sbrc R16,7
rjmp L36
.dbline 271
; {
.dbline 272
; clr_DG();
cbi 0x18,6
.dbline 273
; clr_DR();
cbi 0x18,7
.dbline 274
; }
xjmp L37
L36:
.dbline 276
; else//列控制 该位所在列的二极管得正电位 在允许接地的情况下发光!!!
; {
.dbline 277
; set_DR();
sbi 0x18,7
.dbline 278
; set_DG();
sbi 0x18,6
.dbline 279
; }
L37:
.dbline 280
sbi 0x18,5
.dbline 281
lsl R16
.dbline 282
L33:
.dbline 266
inc R20
L35:
.dbline 266
cpi R20,8
brlo L32
.dbline 283
; set_CLK();
; data<<=1;
; }
; clr_DR();
cbi 0x18,7
.dbline 284
; clr_DG();
cbi 0x18,6
.dbline -2
L31:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r data 16 c
.dbend
.dbfunc e putin _putin fV
; i -> R20
; point -> R16
.even
_putin::
xcall push_gset1
.dbline -1
.dbline 288
; }
; //将汉字符装入显示寄存器
; void putin (uchar point)//字符载入函数
; {
.dbline 290
; uchar i;//定义变量用于数据提取指针
; for(i=0;i<16;i++)
clr R20
xjmp L42
L39:
.dbline 291
.dbline 292
ldi R24,32
mul R24,R16
movw R2,R0
ldi R24,<_data
ldi R25,>_data
add R2,R24
adc R3,R25
ldi R24,2
mul R24,R20
movw R30,R0
add R30,R2
adc R31,R3
lpm R30,Z
ldi R24,58
mul R24,R20
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
lds R26,_bn
clr R27
add R26,R2
adc R27,R3
st x,R30
.dbline 293
ldi R24,32
mul R24,R16
movw R2,R0
ldi R24,<_data
ldi R25,>_data
add R2,R24
adc R3,R25
ldi R24,2
mul R24,R20
movw R30,R0
adiw R30,1
add R30,R2
adc R31,R3
lpm R30,Z
ldi R24,58
mul R24,R20
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
lds R26,_bn
clr R27
adiw R26,1
add R26,R2
adc R27,R3
st x,R30
.dbline 294
L40:
.dbline 290
inc R20
L42:
.dbline 290
cpi R20,16
brsh X0
xjmp L39
X0:
.dbline 295
; {
; Ledplay[i][bn]=data[point][2*i]; //行储存转化为列储存
; Ledplay[i][bn+1]=data[point][(2*i)+1]; //行储存转化为列储存
; }
; bn+=2;
lds R24,_bn
subi R24,254 ; addi 2
sts _bn,R24
.dbline -2
L38:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r point 16 c
.dbend
.dbfunc e putin1 _putin1 fV
; i -> R20
; point -> R16
.even
_putin1::
xcall push_gset1
.dbline -1
.dbline 300
; }
;
; //将数字符装入显示寄存器
; void putin1 (uchar point)//字符载入函数 载入第point个汉字
; {
.dbline 302
; uchar i;//定义变量用于数据提取指针
; for(i=0;i<16;i++)
clr R20
xjmp L47
L44:
.dbline 303
.dbline 304
ldi R24,32
mul R24,R16
movw R2,R0
ldi R24,<_data1
ldi R25,>_data1
add R2,R24
adc R3,R25
ldi R24,2
mul R24,R20
movw R30,R0
add R30,R2
adc R31,R3
lpm R0,Z+
lpm R1,Z
movw R30,R0
ldi R24,58
mul R24,R20
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
lds R26,_bn
clr R27
add R26,R2
adc R27,R3
st x,R30
.dbline 305
L45:
.dbline 302
inc R20
L47:
.dbline 302
cpi R20,16
brlo L44
.dbline 306
; {
; Ledplay[i][bn]=data1[point][i];
; }
; bn++;
lds R24,_bn
subi R24,255 ; addi 1
sts _bn,R24
.dbline -2
L43:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r point 16 c
.dbend
.dbfunc e clearRAM _clearRAM fV
; b -> R16
; a -> R18
.even
_clearRAM::
.dbline -1
.dbline 310
; }
; //显示存器清空(0x00)
; void clearRAM (void)
; {//寄存器清空函数
.dbline 312
; uchar a,b;//定义变量用于清空数据指针fyhh
; for(b=0;b<17;b++)
clr R16
xjmp L52
L49:
.dbline 313
; {
.dbline 314
clr R18
xjmp L56
L53:
.dbline 314
.dbline 315
ldi R24,58
mul R24,R16
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
mov R30,R18
clr R31
add R30,R2
adc R31,R3
clr R2
std z+0,R2
.dbline 316
L54:
.dbline 314
inc R18
L56:
.dbline 314
cpi R18,42
brlo L53
.dbline 317
L50:
.dbline 312
inc R16
L52:
.dbline 312
cpi R16,17
brlo L49
.dbline -2
L48:
.dbline 0 ; func end
ret
.dbsym r b 16 c
.dbsym r a 18 c
.dbend
.dbfunc e clearping _clearping fV
; j -> R20
.even
_clearping::
xcall push_gset1
.dbline -1
.dbline 321
; for(a=0;a<42;a++){//指向40个寄存器
; Ledplay[b][a]=0;//将指向的寄存器清空
; }
; }
; }
; //清屏
; void clearping(void)
; {unsigned char j;
.dbline 322
; clr_STB();
cbi 0x18,4
.dbline 323
; for(j=0;j<20;j++)//20*8列都不显示红‘绿色
clr R20
xjmp L61
L58:
.dbline 324
clr R16
xcall _Send_Byte_DR_DG
L59:
.dbline 323
inc R20
L61:
.dbline 323
cpi R20,20
brlo L58
.dbline 325
; Send_Byte_DR_DG(0x00);//8位的各个所在列都不显示红‘绿色
; set_STB();//锁存
sbi 0x18,4
.dbline -2
L57:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbend
.dbfunc e DisPlay_onetime _DisPlay_onetime fV
; i -> R22
; j -> R10
; colour -> R20
.even
_DisPlay_onetime::
xcall push_gset4
mov R20,R16
.dbline -1
.dbline 330
; }
; //显示一次板面汉字
; void DisPlay_onetime(unsigned char colour)
; //colour=0\1\2分别为红\绿\橙色显示
; {
.dbline 332
; uchar i,j;
; for(i=0;i<16;i++)//扫描16行
clr R22
xjmp L66
L63:
.dbline 333
; {
.dbline 334
; clr_STB();
cbi 0x18,4
.dbline 335
; for(j=0;j<20;j++)//每一片点阵出现的第一个汉字从第|Jmax-20|列(从输入端开始数)开始入x=20时每一片点阵出现的第一个汉字从第0个字位开始入
clr R10
xjmp L70
L67:
.dbline 336
; { //*本版面最多能显示10个字,即20列(Ledplay的前20 列)其他汉字通过移动(把20列以后的字信号移到前20列范围内,即版内)
.dbline 337
; switch(colour)
mov R12,R20
clr R13
tst R12
brne X1
tst R13
breq L74
X1:
movw R24,R12
cpi R24,1
ldi R30,0
cpc R25,R30
breq L75
cpi R24,2
ldi R30,0
cpc R25,R30
breq L76
xjmp L72
X2:
.dbline 338
; {
L74:
.dbline 339
; case 0: Send_Byte_DR(Ledplay[i][j]);
ldi R24,58
mul R24,R22
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
ldd R16,z+0
xcall _Send_Byte_DR
.dbline 340
; break;
xjmp L72
L75:
.dbline 341
; case 1: Send_Byte_DG(Ledplay[i][j]);
ldi R24,58
mul R24,R22
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
ldd R16,z+0
xcall _Send_Byte_DG
.dbline 342
; break;
xjmp L72
L76:
.dbline 343
; case 2: Send_Byte_DR_DG(Ledplay[i][j]);
ldi R24,58
mul R24,R22
movw R2,R0
ldi R24,<_Ledplay
ldi R25,>_Ledplay
add R2,R24
adc R3,R25
mov R30,R10
clr R31
add R30,R2
adc R31,R3
ldd R16,z+0
xcall _Send_Byte_DR_DG
.dbline 344
; break;
.dbline 345
; default:break;
L72:
.dbline 347
L68:
.dbline 335
inc R10
L70:
.dbline 335
mov R24,R10
cpi R24,20
brsh X3
xjmp L67
X3:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -