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

📄 led128x64.lst

📁 基于mega16的 128X64点阵驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
     77D 0FE0      ADD	R30,R16
     77E 1FF1      ADC	R31,R17
     77F 9024      LPM	R2,104(Z)
     780 E68A      LDI	R24,0x6A
     781 E090      LDI	R25,0
     782 2FE4      MOV	R30,R20
     783 27FF      CLR	R31
     784 0FEE      LSL	R30
     785 1FFF      ROL	R31
     786 0FE8      ADD	R30,R24
     787 1FF9      ADC	R31,R25
     788 8220      STD	Z+0,R2
     789 9543      INC	R20
     78A 3048      CPI	R20,0x8
     78B F408      BCC	0x078D
     78C CFCB      RJMP	0x0758
     78D 9149      LD	R20,Y+
     78E 9508      RET
_display:
  inc                  --> R22
  temp                 --> R14
  temp1                --> R12
  i                    --> R20
  tempyid              --> R14
  s                    --> R10
     78F 940E 0869 CALL	push_xgsetF0FC
(0112) 	}
(0113) }
(0114) 
(0115) /*********************************************************
(0116) 函数名:void display(void)
(0117) 功能:显示刷新
(0118) 输入:
(0119) 输出:
(0120) /*********************************************************/ 
(0121) void display(void)
(0122) {
(0123)   uchar i = Move;
     791 9140 0067 LDS	R20,Move
(0124)   uchar s;
(0125)   uchar inc,tempyid,temp,temp1=0;
     793 24CC      CLR	R12
(0126)   
(0127)   if(i<8)
     794 3048      CPI	R20,0x8
     795 F410      BCC	0x0798
(0128)     inc=0;
     796 2766      CLR	R22
     797 C001      RJMP	0x0799
(0129)   else 
(0130)     inc=1;
     798 E061      LDI	R22,1
(0131)   for(s=0+inc;s<screen_size*2+inc;s++)        //发送16字节数据
     799 2EA6      MOV	R10,R22
     79A C02A      RJMP	0x07C5
(0132) 	{
(0133) 	  if(i<8) 
     79B 3048      CPI	R20,0x8
     79C F410      BCC	0x079F
(0134)         tempyid=i;
     79D 2EE4      MOV	R14,R20
     79E C003      RJMP	0x07A2
(0135)       else 
(0136)        tempyid=i-8;
     79F 2F84      MOV	R24,R20
     7A0 5088      SUBI	R24,0x8
     7A1 2EE8      MOV	R14,R24
(0137)       temp=((BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid)));
     7A2 E018      LDI	R17,0x8
     7A3 191E      SUB	R17,R14
     7A4 E78A      LDI	R24,0x7A
     7A5 E090      LDI	R25,0
     7A6 2DEA      MOV	R30,R10
     7A7 27FF      CLR	R31
     7A8 0FE8      ADD	R30,R24
     7A9 1FF9      ADC	R31,R25
     7AA 8100      LDD	R16,Z+0
     7AB 940E 087E CALL	lsl8
     7AD 2E20      MOV	R2,R16
     7AE E789      LDI	R24,0x79
     7AF E090      LDI	R25,0
     7B0 2DEA      MOV	R30,R10
     7B1 27FF      CLR	R31
     7B2 0FE8      ADD	R30,R24
     7B3 1FF9      ADC	R31,R25
     7B4 8100      LDD	R16,Z+0
     7B5 2D1E      MOV	R17,R14
     7B6 940E 0884 CALL	lsr8
     7B8 2EE0      MOV	R14,R16
     7B9 28E2      OR	R14,R2
(0138)       HC595_send_2byte(temp,BUFF_1[temp1]);    //发送数据	
     7BA E689      LDI	R24,0x69
     7BB E090      LDI	R25,0
     7BC 2DEC      MOV	R30,R12
     7BD 27FF      CLR	R31
     7BE 0FE8      ADD	R30,R24
     7BF 1FF9      ADC	R31,R25
     7C0 8120      LDD	R18,Z+0
     7C1 2D0E      MOV	R16,R14
     7C2 DF3B      RCALL	_HC595_send_2byte
(0139) 	  temp1++;
     7C3 94C3      INC	R12
     7C4 94A3      INC	R10
     7C5 2F86      MOV	R24,R22
     7C6 5F80      SUBI	R24,0xF0
     7C7 16A8      CP	R10,R24
     7C8 F290      BCS	0x079B
     7C9 940C 085E JMP	pop_xgsetF0FC
(0140) 	}
(0141) }
(0142) 
(0143) 
(0144) void port_init(void)
(0145) {
(0146)  PORTA = 0x00;
_port_init:
     7CB 2422      CLR	R2
     7CC BA2B      OUT	0x1B,R2
(0147)  DDRA  = 0xFF;
     7CD EF8F      LDI	R24,0xFF
     7CE BB8A      OUT	0x1A,R24
(0148)  
(0149)  PORTB = 0x00;
     7CF BA28      OUT	0x18,R2
(0150)  DDRB  = 0xFF;
     7D0 BB87      OUT	0x17,R24
(0151)  
(0152)  PORTC = 0x00; //m103 output only
     7D1 BA25      OUT	0x15,R2
(0153)  DDRC  = 0xFF;
     7D2 BB84      OUT	0x14,R24
(0154)  
(0155)  PORTD = 0x00;
     7D3 BA22      OUT	0x12,R2
(0156)  DDRD  = 0xFF;
     7D4 BB81      OUT	0x11,R24
     7D5 9508      RET
(0157) }
(0158) 
(0159) //call this routine to initialize all peripherals
(0160) void init_devices(void)
(0161) {
(0162)  //stop errant interrupts until set up
(0163)  CLI(); //disable all interrupts
_init_devices:
     7D6 94F8      BCLR	7
(0164)  port_init();
     7D7 DFF3      RCALL	_port_init
(0165) 
(0166)  MCUCR = 0x00;
     7D8 2422      CLR	R2
     7D9 BE25      OUT	0x35,R2
(0167)  GICR  = 0x00;
     7DA BE2B      OUT	0x3B,R2
(0168)  TIMSK = 0x00; //timer interrupt sources
     7DB BE29      OUT	0x39,R2
(0169)  SEI(); //re-enable interrupts
     7DC 9478      BSET	7
     7DD 9508      RET
(0170)  //all peripherals are now initialized
(0171) }
(0172) 
(0173) 
(0174) void main(void)
(0175) {
(0176)  init_devices();
_main:
     7DE DFF7      RCALL	_init_devices
     7DF C07C      RJMP	0x085C
(0177)  //insert your functional code here...
(0178) 
(0179)  while(1)                           //重复循环显示
(0180)   {
(0181) 	 for(disrow=0;disrow<16;disrow++)
     7E0 2422      CLR	R2
     7E1 9220 0068 STS	disrow,R2
     7E3 C029      RJMP	0x080D
(0182) 		 {
(0183) 		  PORTA=0x18;                //关闭显示,消影
     7E4 E188      LDI	R24,0x18
     7E5 BB8B      OUT	0x1B,R24
(0184) 		  
(0185) 		  Move_L(OURAVR,zimo);       //上屏移动显示OURAVR
     7E6 9120 0062 LDS	R18,zimo
     7E8 9130 0063 LDS	R19,zimo+1
     7EA E504      LDI	R16,0x54
     7EB E011      LDI	R17,1
     7EC DF28      RCALL	_Move_L
(0186) 		  
(0187) 		  if(flash_flag==0)
     7ED 9020 0064 LDS	R2,flash_flag
     7EF 2022      TST	R2
     7F0 F429      BNE	0x07F6
(0188) 			display_chinese(hello,0);//下屏显示hello
     7F1 2722      CLR	R18
     7F2 E504      LDI	R16,0x54
     7F3 E01C      LDI	R17,0xC
     7F4 DF60      RCALL	_display_chinese
     7F5 C004      RJMP	0x07FA
(0189) 		  else
(0190) 		    display_chinese(QQ,0);   //下屏picture
     7F6 2722      CLR	R18
     7F7 E504      LDI	R16,0x54
     7F8 E010      LDI	R17,0
     7F9 DF5B      RCALL	_display_chinese
(0191) 			
(0192) 		  display();                 //刷新显示数据
     7FA DF94      RCALL	_display
(0193) 	
(0194) 	      HC595_lock_H;			     //锁存为高,595锁存信号
     7FB 9AAE      SBI	0x15,6
(0195) 	      PORTA=sw[disrow];			 //输出行信号
     7FC E584      LDI	R24,0x54
     7FD E09D      LDI	R25,0xD
     7FE 91E0 0068 LDS	R30,disrow
     800 27FF      CLR	R31
     801 0FE8      ADD	R30,R24
     802 1FF9      ADC	R31,R25
     803 9024      LPM	R2,104(Z)
     804 BA2B      OUT	0x1B,R2
(0196) 	   
(0197) 	      delay_nus(200);
     805 EC08      LDI	R16,0xC8
     806 E010      LDI	R17,0
     807 DED0      RCALL	_delay_nus
     808 9180 0068 LDS	R24,disrow
     80A 5F8F      SUBI	R24,0xFF
     80B 9380 0068 STS	disrow,R24
     80D 9180 0068 LDS	R24,disrow
     80F 3180      CPI	R24,0x10
     810 F298      BCS	0x07E4
(0198)           }			
(0199) 		  
(0200) 	if(speed++>=0)           //控制上屏移动显示速度
     811 9020 0066 LDS	R2,speed
     813 2433      CLR	R3
     814 2D82      MOV	R24,R2
     815 5F8F      SUBI	R24,0xFF
     816 9380 0066 STS	speed,R24
     818 2D82      MOV	R24,R2
     819 3080      CPI	R24,0
     81A F150      BCS	0x0845
(0201) 	  {
(0202) 	    speed=0 ;
     81B 2422      CLR	R2
     81C 9220 0066 STS	speed,R2
(0203) 	    if(Move++>=15)
     81E 9020 0067 LDS	R2,Move
     820 2433      CLR	R3
     821 2D82      MOV	R24,R2
     822 5F8F      SUBI	R24,0xFF
     823 9380 0067 STS	Move,R24
     825 2D82      MOV	R24,R2
     826 308F      CPI	R24,0xF
     827 F0E8      BCS	0x0845
(0204)          {
(0205) 		  Move=0;            //16列移位计数器清零    
     828 2422      CLR	R2
     829 9220 0067 STS	Move,R2
(0206)           zimo=zimo+32;      //取字模计数器加32,准备下一个字
     82B 9180 0062 LDS	R24,zimo
     82D 9190 0063 LDS	R25,zimo+1
     82F 9680      ADIW	R24,0x20
     830 9390 0063 STS	zimo+1,R25
     832 9380 0062 STS	zimo,R24
(0207) 	      if(zimo>=(hanzi_size_S*32)) //字模是否到最后来。
     834 9020 0060 LDS	R2,hanzi_size_S
     836 E280      LDI	R24,0x20
     837 9D82      MUL	R24,R2
     838 9020 0062 LDS	R2,zimo
     83A 9030 0063 LDS	R3,zimo+1
     83C 1420      CP	R2,R0
     83D 0431      CPC	R3,R1
     83E F030      BCS	0x0845
(0208) 			 zimo=0;          //从头在来。 
     83F 2422      CLR	R2
     840 2433      CLR	R3
     841 9230 0063 STS	zimo+1,R3
     843 9220 0062 STS	zimo,R2
(0209)    	  	  }
(0210) 	   } 
(0211) 	     
(0212) 	if(flash_cnt++>=100)//下屏显示切换时间
     845 9140 0065 LDS	R20,flash_cnt
     847 2755      CLR	R21
     848 2F84      MOV	R24,R20
     849 5F8F      SUBI	R24,0xFF
     84A 9380 0065 STS	flash_cnt,R24
     84C 3644      CPI	R20,0x64
     84D F070      BCS	0x085C
(0213) 	  {
(0214) 	   flash_cnt=0;
     84E 2422      CLR	R2
     84F 9220 0065 STS	flash_cnt,R2
(0215) 	   if(flash_flag==0)
     851 9020 0064 LDS	R2,flash_flag
     853 2022      TST	R2
     854 F421      BNE	0x0859
(0216) 	      flash_flag=1;
     855 E081      LDI	R24,1
     856 9380 0064 STS	flash_flag,R24
     858 C003      RJMP	0x085C
(0217) 	   else
(0218) 	      flash_flag=0;
FILE: <library>
     859 2422      CLR	R2
     85A 9220 0064 STS	flash_flag,R2
     85C CF83      RJMP	0x07E0
     85D 9508      RET
pop_xgsetF0FC:
     85E 90A9      LD	R10,Y+
     85F 90B9      LD	R11,Y+
     860 90C9      LD	R12,Y+
     861 90D9      LD	R13,Y+
     862 90E9      LD	R14,Y+
     863 90F9      LD	R15,Y+
     864 9149      LD	R20,Y+
     865 9159      LD	R21,Y+
     866 9169      LD	R22,Y+
     867 9179      LD	R23,Y+
     868 9508      RET
push_xgsetF0FC:
     869 937A      ST	R23,-Y
     86A 936A      ST	R22,-Y
push_xgset30FC:
     86B 935A      ST	R21,-Y
     86C 934A      ST	R20,-Y
push_xgset00FC:
     86D 92FA      ST	R15,-Y
     86E 92EA      ST	R14,-Y
push_xgset003C:
     86F 92DA      ST	R13,-Y
     870 92CA      ST	R12,-Y
     871 92BA      ST	R11,-Y
     872 92AA      ST	R10,-Y
     873 9508      RET
push_xgset300C:
     874 935A      ST	R21,-Y
     875 934A      ST	R20,-Y
     876 92BA      ST	R11,-Y
     877 92AA      ST	R10,-Y
     878 9508      RET
pop_xgset300C:
     879 90A9      LD	R10,Y+
     87A 90B9      LD	R11,Y+
     87B 9149      LD	R20,Y+
     87C 9159      LD	R21,Y+
     87D 9508      RET
lsl8:
     87E 2311      TST	R17
     87F F019      BEQ	0x0883
     880 0F00      LSL	R16
     881 951A      DEC	R17
     882 CFFB      RJMP	lsl8
     883 9508      RET
lsr8:
     884 2311      TST	R17
     885 F019      BEQ	0x0889
     886 9506      LSR	R16
     887 951A      DEC	R17
     888 CFFB      RJMP	lsr8
     889 9508      RET

⌨️ 快捷键说明

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