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

📄 led7s.lst

📁 AVR mega16系列单片机开发程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00F2 9508      RET
FILE: F:\单片机源程序\AVR单片机程序\MAGE16\LED\led.c
(0001) #include "config.h"
(0002) 
(0003) const led_data[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
(0004) 
(0005) void led_init(void)
(0006) {
(0007)   led_ddr = 0xFF;                                                    //abcdefg dpi 各位设为输出
_led_init:
    00F3 EF8F      LDI	R24,0xFF
    00F4 BB8A      OUT	0x1A,R24
(0008)   led_contrl_ddr |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d);     //ABCD四个控制设为输出
    00F5 B384      IN	R24,0x14
    00F6 608F      ORI	R24,0xF
    00F7 BB84      OUT	0x14,R24
    00F8 9508      RET
_display_one:
  data                 --> R22
  count                --> R20
    00F9 940E01A9  CALL	push_gset2
    00FB 2F62      MOV	R22,R18
    00FC 2F40      MOV	R20,R16
(0009) }
(0010) 
(0011) /***********************
(0012) ** 显示一位
(0013) ** 输入:count显示在第几位(3210),data 要显示的数(0~f)
(0014) ************************/
(0015) void display_one(uint8 count, uint8 data)
(0016) {
(0017)   led_port = led_data[data];                         //显示的数
    00FD E082      LDI	R24,2
    00FE 9F86      MUL	R24,R22
    00FF 01F0      MOVW	R30,R0
    0100 E584      LDI	R24,0x54
    0101 E090      LDI	R25,0
    0102 0FE8      ADD	R30,R24
    0103 1FF9      ADC	R31,R25
    0104 9005      LPM	R0,Z+
    0105 9014      LPM	R1,0(Z)
    0106 01F0      MOVW	R30,R0
    0107 BBEB      OUT	0x1B,R30
(0018)   led_contrl_port &= ~(1<<count);                    //选中对应要显示的位,从右至左,0123
    0108 E001      LDI	R16,1
    0109 2F14      MOV	R17,R20
    010A 940E01C2  CALL	lsl8
    010C 2E20      MOV	R2,R16
    010D 9420      COM	R2
    010E B235      IN	R3,0x15
    010F 2032      AND	R3,R2
    0110 BA35      OUT	0x15,R3
    0111 940E01A0  CALL	pop_gset2
    0113 9508      RET
_display:
  temp                 --> R20
  data                 --> R22
    0114 940E01A9  CALL	push_gset2
    0116 01B8      MOVW	R22,R16
(0019)                                                      //如果对位进行了调整,就不在是0123,而是对应的值
(0020) }
(0021) 
(0022) /***********************
(0023) ** 显示四位整数
(0024) ** 输入:要显示的四位数data,显示模式mode,1为补零显示模式,默认不显示零
(0025) ** 说明:可以小于四位数,mode=1时 自动补零
(0026) ************************/
(0027) void display(uint16 data)
(0028) {
(0029)  uint8 temp;
(0030)  if(data>1000)                           //千位
    0117 EE88      LDI	R24,0xE8
    0118 E093      LDI	R25,3
    0119 1786      CP	R24,R22
    011A 0797      CPC	R25,R23
    011B F478      BCC	0x012B
(0031)    {
(0032)      temp=data/1000;
    011C EE28      LDI	R18,0xE8
    011D E033      LDI	R19,3
    011E 018B      MOVW	R16,R22
    011F 940E0186  CALL	div16u
    0121 2F40      MOV	R20,R16
(0033)      display_one(0,temp);
    0122 2F24      MOV	R18,R20
    0123 2700      CLR	R16
    0124 DFD4      RCALL	_display_one
(0034)      delay_ms(1);                          //是个经验值,刚好无闪烁,并且亮度较高
    0125 E001      LDI	R16,1
    0126 E010      LDI	R17,0
    0127 940E00B4  CALL	_delay_ms
(0035)      led_contrl_port |= (1<<0);
    0129 9AA8      SBI	0x15,0
(0036)    }
    012A C008      RJMP	0x0133
(0037)  else
(0038)    {
(0039)      display_one(0,16);
    012B E120      LDI	R18,0x10
    012C 2700      CLR	R16
    012D DFCB      RCALL	_display_one
(0040)      delay_ms(1);
    012E E001      LDI	R16,1
    012F E010      LDI	R17,0
    0130 940E00B4  CALL	_delay_ms
(0041)      led_contrl_port |= (1<<0); 
    0132 9AA8      SBI	0x15,0
(0042)    }
(0043) 
(0044)  if(data>100)                            //百位
    0133 E684      LDI	R24,0x64
    0134 E090      LDI	R25,0
    0135 1786      CP	R24,R22
    0136 0797      CPC	R25,R23
    0137 F498      BCC	0x014B
(0045)    {
(0046)      temp=(data%1000)/100;
    0138 EE28      LDI	R18,0xE8
    0139 E033      LDI	R19,3
    013A 018B      MOVW	R16,R22
    013B 940E0184  CALL	mod16u
    013D E624      LDI	R18,0x64
    013E E030      LDI	R19,0
    013F 940E0186  CALL	div16u
    0141 2F40      MOV	R20,R16
(0047)      display_one(1,temp);
    0142 2F24      MOV	R18,R20
    0143 E001      LDI	R16,1
    0144 DFB4      RCALL	_display_one
(0048)      delay_ms(1);
    0145 E001      LDI	R16,1
    0146 E010      LDI	R17,0
    0147 940E00B4  CALL	_delay_ms
(0049)      led_contrl_port |= (1<<1);
    0149 9AA9      SBI	0x15,1
(0050)    }
    014A C008      RJMP	0x0153
(0051)  else
(0052)    {
(0053)      display_one(1,16);
    014B E120      LDI	R18,0x10
    014C E001      LDI	R16,1
    014D DFAB      RCALL	_display_one
(0054)      delay_ms(1);
    014E E001      LDI	R16,1
    014F E010      LDI	R17,0
    0150 940E00B4  CALL	_delay_ms
(0055)     led_contrl_port |= (1<<1);
    0152 9AA9      SBI	0x15,1
(0056)    }
(0057)  
(0058)  if(data>10)                            //十位
    0153 E08A      LDI	R24,0xA
    0154 E090      LDI	R25,0
    0155 1786      CP	R24,R22
    0156 0797      CPC	R25,R23
    0157 F498      BCC	0x016B
(0059)    {
(0060)      temp=(data%100)/10;
    0158 E624      LDI	R18,0x64
    0159 E030      LDI	R19,0
    015A 018B      MOVW	R16,R22
    015B 940E0184  CALL	mod16u
    015D E02A      LDI	R18,0xA
    015E E030      LDI	R19,0
    015F 940E0186  CALL	div16u
    0161 2F40      MOV	R20,R16
(0061)      display_one(2,temp);
    0162 2F24      MOV	R18,R20
    0163 E002      LDI	R16,2
    0164 DF94      RCALL	_display_one
(0062)      delay_ms(1);
    0165 E001      LDI	R16,1
    0166 E010      LDI	R17,0
    0167 940E00B4  CALL	_delay_ms
(0063)      led_contrl_port |= (1<<2);
    0169 9AAA      SBI	0x15,2
(0064)    }
    016A C008      RJMP	0x0173
(0065)  else
(0066)    {
(0067)      display_one(2,16);
    016B E120      LDI	R18,0x10
    016C E002      LDI	R16,2
    016D DF8B      RCALL	_display_one
(0068)      delay_ms(1);
    016E E001      LDI	R16,1
    016F E010      LDI	R17,0
    0170 940E00B4  CALL	_delay_ms
(0069)      led_contrl_port |= (1<<2);  
    0172 9AAA      SBI	0x15,2
(0070)  }
(0071)                                         //个位
(0072)  temp=data%10;
    0173 E02A      LDI	R18,0xA
    0174 E030      LDI	R19,0
    0175 018B      MOVW	R16,R22
    0176 940E0184  CALL	mod16u
    0178 2F40      MOV	R20,R16
(0073)  display_one(3,temp);
    0179 2F24      MOV	R18,R20
    017A E003      LDI	R16,3
    017B DF7D      RCALL	_display_one
(0074)  delay_ms(1);
    017C E001      LDI	R16,1
    017D E010      LDI	R17,0
    017E 940E00B4  CALL	_delay_ms
(0075)  led_contrl_port |= (1<<3);
FILE: <library>
    0180 9AAB      SBI	0x15,3
    0181 940E01A0  CALL	pop_gset2
    0183 9508      RET
mod16u:
    0184 9468      BSET	6
    0185 C001      RJMP	xdiv16u
div16u:
    0186 94E8      BCLR	6
xdiv16u:
    0187 92EA      ST	R14,-Y
    0188 92FA      ST	R15,-Y
    0189 938A      ST	R24,-Y
    018A 24EE      CLR	R14
    018B 24FF      CLR	R15
    018C E180      LDI	R24,0x10
    018D 0F00      LSL	R16
    018E 1F11      ROL	R17
    018F 1CEE      ROL	R14
    0190 1CFF      ROL	R15
    0191 16E2      CP	R14,R18
    0192 06F3      CPC	R15,R19
    0193 F018      BCS	0x0197
    0194 1AE2      SUB	R14,R18
    0195 0AF3      SBC	R15,R19
    0196 9503      INC	R16
    0197 958A      DEC	R24
    0198 F7A1      BNE	0x018D
    0199 F416      BRTC	0x019C
    019A 2D0E      MOV	R16,R14
    019B 2D1F      MOV	R17,R15
    019C 9189      LD	R24,Y+
    019D 90F9      LD	R15,Y+
    019E 90E9      LD	R14,Y+
    019F 9508      RET
pop_gset2:
    01A0 E0E2      LDI	R30,2
    01A1 940C01AF  JMP	pop
push_gset5:
    01A3 92FA      ST	R15,-Y
    01A4 92EA      ST	R14,-Y
push_gset4:
    01A5 92DA      ST	R13,-Y
    01A6 92CA      ST	R12,-Y
push_gset3:
    01A7 92BA      ST	R11,-Y
    01A8 92AA      ST	R10,-Y
push_gset2:
    01A9 937A      ST	R23,-Y
    01AA 936A      ST	R22,-Y
push_gset1:
    01AB 935A      ST	R21,-Y
    01AC 934A      ST	R20,-Y
    01AD 9508      RET
pop_gset1:
    01AE E0E1      LDI	R30,1
pop:
    01AF 9149      LD	R20,Y+
    01B0 9159      LD	R21,Y+
    01B1 FDE0      SBRC	R30,0
    01B2 9508      RET
    01B3 9169      LD	R22,Y+
    01B4 9179      LD	R23,Y+
    01B5 FDE1      SBRC	R30,1
    01B6 9508      RET
    01B7 90A9      LD	R10,Y+
    01B8 90B9      LD	R11,Y+
    01B9 FDE2      SBRC	R30,2
    01BA 9508      RET
    01BB 90C9      LD	R12,Y+
    01BC 90D9      LD	R13,Y+
    01BD FDE3      SBRC	R30,3
    01BE 9508      RET
    01BF 90E9      LD	R14,Y+
    01C0 90F9      LD	R15,Y+
    01C1 9508      RET
lsl8:
    01C2 2311      TST	R17
    01C3 F019      BEQ	0x01C7
    01C4 0F00      LSL	R16
    01C5 951A      DEC	R17
    01C6 CFFB      RJMP	lsl8
    01C7 9508      RET

⌨️ 快捷键说明

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