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

📄 1.lst

📁 点阵显示汉字
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0274) }
    0281 C002      RJMP	0x0284
(0275) else//列控制  该位所在列的二极管得正电位 在允许接地的情况下发光!!!
(0276) {
(0277) set_DR();
    0282 9AC7      SBI	0x18,7
(0278) set_DG();
    0283 9AC6      SBI	0x18,6
(0279) }
(0280) set_CLK();
    0284 9AC5      SBI	0x18,5
(0281) data<<=1;
    0285 0F00      LSL	R16
    0286 9543      INC	R20
    0287 3048      CPI	R20,0x8
    0288 F398      BCS	0x027C
(0282) }
(0283) clr_DR();
    0289 98C7      CBI	0x18,7
(0284) clr_DG();
    028A 98C6      CBI	0x18,6
    028B 940E04AE  CALL	pop_gset1
    028D 9508      RET
_putin:
  i                    --> R20
  point                --> R16
    028E 940E04AB  CALL	push_gset1
(0285) }
(0286) //将汉字符装入显示寄存器
(0287) void putin (uchar point)//字符载入函数
(0288) {  
(0289)     uchar i;//定义变量用于数据提取指针
(0290)     for(i=0;i<16;i++)
    0290 2744      CLR	R20
    0291 C037      RJMP	0x02C9
(0291) 	{ 
(0292) 	     Ledplay[i][bn]=data[point][2*i];                          //行储存转化为列储存
    0292 E280      LDI	R24,0x20
    0293 9F80      MUL	R24,R16
    0294 0110      MOVW	R2,R0
    0295 E584      LDI	R24,0x54
    0296 E090      LDI	R25,0
    0297 0E28      ADD	R2,R24
    0298 1E39      ADC	R3,R25
    0299 E082      LDI	R24,2
    029A 9F84      MUL	R24,R20
    029B 01F0      MOVW	R30,R0
    029C 0DE2      ADD	R30,R2
    029D 1DF3      ADC	R31,R3
    029E 91E4      LPM	R30,0(Z)
    029F E38A      LDI	R24,0x3A
    02A0 9F84      MUL	R24,R20
    02A1 0110      MOVW	R2,R0
    02A2 E685      LDI	R24,0x65
    02A3 E090      LDI	R25,0
    02A4 0E28      ADD	R2,R24
    02A5 1E39      ADC	R3,R25
    02A6 91A00060  LDS	R26,bn
    02A8 27BB      CLR	R27
    02A9 0DA2      ADD	R26,R2
    02AA 1DB3      ADC	R27,R3
    02AB 93EC      ST	R30,0(X)
(0293) 	     Ledplay[i][bn+1]=data[point][(2*i)+1];                     //行储存转化为列储存
    02AC E280      LDI	R24,0x20
    02AD 9F80      MUL	R24,R16
    02AE 0110      MOVW	R2,R0
    02AF E584      LDI	R24,0x54
    02B0 E090      LDI	R25,0
    02B1 0E28      ADD	R2,R24
    02B2 1E39      ADC	R3,R25
    02B3 E082      LDI	R24,2
    02B4 9F84      MUL	R24,R20
    02B5 01F0      MOVW	R30,R0
    02B6 9631      ADIW	R30,1
    02B7 0DE2      ADD	R30,R2
    02B8 1DF3      ADC	R31,R3
    02B9 91E4      LPM	R30,0(Z)
    02BA E38A      LDI	R24,0x3A
    02BB 9F84      MUL	R24,R20
    02BC 0110      MOVW	R2,R0
    02BD E685      LDI	R24,0x65
    02BE E090      LDI	R25,0
    02BF 0E28      ADD	R2,R24
    02C0 1E39      ADC	R3,R25
    02C1 91A00060  LDS	R26,bn
    02C3 27BB      CLR	R27
    02C4 9611      ADIW	R26,1
    02C5 0DA2      ADD	R26,R2
    02C6 1DB3      ADC	R27,R3
    02C7 93EC      ST	R30,0(X)
    02C8 9543      INC	R20
    02C9 3140      CPI	R20,0x10
    02CA F408      BCC	0x02CC
    02CB CFC6      RJMP	0x0292
(0294) 	}
(0295) 	bn+=2;
    02CC 91800060  LDS	R24,bn
    02CE 5F8E      SUBI	R24,0xFE
    02CF 93800060  STS	bn,R24
    02D1 940E04AE  CALL	pop_gset1
    02D3 9508      RET
_putin1:
  i                    --> R20
  point                --> R16
    02D4 940E04AB  CALL	push_gset1
(0296) }
(0297) 
(0298) //将数字符装入显示寄存器
(0299) void putin1 (uchar point)//字符载入函数  载入第point个汉字
(0300) {
(0301) 	uchar i;//定义变量用于数据提取指针
(0302)     for(i=0;i<16;i++)
    02D6 2744      CLR	R20
    02D7 C01D      RJMP	0x02F5
(0303) 	{ 
(0304) 	     Ledplay[i][bn]=data1[point][i];
    02D8 E280      LDI	R24,0x20
    02D9 9F80      MUL	R24,R16
    02DA 0110      MOVW	R2,R0
    02DB EB84      LDI	R24,0xB4
    02DC E092      LDI	R25,2
    02DD 0E28      ADD	R2,R24
    02DE 1E39      ADC	R3,R25
    02DF E082      LDI	R24,2
    02E0 9F84      MUL	R24,R20
    02E1 01F0      MOVW	R30,R0
    02E2 0DE2      ADD	R30,R2
    02E3 1DF3      ADC	R31,R3
    02E4 9005      LPM	R0,Z+
    02E5 9014      LPM	R1,0(Z)
    02E6 01F0      MOVW	R30,R0
    02E7 E38A      LDI	R24,0x3A
    02E8 9F84      MUL	R24,R20
    02E9 0110      MOVW	R2,R0
    02EA E685      LDI	R24,0x65
    02EB E090      LDI	R25,0
    02EC 0E28      ADD	R2,R24
    02ED 1E39      ADC	R3,R25
    02EE 91A00060  LDS	R26,bn
    02F0 27BB      CLR	R27
    02F1 0DA2      ADD	R26,R2
    02F2 1DB3      ADC	R27,R3
    02F3 93EC      ST	R30,0(X)
    02F4 9543      INC	R20
    02F5 3140      CPI	R20,0x10
    02F6 F308      BCS	0x02D8
(0305) 	}
(0306) 	bn++;
    02F7 91800060  LDS	R24,bn
    02F9 5F8F      SUBI	R24,0xFF
    02FA 93800060  STS	bn,R24
    02FC 940E04AE  CALL	pop_gset1
    02FE 9508      RET
(0307) }
(0308) //显示存器清空(0x00)
(0309) void clearRAM (void)
(0310) {//寄存器清空函数
(0311) 	uchar a,b;//定义变量用于清空数据指针fyhh
(0312) 	for(b=0;b<17;b++)
_clearRAM:
  b                    --> R16
  a                    --> R18
    02FF 2700      CLR	R16
    0300 C013      RJMP	0x0314
(0313) 	{
(0314) 	  for(a=0;a<42;a++){//指向40个寄存器
    0301 2722      CLR	R18
    0302 C00E      RJMP	0x0311
(0315) 		Ledplay[b][a]=0;//将指向的寄存器清空
    0303 E38A      LDI	R24,0x3A
    0304 9F80      MUL	R24,R16
    0305 0110      MOVW	R2,R0
    0306 E685      LDI	R24,0x65
    0307 E090      LDI	R25,0
    0308 0E28      ADD	R2,R24
    0309 1E39      ADC	R3,R25
    030A 2FE2      MOV	R30,R18
    030B 27FF      CLR	R31
    030C 0DE2      ADD	R30,R2
    030D 1DF3      ADC	R31,R3
    030E 2422      CLR	R2
    030F 8220      STD	Z+0,R2
    0310 9523      INC	R18
    0311 322A      CPI	R18,0x2A
    0312 F380      BCS	0x0303
    0313 9503      INC	R16
    0314 3101      CPI	R16,0x11
    0315 F358      BCS	0x0301
    0316 9508      RET
_clearping:
  j                    --> R20
    0317 940E04AB  CALL	push_gset1
(0316) 	  }
(0317) 	}
(0318) }
(0319) //清屏
(0320) void clearping(void)
(0321) {unsigned char j;
(0322)  clr_STB();	
    0319 98C4      CBI	0x18,4
(0323)      for(j=0;j<20;j++)//20*8列都不显示红‘绿色
    031A 2744      CLR	R20
    031B C003      RJMP	0x031F
(0324) 	 Send_Byte_DR_DG(0x00);//8位的各个所在列都不显示红‘绿色
    031C 2700      CLR	R16
    031D DF5A      RCALL	_Send_Byte_DR_DG
    031E 9543      INC	R20
    031F 3144      CPI	R20,0x14
    0320 F3D8      BCS	0x031C
(0325)      set_STB();//锁存
    0321 9AC4      SBI	0x18,4
    0322 940E04AE  CALL	pop_gset1
    0324 9508      RET
_DisPlay_onetime:
  i                    --> R22
  j                    --> R10
  colour               --> R20
    0325 940E04A5  CALL	push_gset4
    0327 2F40      MOV	R20,R16
(0326) }
(0327) //显示一次板面汉字
(0328) void DisPlay_onetime(unsigned char colour)
(0329) //colour=0\1\2分别为红\绿\橙色显示
(0330) {
(0331)   uchar i,j;	
(0332)   for(i=0;i<16;i++)//扫描16行 
    0328 2766      CLR	R22
    0329 C053      RJMP	0x037D
(0333)   {
(0334)      clr_STB();	 
    032A 98C4      CBI	0x18,4
(0335)         for(j=0;j<20;j++)//每一片点阵出现的第一个汉字从第|Jmax-20|列(从输入端开始数)开始入x=20时每一片点阵出现的第一个汉字从第0个字位开始入
    032B 24AA      CLR	R10
    032C C03A      RJMP	0x0367
(0336) 	 {                   //*本版面最多能显示10个字,即20列(Ledplay的前20 列)其他汉字通过移动(把20列以后的字信号移到前20列范围内,即版内)
(0337) 	  switch(colour)
    032D 2EC4      MOV	R12,R20
    032E 24DD      CLR	R13
    032F 20CC      TST	R12
    0330 F411      BNE	0x0333
    0331 20DD      TST	R13
    0332 F051      BEQ	0x033D
    0333 01C6      MOVW	R24,R12
    0334 3081      CPI	R24,1
    0335 E0E0      LDI	R30,0
    0336 079E      CPC	R25,R30
    0337 F099      BEQ	0x034B
    0338 3082      CPI	R24,2
    0339 E0E0      LDI	R30,0
    033A 079E      CPC	R25,R30
    033B F0E9      BEQ	0x0359
    033C C029      RJMP	0x0366
(0338) 	 {
(0339) 	  case 0: Send_Byte_DR(Ledplay[i][j]);
    033D E38A      LDI	R24,0x3A
    033E 9F86      MUL	R24,R22
    033F 0110      MOVW	R2,R0
    0340 E685      LDI	R24,0x65
    0341 E090      LDI	R25,0
    0342 0E28      ADD	R2,R24
    0343 1E39      ADC	R3,R25
    0344 2DEA      MOV	R30,R10
    0345 27FF      CLR	R31
    0346 0DE2      ADD	R30,R2
    0347 1DF3      ADC	R31,R3
    0348 8100      LDD	R16,Z+0
    0349 DF1A      RCALL	_Send_Byte_DR
(0340) 	        break;
    034A C01B      RJMP	0x0366
(0341) 	 case 1: Send_Byte_DG(Ledplay[i][j]);
    034B E38A      LDI	R24,0x3A
    034C 9F86      MUL	R24,R22
    034D 0110      MOVW	R2,R0
    034E E685      LDI	R24,0x65
    034F E090      LDI	R25,0
    0350 0E28      ADD	R2,R24
    0351 1E39      ADC	R3,R25
    0352 2DEA      MOV	R30,R10
    0353 27FF      CLR	R31
    0354 0DE2      ADD	R30,R2
    0355 1DF3      ADC	R31,R3
    0356 8100      LDD	R16,Z+0
    0357 DEF8      RCALL	_Send_Byte_DG
(0342) 	       break;  
    0358 C00D      RJMP	0x0366
(0343) 	 case 2: Send_Byte_DR_DG(Ledplay[i][j]);
    0359 E38A      LDI	R24,0x3A
    035A 9F86      MUL	R24,R22
    035B 0110      MOVW	R2,R0
    035C E685      LDI	R24,0x65
    035D E090      LDI	R25,0
    035E 0E28      ADD	R2,R24
    035F 1E39      ADC	R3,R25
    0360 2DEA      MOV	R30,R10
    0361 27FF      CLR	R31
    0362 0DE2      ADD	R30,R2
    0363 1DF3      ADC	R31,R3
    0364 8100      LDD	R16,Z+0
    0365 DF12      RCALL	_Send_Byte_DR_DG
    0366 94A3      INC	R10
    0367 2D8A      MOV	R24,R10
    0368 3184      CPI	R24,0x14
    0369 F408      BCC	0x036B
    036A CFC2      RJMP	0x032D
(0344) 	        break;
(0345) 	 default:break;
(0346) 	  }
(0347) 	 }
(0348) 	set_G();
    036B 9A90      SBI	0x12,0
(0349) 	delay_nus(2);
    036C E002      LDI	R16,2
    036D E010      LDI	R17,0
    036E DEB9      RCALL	_delay_nus
(0350)     set_STB();//锁存
    036F 9AC4      SBI	0x18,4
(0351) 	PORTB=ROW[i];//i行控制位   共阴的二极管允许了接地
    0370 EF84      LDI	R24,0xF4
    0371 E093      LDI	R25,3
    0372 2FE6      MOV	R30,R22
    0373 27FF      CLR	R31
    0374 0FE8      ADD	R30,R24
    0375 1FF9      ADC	R31,R25
    0376 91E4      LPM	R30,0(Z)
    0377 BBE8      OUT	0x18,R30
(0352) 	clr_G();//行控制有效
    0378 9890      CBI	0x12,0
(0353) 	delay_nus(displayTime);
    0379 EC08      LDI	R16,0xC8
    037A E010      LDI	R17,0
    037B DEAC      RCALL	_delay_nus
    037C 9563      INC	R22
    037D 3160      CPI	R22,0x10
    037E F408      BCC	0x0380
    037F CFAA      RJMP	0x032A
(0354)   }
(0355)   delay_nus(200);
    0380 EC08      LDI	R16,0xC8
    0381 E010      LDI	R17,0
    0382 DEA5      RCALL	_delay_nus
(0356)   set_G();
    0383 9A90      SBI	0x12,0
    0384 940E04A0  CALL	pop_gset4
    0386 9508      RET
_left_move:
  data1                --> R22
  data0                --> R20
  i                    --> R16
  j                    --> R18
    0387 940E04A9  CALL	push_gset2
(0357)  }
(0358)  //下面函数功能为把信号(汉字)前移
(0359)  void left_move(void)
(0360) {
(0361)   uchar data0,data1,i,j;
(0362)   for(i=0;i<16;i++)
    0389 2700      CLR	R16
    038A C037      RJMP	0x03C2
(0363)   {
(0364)     for(j=0;j<(howmany0+hanzishu)*2;j++)//如41=(howmany0+hanzishu)*2+1
    038B 2722      CLR	R18
    038C C031      RJMP	0x03BE
(0365) 	{
(0366) 	   data0=Ledplay[i][j];
    038D E38A      LDI	R24,0x3A
    038E 9F80      MUL	R24,R16
    038F 0110      MOVW	R2,R0
    0390 E685      LDI	R24,0x65
    0391 E090      LDI	R25,0
    0392 0E28      ADD	R2,R24
    0393 1E39      ADC	R3,R25
    0394 2FE2      MOV	R30,R18
    0395 27FF      CLR	R31
    0396 0DE2      ADD	R30,R2
    0397 1DF3      ADC	R31,R3
    0398 8140      LDD	R20,Z+0
(0367) 	   data1=Ledplay[i][j+1];
    0399 E38A      LDI	R24,0x3A
    039A 9F80      MUL	R24,R16
    039B 0110      MOVW	R2,R0
    039C E685      LDI	R24,0x65
    039D E090      LDI	R25,0
    039E 0E28      ADD	R2,R24
    039F 1E39      ADC	R3,R25
    03A0 2FE2      MOV	R30,R18
    03A1 27FF      CLR	R31
    03A2 9631      ADIW	R30,1
    03A3 0DE2      ADD	R30,R2
    03A4 1DF3      ADC	R31,R3
    03A5 8160      LDD	R22,Z+0
(0368) 	   Ledplay[i][j]=(data0<<1)|(data1>>7);//从第二个字符起它的信号始终没有掉失,
    03A6 E38A      LDI	R24,0x3A
    03A7 9F80      MUL	R24,R16
    03A8 0110      MOVW	R2,R0
    03A9 E685      LDI	R24,0x65
    03AA E090      LDI	R25,0
    03AB 0E28      ADD	R2,R24
    03AC 1E39      ADC	R3,R25
    03AD 2FE2      MOV	R30,R18
    03AE 27FF      CLR	R31
    03AF 0DE2      ADD	R30,R2
    03B0 1DF3      ADC	R31,R3
    03B1 2E26      MOV	R2,R22
    03B2 9426      LSR	R2
    03B3 9426      LSR	R2
    03B4 9426      LSR	R2
    03B5 9426      LSR	R2
    03B6 9426      LSR	R2
    03B7 9426      LSR	R2

⌨️ 快捷键说明

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