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

📄 数码管.lst

📁 avr单片机的LED程序
💻 LST
字号:
__start:
__text_start:
    0031 E5CF      LDI	R28,0x5F
    0032 E0D4      LDI	R29,4
    0033 BFCD      OUT	0x3D,R28
    0034 BFDE      OUT	0x3E,R29
    0035 51C0      SUBI	R28,0x10
    0036 40D0      SBCI	R29,0
    0037 EA0A      LDI	R16,0xAA
    0038 8308      STD	Y+0,R16
    0039 2400      CLR	R0
    003A E6EE      LDI	R30,0x6E
    003B E0F0      LDI	R31,0
    003C E010      LDI	R17,0
    003D 36EE      CPI	R30,0x6E
    003E 07F1      CPC	R31,R17
    003F F011      BEQ	0x0042
    0040 9201      ST	R0,Z+
    0041 CFFB      RJMP	0x003D
    0042 8300      STD	Z+0,R16
    0043 E5E4      LDI	R30,0x54
    0044 E0F0      LDI	R31,0
    0045 E6A0      LDI	R26,0x60
    0046 E0B0      LDI	R27,0
    0047 E010      LDI	R17,0
    0048 36E2      CPI	R30,0x62
    0049 07F1      CPC	R31,R17
    004A F021      BEQ	0x004F
    004B 95C8      LPM
    004C 9631      ADIW	R30,1
    004D 920D      ST	R0,X+
    004E CFF9      RJMP	0x0048
    004F 940E00D6  CALL	_main
_exit:
    0051 CFFF      RJMP	_exit
FILE: D:\avr\+++精华+++\数码管\delay.h
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 编译器:ICC-AVR v6.31A 
(0004) 目标芯片 : M16
(0005) 时钟: 8.0000Mhz
(0006) -----------------------------------------------------------------------*/
(0007) #ifndef __delay_h
(0008) #define __delay_h
(0009) void delay_nus(unsigned int n);
(0010) void delay_nms(unsigned int n);
(0011) void delay_1us(void);
(0012) void delay_1ms(void) ; 
(0013) 
(0014) void delay_1us(void)                 //1us延时函数
(0015)   {
(0016)    asm("nop");
_delay_1us:
    0052 0000      NOP
    0053 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    0054 940E0104  CALL	push_gset2
    0056 01B8      MOVW	R22,R16
(0017)   }
(0018) 
(0019) void delay_nus(unsigned int n)       //N us延时函数
(0020)   {
(0021)    unsigned int i=0;
    0057 2744      CLR	R20
    0058 2755      CLR	R21
(0022)    for (i=0;i<n;i++)
    0059 C003      RJMP	0x005D
(0023)    delay_1us();
    005A DFF7      RCALL	_delay_1us
    005B 5F4F      SUBI	R20,0xFF
    005C 4F5F      SBCI	R21,0xFF
    005D 1746      CP	R20,R22
    005E 0757      CPC	R21,R23
    005F F3D0      BCS	0x005A
    0060 940E00F8  CALL	pop_gset2
    0062 9508      RET
(0024)   }
(0025)   
(0026) void delay_1ms(void)                 //1ms延时函数
(0027)   {
(0028)    unsigned int i;
(0029)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    0063 2700      CLR	R16
    0064 2711      CLR	R17
    0065 C002      RJMP	0x0068
    0066 5F0F      SUBI	R16,0xFF
    0067 4F1F      SBCI	R17,0xFF
    0068 3704      CPI	R16,0x74
    0069 E0E4      LDI	R30,4
    006A 071E      CPC	R17,R30
    006B F3D0      BCS	0x0066
    006C 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    006D 940E0104  CALL	push_gset2
    006F 01B8      MOVW	R22,R16
(0030)   }
(0031)   
(0032) void delay_nms(unsigned int n)       //N ms延时函数
(0033)   {
(0034)    unsigned int i=0;
    0070 2744      CLR	R20
    0071 2755      CLR	R21
(0035)    for (i=0;i<n;i++)
    0072 C003      RJMP	0x0076
(0036)    delay_1ms();
    0073 DFEF      RCALL	_delay_1ms
    0074 5F4F      SUBI	R20,0xFF
    0075 4F5F      SBCI	R21,0xFF
    0076 1746      CP	R20,R22
    0077 0757      CPC	R21,R23
    0078 F3D0      BCS	0x0073
    0079 940E00F8  CALL	pop_gset2
    007B 9508      RET
_LED_process:
  p                    --> R20
  i                    --> R22
    007C 940E0104  CALL	push_gset2
    007E 01A9      MOVW	R20,R18
    007F 01B8      MOVW	R22,R16
FILE: D:\avr\+++精华+++\数码管\led.h
(0001) #include "delay.h"
(0002) //-----------------端口设置----------------
(0003) //使用本驱动需要修改这里以及下面的显示函数中的共阴共阳设置
(0004) #define LED_SEL        PORTA
(0005) #define LED_DDR_SEL    DDRA
(0006) #define LED_DATA	   PORTB
(0007) #define LED_DDR_DATA   DDRB
(0008) //----------------------------------------
(0009) //数码管字型表,对应的是:0,1,2,3,4,5,6,7,8,9
(0010) unsigned char LED_table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6f,0x7d,0x07,0x7f,0x6f};
(0011) unsigned char LED_dp[4]={0,0,0,0};//显示的初始值:0,0,0,0
(0012) 
(0013) //********计数值处理函数******************//
(0014) void LED_process(unsigned int i,unsigned char *p)
(0015) {p[0]=i/1000;//千位
    0080 EE28      LDI	R18,0xE8
    0081 E033      LDI	R19,3
    0082 018B      MOVW	R16,R22
    0083 940E00DE  CALL	div16u
    0085 01FA      MOVW	R30,R20
    0086 8300      STD	Z+0,R16
(0016) p[1]=i/100%10;//百位
    0087 E624      LDI	R18,0x64
    0088 E030      LDI	R19,0
    0089 018B      MOVW	R16,R22
    008A 940E00DE  CALL	div16u
    008C E02A      LDI	R18,0xA
    008D E030      LDI	R19,0
    008E 940E00DC  CALL	mod16u
    0090 01FA      MOVW	R30,R20
    0091 8301      STD	Z+1,R16
(0017) p[2]=i/10%10;//十位
    0092 E02A      LDI	R18,0xA
    0093 E030      LDI	R19,0
    0094 018B      MOVW	R16,R22
    0095 940E00DE  CALL	div16u
    0097 E02A      LDI	R18,0xA
    0098 E030      LDI	R19,0
    0099 940E00DC  CALL	mod16u
    009B 01FA      MOVW	R30,R20
    009C 8302      STD	Z+2,R16
(0018) p[3]=i%10;//个位
    009D E02A      LDI	R18,0xA
    009E E030      LDI	R19,0
    009F 018B      MOVW	R16,R22
    00A0 940E00DC  CALL	mod16u
    00A2 01FA      MOVW	R30,R20
    00A3 8303      STD	Z+3,R16
    00A4 940E00F8  CALL	pop_gset2
    00A6 9508      RET
_LED_display:
  sel                  --> R20
  i                    --> R22
  p                    --> R10
    00A7 940E0102  CALL	push_gset3
    00A9 0158      MOVW	R10,R16
(0019) 
(0020) }
(0021) 
(0022) 
(0023) //**********动态显示函数,参数p为待显示的数组名**********//
(0024) void LED_display(unsigned char *p)
(0025) {unsigned char i,sel=0x01;//低位:0x01高位:0x10
    00AA E041      LDI	R20,1
(0026) LED_DDR_SEL=0x0f;//低位:0x0f高位:0xf0
    00AB E08F      LDI	R24,0xF
    00AC BB8A      OUT	0x1A,R24
(0027) LED_DDR_DATA=0xff;
    00AD EF8F      LDI	R24,0xFF
    00AE BB87      OUT	0x17,R24
(0028) for (i=0;i<4;i++)
    00AF 2766      CLR	R22
    00B0 C013      RJMP	0x00C4
(0029) 	{LED_SEL=sel;//PA为位选,共阳:LED_SEL=sel;共阴:LED_SEL=~sel;
    00B1 BB4B      OUT	0x1B,R20
(0030) 	LED_DATA=~LED_table[p[i]];
    00B2 2FE6      MOV	R30,R22
    00B3 27FF      CLR	R31
    00B4 0DEA      ADD	R30,R10
    00B5 1DFB      ADC	R31,R11
    00B6 81E0      LDD	R30,Z+0
    00B7 27FF      CLR	R31
    00B8 E680      LDI	R24,0x60
    00B9 E090      LDI	R25,0
    00BA 0FE8      ADD	R30,R24
    00BB 1FF9      ADC	R31,R25
    00BC 8020      LDD	R2,Z+0
    00BD 9420      COM	R2
    00BE BA28      OUT	0x18,R2
(0031) 	//字型表,共阳:LED_DATA=~LED_table[p[i]];共阴:LED_DATA=LED_table[p[i]];
(0032) 	delay_nms(2);
    00BF E002      LDI	R16,2
    00C0 E010      LDI	R17,0
    00C1 DFAB      RCALL	_delay_nms
(0033) 	sel=sel<<1;
    00C2 0F44      LSL	R20
    00C3 9563      INC	R22
    00C4 3064      CPI	R22,4
    00C5 F358      BCS	0x00B1
    00C6 940E00FB  CALL	pop_gset3
    00C8 9508      RET
_LED:
  i                    --> R20
    00C9 940E0106  CALL	push_gset1
    00CB 01A8      MOVW	R20,R16
(0034) 	}
(0035) }
(0036) 
(0037) //**********数码管初始化函数**********/
(0038) /*
(0039) void LED_init(void)
(0040) {LED_SEL|=0x0f;
(0041) LED_DDR_SEL|=0x0f;
(0042) }
(0043) */
(0044) 
(0045) //**********数码管显示调用函数**********//
(0046) void LED(unsigned int i)
(0047) {
(0048) LED_process(i,LED_dp);
    00CC E62A      LDI	R18,0x6A
    00CD E030      LDI	R19,0
    00CE 018A      MOVW	R16,R20
    00CF DFAC      RCALL	_LED_process
(0049) LED_display(LED_dp);
    00D0 E60A      LDI	R16,0x6A
    00D1 E010      LDI	R17,0
    00D2 DFD4      RCALL	_LED_display
    00D3 940E0109  CALL	pop_gset1
    00D5 9508      RET
FILE: D:\avr\+++精华+++\数码管\main.c
(0001) /*****************************************
(0002) *      数码管演示程序			    	 *
(0003) * 功    能:数码管          			 *
(0004) * 时钟频率:内部1M 						 *
(0005) * 设    计:莫锦攀						 *
(0006) * 修改日期:2007年05月30日				 *
(0007) * 编译环境:ICC-AVR6.31					 *
(0008) * 实验环境:M16学习板					 *
(0009) * 使用端口:PA0~PA3	,PB0~PB7			 *
(0010) *****************************************/
(0011) #include <iom16v.h> 
(0012) #include <macros.h>
(0013) #include "delay.h"
(0014) #include "led.h"
(0015) 
(0016) #define uchar unsigned char
(0017) #define uint unsigned int
(0018) 
(0019) 
(0020) 
(0021) 
(0022) 
(0023) 
(0024) 
(0025) 
(0026) 
(0027) void main(void)
(0028) {
_main:
    00D6 C003      RJMP	0x00DA
(0029) while(1)
(0030) {
(0031) LED(1234);
FILE: <library>
    00D7 ED02      LDI	R16,0xD2
    00D8 E014      LDI	R17,4
    00D9 DFEF      RCALL	_LED
    00DA CFFC      RJMP	0x00D7
    00DB 9508      RET
mod16u:
    00DC 9468      BSET	6
    00DD C001      RJMP	xdiv16u
div16u:
    00DE 94E8      BCLR	6
xdiv16u:
    00DF 92EA      ST	R14,-Y
    00E0 92FA      ST	R15,-Y
    00E1 938A      ST	R24,-Y
    00E2 24EE      CLR	R14
    00E3 24FF      CLR	R15
    00E4 E180      LDI	R24,0x10
    00E5 0F00      LSL	R16
    00E6 1F11      ROL	R17
    00E7 1CEE      ROL	R14
    00E8 1CFF      ROL	R15
    00E9 16E2      CP	R14,R18
    00EA 06F3      CPC	R15,R19
    00EB F018      BCS	0x00EF
    00EC 1AE2      SUB	R14,R18
    00ED 0AF3      SBC	R15,R19
    00EE 9503      INC	R16
    00EF 958A      DEC	R24
    00F0 F7A1      BNE	0x00E5
    00F1 F416      BRTC	0x00F4
    00F2 2D0E      MOV	R16,R14
    00F3 2D1F      MOV	R17,R15
    00F4 9189      LD	R24,Y+
    00F5 90F9      LD	R15,Y+
    00F6 90E9      LD	R14,Y+
    00F7 9508      RET
pop_gset2:
    00F8 E0E2      LDI	R30,2
    00F9 940C010A  JMP	pop
pop_gset3:
    00FB E0E4      LDI	R30,4
    00FC 940C010A  JMP	pop
push_gset5:
    00FE 92FA      ST	R15,-Y
    00FF 92EA      ST	R14,-Y
push_gset4:
    0100 92DA      ST	R13,-Y
    0101 92CA      ST	R12,-Y
push_gset3:
    0102 92BA      ST	R11,-Y
    0103 92AA      ST	R10,-Y
push_gset2:
    0104 937A      ST	R23,-Y
    0105 936A      ST	R22,-Y
push_gset1:
    0106 935A      ST	R21,-Y
    0107 934A      ST	R20,-Y
    0108 9508      RET
pop_gset1:
    0109 E0E1      LDI	R30,1
pop:
    010A 9149      LD	R20,Y+
    010B 9159      LD	R21,Y+
    010C FDE0      SBRC	R30,0
    010D 9508      RET
    010E 9169      LD	R22,Y+
    010F 9179      LD	R23,Y+
    0110 FDE1      SBRC	R30,1
    0111 9508      RET
    0112 90A9      LD	R10,Y+
    0113 90B9      LD	R11,Y+
    0114 FDE2      SBRC	R30,2
    0115 9508      RET
    0116 90C9      LD	R12,Y+
    0117 90D9      LD	R13,Y+
    0118 FDE3      SBRC	R30,3
    0119 9508      RET
    011A 90E9      LD	R14,Y+
    011B 90F9      LD	R15,Y+
    011C 9508      RET

⌨️ 快捷键说明

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