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

📄 led128x64.lst

📁 基于mega16的 128X64点阵驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
     6B3 E5CF      LDI	R28,0x5F
     6B4 E0D4      LDI	R29,4
     6B5 BFCD      OUT	0x3D,R28
     6B6 BFDE      OUT	0x3E,R29
     6B7 51C0      SUBI	R28,0x10
     6B8 40D0      SBCI	R29,0
     6B9 EA0A      LDI	R16,0xAA
     6BA 8308      STD	Y+0,R16
     6BB 2400      CLR	R0
     6BC E6E2      LDI	R30,0x62
     6BD E0F0      LDI	R31,0
     6BE E010      LDI	R17,0
     6BF 38E9      CPI	R30,0x89
     6C0 07F1      CPC	R31,R17
     6C1 F011      BEQ	0x06C4
     6C2 9201      ST	R0,Z+
     6C3 CFFB      RJMP	0x06BF
     6C4 8300      STD	Z+0,R16
     6C5 E6E4      LDI	R30,0x64
     6C6 E0FD      LDI	R31,0xD
     6C7 E6A0      LDI	R26,0x60
     6C8 E0B0      LDI	R27,0
     6C9 E01D      LDI	R17,0xD
     6CA E000      LDI	R16,0
     6CB BF0B      OUT	0x3B,R16
     6CC 36E6      CPI	R30,0x66
     6CD 07F1      CPC	R31,R17
     6CE F021      BEQ	0x06D3
     6CF 95C8      LPM
     6D0 9631      ADIW	R30,1
     6D1 920D      ST	R0,X+
     6D2 CFF9      RJMP	0x06CC
     6D3 940E 07DE CALL	_main
_exit:
     6D5 CFFF      RJMP	_exit
FILE: E:\wuyong\ICC_study\icc713A\include\delay.h
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) // CPU 8M
(0006) 
(0007) void delay_1us(void);                 //1us延时函数
(0008) void delay_nus(unsigned int n);       //N us延时函数
(0009) void delay_1ms(void);                 //1ms延时函数
(0010) void delay_nms(unsigned int n);       //N ms延时函数
(0011) 
(0012) 
(0013) void delay_1us(void)                 //1us延时函数
(0014)   {
(0015)    asm("nop");
_delay_1us:
     6D6 0000      NOP
     6D7 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R10
     6D8 940E 0874 CALL	push_xgset300C
     6DA 0158      MOVW	R10,R16
(0016)   }
(0017) 
(0018) void delay_nus(unsigned int n)       //N us延时函数
(0019)   {
(0020)    unsigned int i=0;
     6DB 2744      CLR	R20
     6DC 2755      CLR	R21
(0021)    for (i=0;i<n;i++)
     6DD C003      RJMP	0x06E1
(0022)    delay_1us();
     6DE DFF7      RCALL	_delay_1us
     6DF 5F4F      SUBI	R20,0xFF
     6E0 4F5F      SBCI	R21,0xFF
     6E1 154A      CP	R20,R10
     6E2 055B      CPC	R21,R11
     6E3 F3D0      BCS	0x06DE
     6E4 940C 0879 JMP	pop_xgset300C
(0023)   }
(0024)   
(0025) void delay_1ms(void)                 //1ms延时函数
(0026)   {
(0027)    unsigned int i;
(0028)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
     6E6 2700      CLR	R16
     6E7 2711      CLR	R17
     6E8 C002      RJMP	0x06EB
     6E9 5F0F      SUBI	R16,0xFF
     6EA 4F1F      SBCI	R17,0xFF
     6EB 3704      CPI	R16,0x74
     6EC E0E4      LDI	R30,4
     6ED 071E      CPC	R17,R30
     6EE F3D0      BCS	0x06E9
     6EF 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
     6F0 940E 0874 CALL	push_xgset300C
     6F2 0158      MOVW	R10,R16
(0029)   }
(0030)   
(0031) void delay_nms(unsigned int n)       //N ms延时函数
(0032)   {
(0033)    unsigned int i=0;
     6F3 2744      CLR	R20
     6F4 2755      CLR	R21
(0034)    for (i=0;i<n;i++)
     6F5 C003      RJMP	0x06F9
(0035)    delay_1ms();
     6F6 DFEF      RCALL	_delay_1ms
     6F7 5F4F      SUBI	R20,0xFF
     6F8 4F5F      SBCI	R21,0xFF
     6F9 154A      CP	R20,R10
     6FA 055B      CPC	R21,R11
     6FB F3D0      BCS	0x06F6
     6FC 940C 0879 JMP	pop_xgset300C
_HC595_send_2byte:
  i                    --> R20
  byte2                --> R18
  byte1                --> R16
     6FE 934A      ST	R20,-Y
FILE: E:\wuyong\ICC_study\latest_program\LED128x64\LED128x64\main.c
(0001) // ICC-AVR application builder : 2008-03-28
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) // 编写:wuyong      Email:wuyong_ah@163.com
(0005) 
(0006) // 自做LED点阵屏专用驱动板与LED 点阵屏接口定义
(0007) // A    --->  PA0               B    --->   PA1
(0008) // C    --->  PA2               D!   --->   PA3
(0009) // D    --->  PA4               SC   --->   PC7(595_clk)
(0010) // RC   --->  PC6(595_lock)     DATA1--->   PD7(595_data)
(0011) // DATA2--->  PD6(595_data)
(0012) // 上屏数据输出 ---> 下屏数据输入
(0013) 
(0014) #include <iom16v.h>
(0015) #include <macros.h>
(0016) #include <delay.h>
(0017) #include "hanzi.h"
(0018) 
(0019) #define uchar unsigned char
(0020) #define uint  unsigned int
(0021) 
(0022) extern const uchar QQ[];      //QQ图片
(0023) extern const uchar OURAVR[];  //OURAVR
(0024) extern const uchar hello[];   //hello
(0025) 
(0026) const uchar sw[16]={0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
(0027)                     0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x08,}; //156的驱动代码,根据138的真值表计算而来。
(0028) 
(0029) #pragma data: data
(0030) 
(0031) #define screen_size    8            //半屏显示汉字个数:8  32*128
(0032) uchar hanzi_size_S = 79;            //上屏移动显示汉字总个数
(0033) 
(0034) uchar BUFF[screen_size*2];			//缓存
(0035) uchar BUFF_1[screen_size*2];		//缓存                    
(0036) uchar disrow;                       //disrow 为16行变量
(0037) uchar Move;
(0038) uchar speed;
(0039) uchar flash_cnt;
(0040) uchar flash_flag;
(0041) uint  zimo;
(0042) uchar display_flag=0;
(0043) 
(0044) void Move_L(const uchar *p,uint f); //左调整数据  
(0045) void display_chinese(const uchar *p,uchar num);//静态显示
(0046) void display (void);                //显示数据刷新
(0047) 
(0048) #define     HC595_data1_H()     PORTD |= BIT(PD7)
(0049) #define     HC595_data1_L()     PORTD &=~BIT(PD7)
(0050) #define     HC595_data2_H()     PORTD |= BIT(PD6)
(0051) #define     HC595_data2_L()     PORTD &=~BIT(PD6)
(0052) 
(0053) #define     HC595_clk_H         PORTC |= BIT(PC7)
(0054) #define     HC595_clk_L         PORTC &=~BIT(PC7)
(0055) 
(0056) #define     HC595_lock_H        PORTC |= BIT(PC6)
(0057) #define     HC595_lock_L        PORTC &=~BIT(PC6)
(0058) 
(0059) /********************************************************
(0060) *             函数说明:595发送一个字节数据             *
(0061) ********************************************************/
(0062) void HC595_send_2byte(uchar byte1,uchar byte2)
(0063) {
(0064)  uchar i;
(0065)  
(0066)  HC595_lock_L;
     6FF 98AE      CBI	0x15,6
(0067)  for (i=0x01;i!=0;i=i<<1)
     700 E041      LDI	R20,1
     701 C00F      RJMP	0x0711
(0068)   {
(0069)    if(byte1&i)
     702 2E20      MOV	R2,R16
     703 2224      AND	R2,R20
     704 F011      BEQ	0x0707
(0070)       HC595_data1_H();
     705 9A97      SBI	0x12,7
     706 C001      RJMP	0x0708
(0071)    else
(0072)       HC595_data1_L();
     707 9897      CBI	0x12,7
(0073)    if(byte2&i)
     708 2E22      MOV	R2,R18
     709 2224      AND	R2,R20
     70A F011      BEQ	0x070D
(0074) 	  HC595_data2_H();
     70B 9A96      SBI	0x12,6
     70C C001      RJMP	0x070E
(0075)    else
(0076) 	  HC595_data2_L();
     70D 9896      CBI	0x12,6
(0077)    
(0078)    HC595_clk_L;
     70E 98AF      CBI	0x15,7
(0079)    HC595_clk_H;
     70F 9AAF      SBI	0x15,7
     710 0F44      LSL	R20
     711 2344      TST	R20
     712 F779      BNE	0x0702
     713 9149      LD	R20,Y+
     714 9508      RET
_Move_L:
  s                    --> R20
  f                    --> R18
  p                    --> R10
     715 940E 0874 CALL	push_xgset300C
     717 0158      MOVW	R10,R16
(0080)    }
(0081) }
(0082) 
(0083) /*********************************************************
(0084) 函数名:void Move_L(const uchar *p,uint f)
(0085) 功能:缓存数据 左移
(0086) 输入:
(0087) 输出:
(0088) /*********************************************************/                    
(0089) void Move_L(const uchar *p,uint f)
(0090) {
(0091)  signed char s;
(0092) 	for(s=screen_size;s>=0;s--)		//
     718 E048      LDI	R20,0x8
     719 C036      RJMP	0x0750
(0093) 	{
(0094) 	 BUFF[2*s+1]=p[f+32*s+2*disrow];			 
     71A E200      LDI	R16,0x20
     71B 2F14      MOV	R17,R20
     71C 0201      MULS	R16,R17
     71D 01F9      MOVW	R30,R18
     71E 0DE0      ADD	R30,R0
     71F 1DF1      ADC	R31,R1
     720 9020 0068 LDS	R2,disrow
     722 2433      CLR	R3
     723 0C22      LSL	R2
     724 1C33      ROL	R3
     725 0DE2      ADD	R30,R2
     726 1DF3      ADC	R31,R3
     727 0DEA      ADD	R30,R10
     728 1DFB      ADC	R31,R11
     729 9024      LPM	R2,104(Z)
     72A E78A      LDI	R24,0x7A
     72B E090      LDI	R25,0
     72C 2FE4      MOV	R30,R20
     72D 27FF      CLR	R31
     72E FDE7      SBRC	R30,7
     72F 95F0      COM	R31
     730 0FEE      LSL	R30
     731 1FFF      ROL	R31
     732 0FE8      ADD	R30,R24
     733 1FF9      ADC	R31,R25
     734 8220      STD	Z+0,R2
(0095) 	 BUFF[2*s]=p[f+1+32*s+2*disrow];	    
     735 0201      MULS	R16,R17
     736 01F9      MOVW	R30,R18
     737 9631      ADIW	R30,1
     738 0DE0      ADD	R30,R0
     739 1DF1      ADC	R31,R1
     73A 9020 0068 LDS	R2,disrow
     73C 2433      CLR	R3
     73D 0C22      LSL	R2
     73E 1C33      ROL	R3
     73F 0DE2      ADD	R30,R2
     740 1DF3      ADC	R31,R3
     741 0DEA      ADD	R30,R10
     742 1DFB      ADC	R31,R11
     743 9024      LPM	R2,104(Z)
     744 E789      LDI	R24,0x79
     745 E090      LDI	R25,0
     746 2FE4      MOV	R30,R20
     747 27FF      CLR	R31
     748 FDE7      SBRC	R30,7
     749 95F0      COM	R31
     74A 0FEE      LSL	R30
     74B 1FFF      ROL	R31
     74C 0FE8      ADD	R30,R24
     74D 1FF9      ADC	R31,R25
     74E 8220      STD	Z+0,R2
     74F 954A      DEC	R20
     750 3040      CPI	R20,0
     751 F00C      BLT	0x0753
     752 CFC7      RJMP	0x071A
     753 940C 0879 JMP	pop_xgset300C
_display_chinese:
  s                    --> R20
  num                  --> R18
  p                    --> R16
     755 934A      ST	R20,-Y
(0096) 	}
(0097) }	
(0098) 
(0099) /*********************************************************
(0100) 函数名:void display_chinese(const uchar *p,uchar num)
(0101) 功能:显示汉字
(0102) 输入:
(0103) 输出:
(0104) /*********************************************************/ 
(0105) void display_chinese(const uchar *p,uchar num)
(0106) {
(0107)  uchar s;
(0108)  for(s=0;s<screen_size;s++)
     756 2744      CLR	R20
     757 C032      RJMP	0x078A
(0109) 	{
(0110) 	 BUFF_1[2*s]=p[1+32*(s+num)+2*disrow];
     758 2E24      MOV	R2,R20
     759 0E22      ADD	R2,R18
     75A E280      LDI	R24,0x20
     75B 9D82      MUL	R24,R2
     75C 01F0      MOVW	R30,R0
     75D 9631      ADIW	R30,1
     75E 9020 0068 LDS	R2,disrow
     760 2433      CLR	R3
     761 0C22      LSL	R2
     762 1C33      ROL	R3
     763 0DE2      ADD	R30,R2
     764 1DF3      ADC	R31,R3
     765 0FE0      ADD	R30,R16
     766 1FF1      ADC	R31,R17
     767 9024      LPM	R2,104(Z)
     768 E689      LDI	R24,0x69
     769 E090      LDI	R25,0
     76A 2FE4      MOV	R30,R20
     76B 27FF      CLR	R31
     76C 0FEE      LSL	R30
     76D 1FFF      ROL	R31
     76E 0FE8      ADD	R30,R24
     76F 1FF9      ADC	R31,R25
     770 8220      STD	Z+0,R2
(0111) 	 BUFF_1[2*s+1]=p[32*(s+num)+2*disrow];
     771 2E24      MOV	R2,R20
     772 0E22      ADD	R2,R18
     773 E280      LDI	R24,0x20
     774 9D82      MUL	R24,R2
     775 01F0      MOVW	R30,R0
     776 9020 0068 LDS	R2,disrow
     778 2433      CLR	R3
     779 0C22      LSL	R2
     77A 1C33      ROL	R3
     77B 0DE2      ADD	R30,R2
     77C 1DF3      ADC	R31,R3

⌨️ 快捷键说明

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