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

📄 1.lst

📁 点阵显示汉字
💻 LST
📖 第 1 页 / 共 3 页
字号:
    03B8 9426      LSR	R2
    03B9 2E34      MOV	R3,R20
    03BA 0C33      LSL	R3
    03BB 2832      OR	R3,R2
    03BC 8230      STD	Z+0,R3
    03BD 9523      INC	R18
    03BE 3328      CPI	R18,0x38
    03BF F408      BCC	0x03C1
    03C0 CFCC      RJMP	0x038D
    03C1 9503      INC	R16
    03C2 3100      CPI	R16,0x10
    03C3 F408      BCC	0x03C5
    03C4 CFC6      RJMP	0x038B
    03C5 940E049A  CALL	pop_gset2
    03C7 9508      RET
_left_MOVE_display:
  k                    --> R20
  i                    --> R22
  colour               --> R10
    03C8 940E04A7  CALL	push_gset3
    03CA 2EA0      MOV	R10,R16
(0369) 	}                                     //只不过是把第一列的信号给了上一16*16的第16列‘
(0370)   }									      //第一个字符(字体失去的那个字,所以第一是变动的。那个字体开始掉失那个字就为第一)始终从第一列
(0371) }     							          //信号开始失掉
(0372) 	                                      //两个for中的参数: 16是规格格式,41是扫描41列(0->40),显示10空字10汉字则要40列
(0373)                                           //多出的一列是为了用其最高位来补Ledplay[i][39](最后一列)的最低位(最后一列<<1有了最低们这个空位)
(0374)                                           //则要用多出的一列(0x00)的最最位来补(这列也可以以程序默认来补,即可删这行)。
(0375)                                           //若程序每次把汉字移动两列则要用二列来补。
(0376) void left_MOVE_display(unsigned char colour)
(0377) {  
(0378)      static uint king=0;
(0379)      uint i=0,k;
    03CB 2766      CLR	R22
    03CC 2777      CLR	R23
(0380) 	 king=0;
    03CD 2422      CLR	R2
    03CE 2433      CLR	R3
    03CF 92300062  STS	king+1,R3
    03D1 92200061  STS	king,R2
(0381) 	 bn=0;// 全局 列变量
    03D3 92200060  STS	bn,R2
(0382) 	 clearRAM();//使 Ledplay[i][j]所指空间清0
    03D5 DF29      RCALL	_clearRAM
(0383) 	 for(k=0;k<howmany0;k++){putin(position);}  //实质上是使 Ledplay[i][j]填入空字                    *****************************
    03D6 2744      CLR	R20
    03D7 2755      CLR	R21
    03D8 C004      RJMP	0x03DD
    03D9 E006      LDI	R16,6
    03DA DEB3      RCALL	_putin
    03DB 5F4F      SUBI	R20,0xFF
    03DC 4F5F      SBCI	R21,0xFF
    03DD 304A      CPI	R20,0xA
    03DE E0E0      LDI	R30,0
    03DF 075E      CPC	R21,R30
    03E0 F3C0      BCS	0x03D9
(0384) 	 for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
    03E1 2744      CLR	R20
    03E2 2755      CLR	R21
    03E3 C004      RJMP	0x03E8
    03E4 2F04      MOV	R16,R20
    03E5 DEA8      RCALL	_putin
    03E6 5F4F      SUBI	R20,0xFF
    03E7 4F5F      SBCI	R21,0xFF
    03E8 3142      CPI	R20,0x12
    03E9 E0E0      LDI	R30,0
    03EA 075E      CPC	R21,R30
    03EB F3C0      BCS	0x03E4
    03EC C01F      RJMP	0x040C
(0385) 	 while(1)
(0386) 	 {//开始移动
(0387) 	 for(i=0;i<shopshow;i++)//动态显示一段时间
    03ED 2766      CLR	R22
    03EE 2777      CLR	R23
    03EF C004      RJMP	0x03F4
(0388) 	 {
(0389)      DisPlay_onetime(colour);//*************************************************************
    03F0 2D0A      MOV	R16,R10
    03F1 DF33      RCALL	_DisPlay_onetime
    03F2 5F6F      SUBI	R22,0xFF
    03F3 4F7F      SBCI	R23,0xFF
    03F4 3069      CPI	R22,0x9
    03F5 E0E0      LDI	R30,0
    03F6 077E      CPC	R23,R30
    03F7 F3C0      BCS	0x03F0
(0390) 	 }
(0391) 	 left_move();
    03F8 DF8E      RCALL	_left_move
(0392) 	 king++;
    03F9 91800061  LDS	R24,king
    03FB 91900062  LDS	R25,king+1
    03FD 9601      ADIW	R24,1
    03FE 93900062  STS	king+1,R25
    0400 93800061  STS	king,R24
(0393) 	 if(king>159+16*18)
    0402 EB8F      LDI	R24,0xBF
    0403 E091      LDI	R25,1
    0404 90200061  LDS	R2,king
    0406 90300062  LDS	R3,king+1
    0408 1582      CP	R24,R2
    0409 0593      CPC	R25,R3
    040A F408      BCC	0x040C
(0394) 	 break;
    040B C001      RJMP	0x040D
    040C CFE0      RJMP	0x03ED
    040D 940E049D  CALL	pop_gset3
    040F 9508      RET
(0395) 	}//停止移动
(0396) 	/*for(i=0;i<600;i++)//静止显示一段时间***************************
(0397) 	{
(0398) 	 DisPlay_onetime(colour);
(0399) 	}*/
(0400) }
(0401) //不理想
(0402) /*void right_move(void)
(0403) {
(0404)   uchar data0,data1,i,j;
(0405)   for(i=0;i<16;i++)
(0406)   {
(0407)     for(j=0;j<(howmany0+hanzishu)*2+1;j++)//如41=(howmany0+hanzishu)*2+1
(0408) 	{
(0409) 	   data0=Ledplay[i][j];
(0410) 	   data1=Ledplay[i][j+1];
(0411) 	   Ledplay[i][j+1]=(data0<<7)|(data1>>1);//从第二个字符起它的信号始终没有掉失,
(0412) 	}                                     //只不过是把第一列的信号给了上一16*16的第16列‘
(0413)   }									      //第一个字符(字体失去的那个字,所以第一是变动的。那个字体开始掉失那个字就为第一)始终从第一列
(0414) }   
(0415) void right_MOVE_display(unsigned char colour)
(0416) {  
(0417)      static uint king=0;
(0418)      uint i=0,k;
(0419) 	 king=0;
(0420) 	 bn=0;// 全局 列变量
(0421) 	 clearRAM();//使 Ledplay[i][j]所指空间清0
(0422) 	 for(k=0;k<howmany0;k++){putin(position);}  //实质上是使 Ledplay[i][j]填入空字                    *****************************
(0423) 	 for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
(0424) 	 while(1)
(0425) 	 {//开始移动
(0426) 	 for(i=0;i<shopshow;i++)//动态显示一段时间
(0427) 	 {
(0428)      DisPlay_onetime(colour);//*************************************************************
(0429) 	 }
(0430) 	 right_move();
(0431) 	 king++;
(0432) 	 if(king>143)
(0433) 	 break;
(0434) 	}//停止移动
(0435) 	//for(i=0;i<600;i++)//静止显示一段时间***************************
(0436) 	//{
(0437) 	// DisPlay_onetime(colour);
(0438) 	//}//
(0439) }  	*/				
(0440) //下面数功能为把信号移
(0441) void UP_move(void)
(0442) {
(0443)   uchar i,j;
(0444)   for(j=0;j<(howmany0+hanzishu)*2;j++)
_UP_move:
  j                    --> R16
  i                    --> R18
    0410 2700      CLR	R16
    0411 C02C      RJMP	0x043E
(0445)   {
(0446)     for(i=0;i<16;i++)
    0412 2722      CLR	R18
    0413 C017      RJMP	0x042B
(0447) 	{
(0448) 	Ledplay[i][j]=Ledplay[i+1][j];//让本列的下一行的来取代自已的位置,来实现下一行信号下移的功能,第16行下移后的空位由多出的一行(0x00)
    0414 E38A      LDI	R24,0x3A
    0415 9F82      MUL	R24,R18
    0416 E98F      LDI	R24,0x9F
    0417 E090      LDI	R25,0
    0418 0110      MOVW	R2,R0
    0419 0E28      ADD	R2,R24
    041A 1E39      ADC	R3,R25
    041B 2FE0      MOV	R30,R16
    041C 27FF      CLR	R31
    041D 0DE2      ADD	R30,R2
    041E 1DF3      ADC	R31,R3
    041F 8020      LDD	R2,Z+0
    0420 E685      LDI	R24,0x65
    0421 E090      LDI	R25,0
    0422 0120      MOVW	R4,R0
    0423 0E48      ADD	R4,R24
    0424 1E59      ADC	R5,R25
    0425 2FE0      MOV	R30,R16
    0426 27FF      CLR	R31
    0427 0DE4      ADD	R30,R4
    0428 1DF5      ADC	R31,R5
    0429 8220      STD	Z+0,R2
    042A 9523      INC	R18
    042B 3120      CPI	R18,0x10
    042C F338      BCS	0x0414
(0449) 	}                             //来补,这是Ledplay有17行的所以了。
(0450) 	if(j<(howmany0+hanzishu)*2-10)
    042D 320E      CPI	R16,0x2E
    042E F470      BCC	0x043D
(0451) 	Ledplay[15][j]=Ledplay[0][j+10];//本程序开始时以10个空字占満版面,j=0时,把第6个字的信号给第一个字位最低行,j=1时把第7个字信号给第2个字
    042F E68F      LDI	R24,0x6F
    0430 E090      LDI	R25,0
    0431 2FE0      MOV	R30,R16
    0432 27FF      CLR	R31
    0433 0FE8      ADD	R30,R24
    0434 1FF9      ADC	R31,R25
    0435 8020      LDD	R2,Z+0
    0436 EC8B      LDI	R24,0xCB
    0437 E093      LDI	R25,3
    0438 2FE0      MOV	R30,R16
    0439 27FF      CLR	R31
    043A 0FE8      ADD	R30,R24
    043B 1FF9      ADC	R31,R25
    043C 8220      STD	Z+0,R2
    043D 9503      INC	R16
    043E 3308      CPI	R16,0x38
    043F F408      BCC	0x0441
    0440 CFD1      RJMP	0x0412
    0441 9508      RET
_UP_MOVE_display:
  k                    --> R20
  i                    --> R22
  colour               --> R10
    0442 940E04A7  CALL	push_gset3
    0444 2EA0      MOV	R10,R16
(0452) 	}                                //第10列即第6个字
(0453) }                              
(0454) void UP_MOVE_display(unsigned char colour)
(0455) {  
(0456)      static uint up=0;
(0457)      uint i=0,k=0;
    0445 2766      CLR	R22
    0446 2777      CLR	R23
    0447 2744      CLR	R20
    0448 2755      CLR	R21
(0458) 	 up=0;
    0449 2422      CLR	R2
    044A 2433      CLR	R3
    044B 92300064  STS	up+1,R3
    044D 92200063  STS	up,R2
(0459) 	 bn=0;
    044F 92200060  STS	bn,R2
(0460) 	 clearRAM();
    0451 DEAD      RCALL	_clearRAM
(0461) 	 for(k=0;k<howmany0;k++){putin(position);}//实质上是使 Ledplay[i][j]所指空间清0
    0452 C004      RJMP	0x0457
    0453 E006      LDI	R16,6
    0454 DE39      RCALL	_putin
    0455 5F4F      SUBI	R20,0xFF
    0456 4F5F      SBCI	R21,0xFF
    0457 304A      CPI	R20,0xA
    0458 E0E0      LDI	R30,0
    0459 075E      CPC	R21,R30
    045A F3C0      BCS	0x0453
(0462) 	 for(k=0;k<hanzishu;k++){putin(k);}//在这函数中通过clearRAM()0后"重新"载入字符
    045B 2744      CLR	R20
    045C 2755      CLR	R21
    045D C004      RJMP	0x0462
    045E 2F04      MOV	R16,R20
    045F DE2E      RCALL	_putin
    0460 5F4F      SUBI	R20,0xFF
    0461 4F5F      SBCI	R21,0xFF
    0462 3142      CPI	R20,0x12
    0463 E0E0      LDI	R30,0
    0464 075E      CPC	R21,R30
    0465 F3C0      BCS	0x045E
    0466 C01A      RJMP	0x0481
(0463) 	 while(1)
(0464) 	 {
(0465) 	 for(i=0;i<shopshow+6;i++)	 
    0467 2766      CLR	R22
    0468 2777      CLR	R23
    0469 C004      RJMP	0x046E
(0466)      DisPlay_onetime(colour);	 
    046A 2D0A      MOV	R16,R10
    046B DEB9      RCALL	_DisPlay_onetime
    046C 5F6F      SUBI	R22,0xFF
    046D 4F7F      SBCI	R23,0xFF
    046E 306F      CPI	R22,0xF
    046F E0E0      LDI	R30,0
    0470 077E      CPC	R23,R30
    0471 F3C0      BCS	0x046A
(0467) 	 UP_move();
    0472 DF9D      RCALL	_UP_move
(0468) 	 up++;
    0473 91800063  LDS	R24,up
    0475 91900064  LDS	R25,up+1
    0477 9601      ADIW	R24,1
    0478 93900064  STS	up+1,R25
    047A 93800063  STS	up,R24
(0469) 	 if(up==32*3)
    047C 3680      CPI	R24,0x60
    047D E0E0      LDI	R30,0
    047E 079E      CPC	R25,R30
    047F F409      BNE	0x0481
(0470) 	 break;
    0480 C001      RJMP	0x0482
    0481 CFE5      RJMP	0x0467
    0482 940E049D  CALL	pop_gset3
    0484 9508      RET
(0471) 	}
(0472) 	/*for(i=0;i<300;i++)
(0473) 	{
(0474) 	 DisPlay_onetime(colour);
(0475) 	}*/
(0476) }
(0477) /***************************************************************************************************
(0478)                                        上面32*80大点阵驱动程序
(0479) ****************************************************************************************************/
(0480) 
(0481) //端口初始化
(0482) void port_init(void)
(0483) {
(0484)  PORTB = 0x00;
_port_init:
    0485 2422      CLR	R2
    0486 BA28      OUT	0x18,R2
(0485)  DDRB  = 0xff;
    0487 EF8F      LDI	R24,0xFF
    0488 BB87      OUT	0x17,R24
(0486)  PORTD = 0x01;
    0489 E081      LDI	R24,1
    048A BB82      OUT	0x12,R24
(0487)  DDRD  = 0x01;
    048B BB81      OUT	0x11,R24
    048C 9508      RET
(0488) }
(0489) 
(0490) void init_devices(void)
(0491) {
(0492)  CLI(); //禁止所有中断
_init_devices:
    048D 94F8      BCLR	7
(0493)  port_init();
    048E DFF6      RCALL	_port_init
(0494)  SEI();//开全局中断
    048F 9478      BSET	7
    0490 9508      RET
(0495) }
(0496) //主函数
(0497) void main(void)
(0498) {
(0499)  char i,j;
(0500)  init_devices();
_main:
  j                    --> Y+1
  i                    --> Y+1
    0491 DFFB      RCALL	_init_devices
(0501)  clearping();
    0492 DE84      RCALL	_clearping
    0493 C004      RJMP	0x0498
(0502)  while(1)
(0503)   {
(0504)   // right_MOVE_display(greed);
(0505)    
(0506)    left_MOVE_display(greed);
    0494 E001      LDI	R16,1
    0495 DF32      RCALL	_left_MOVE_display
(0507)    UP_MOVE_display(oringe);
FILE: <library>
    0496 E002      LDI	R16,2
    0497 DFAA      RCALL	_UP_MOVE_display
    0498 CFFB      RJMP	0x0494
    0499 9508      RET
pop_gset2:
    049A E0E2      LDI	R30,2
    049B 940C04AF  JMP	pop
pop_gset3:
    049D E0E4      LDI	R30,4
    049E 940C04AF  JMP	pop
pop_gset4:
    04A0 E0E8      LDI	R30,0x8
    04A1 940C04AF  JMP	pop
push_gset5:
    04A3 92FA      ST	R15,-Y
    04A4 92EA      ST	R14,-Y
push_gset4:
    04A5 92DA      ST	R13,-Y
    04A6 92CA      ST	R12,-Y
push_gset3:
    04A7 92BA      ST	R11,-Y
    04A8 92AA      ST	R10,-Y
push_gset2:
    04A9 937A      ST	R23,-Y
    04AA 936A      ST	R22,-Y
push_gset1:
    04AB 935A      ST	R21,-Y
    04AC 934A      ST	R20,-Y
    04AD 9508      RET
pop_gset1:
    04AE E0E1      LDI	R30,1
pop:
    04AF 9149      LD	R20,Y+
    04B0 9159      LD	R21,Y+
    04B1 FDE0      SBRC	R30,0
    04B2 9508      RET
    04B3 9169      LD	R22,Y+
    04B4 9179      LD	R23,Y+
    04B5 FDE1      SBRC	R30,1
    04B6 9508      RET
    04B7 90A9      LD	R10,Y+
    04B8 90B9      LD	R11,Y+
    04B9 FDE2      SBRC	R30,2
    04BA 9508      RET
    04BB 90C9      LD	R12,Y+
    04BC 90D9      LD	R13,Y+
    04BD FDE3      SBRC	R30,3
    04BE 9508      RET
    04BF 90E9      LD	R14,Y+
    04C0 90F9      LD	R15,Y+
    04C1 9508      RET

⌨️ 快捷键说明

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