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

📄 hc595.lst

📁 ATMEGA128的EEPROM驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0138 F471      BNE	0x0147
    0139 91800101  LDS	R24,point_pos
    013B 3082      CPI	R24,2
    013C F451      BNE	0x0147
(0077)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
    013D E88C      LDI	R24,0x8C
    013E E090      LDI	R25,0
    013F 91E00104  LDS	R30,Seg7_Led_Buf+2
    0141 27FF      CLR	R31
    0142 0FE8      ADD	R30,R24
    0143 1FF9      ADC	R31,R25
    0144 9104      LPM	R16,0(Z)
    0145 6800      ORI	R16,0x80
    0146 DFA6      RCALL	_HC_595_OUT
(0078)  Seg7_Bit2_En();
    0147 9ABE      SBI	0x17,6
    0148 9AC6      SBI	0x18,6
(0079)  delay_nus(60);
    0149 E30C      LDI	R16,0x3C
    014A E010      LDI	R17,0
    014B 940E00A9  CALL	_delay_nus
(0080)  Seg7_Bit2_Dis();
    014D 9ABE      SBI	0x17,6
    014E 98C6      CBI	0x18,6
(0081)  
(0082)  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
    014F E88C      LDI	R24,0x8C
    0150 E090      LDI	R25,0
    0151 91E00105  LDS	R30,Seg7_Led_Buf+3
    0153 27FF      CLR	R31
    0154 0FE8      ADD	R30,R24
    0155 1FF9      ADC	R31,R25
    0156 9104      LPM	R16,0(Z)
    0157 DF95      RCALL	_HC_595_OUT
(0083)  if((point==1)&&(point_pos==3))
    0158 91800100  LDS	R24,point
    015A 3081      CPI	R24,1
    015B F471      BNE	0x016A
    015C 91800101  LDS	R24,point_pos
    015E 3083      CPI	R24,3
    015F F451      BNE	0x016A
(0084)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
    0160 E88C      LDI	R24,0x8C
    0161 E090      LDI	R25,0
    0162 91E00105  LDS	R30,Seg7_Led_Buf+3
    0164 27FF      CLR	R31
    0165 0FE8      ADD	R30,R24
    0166 1FF9      ADC	R31,R25
    0167 9104      LPM	R16,0(Z)
    0168 6800      ORI	R16,0x80
    0169 DF83      RCALL	_HC_595_OUT
(0085)  Seg7_Bit3_En();
    016A 9ABF      SBI	0x17,7
    016B 9AC7      SBI	0x18,7
(0086)  delay_nus(60);
    016C E30C      LDI	R16,0x3C
    016D E010      LDI	R17,0
    016E 940E00A9  CALL	_delay_nus
(0087)  Seg7_Bit3_Dis();
    0170 9ABF      SBI	0x17,7
    0171 98C7      CBI	0x18,7
    0172 9508      RET
_Seg7_Led_display:
  data                 --> R20
    0173 940E03FF  CALL	push_gset1
    0175 01A8      MOVW	R20,R16
(0088) }
(0089) /*************************************************************************
(0090) ** 函数名称:Hc595显示整形数据
(0091) ** 功能描述:
(0092) ** 输 入:0~9999
(0093) ** 输出	 :
(0094) ** 全局变量:
(0095) ** 调用模块: 
(0096) ** 说明:
(0097) ** 注意:
(0098) **************************************************************************/
(0099) void Seg7_Led_display(unsigned int data)
(0100) {
(0101)  if(data>9999) //错误处理,超出显示范围则全亮
    0176 E08F      LDI	R24,0xF
    0177 E297      LDI	R25,0x27
    0178 1784      CP	R24,R20
    0179 0795      CPC	R25,R21
    017A F430      BCC	0x0181
(0102)  	{
(0103) 	 HC_595_OUT(0xFF);
    017B EF0F      LDI	R16,0xFF
    017C DF70      RCALL	_HC_595_OUT
(0104) 	 Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
    017D B388      IN	R24,0x18
    017E 6F80      ORI	R24,0xF0
    017F BB88      OUT	0x18,R24
(0105) 	}
    0180 C07F      RJMP	0x0200
(0106)  else if(data>999)
    0181 EE87      LDI	R24,0xE7
    0182 E093      LDI	R25,3
    0183 1784      CP	R24,R20
    0184 0795      CPC	R25,R21
    0185 F530      BCC	0x01AC
(0107)  	{
(0108) 	 Seg7_Led_Buf[3]=data/1000;
    0186 EE28      LDI	R18,0xE8
    0187 E033      LDI	R19,3
    0188 018A      MOVW	R16,R20
    0189 940E03DA  CALL	div16u
    018B 93000105  STS	Seg7_Led_Buf+3,R16
(0109)  	 Seg7_Led_Buf[2]=(data%1000)/100;
    018D EE28      LDI	R18,0xE8
    018E E033      LDI	R19,3
    018F 018A      MOVW	R16,R20
    0190 940E03D8  CALL	mod16u
    0192 E624      LDI	R18,0x64
    0193 E030      LDI	R19,0
    0194 940E03DA  CALL	div16u
    0196 93000104  STS	Seg7_Led_Buf+2,R16
(0110)  	 Seg7_Led_Buf[1]=(data%100)/10;
    0198 E624      LDI	R18,0x64
    0199 E030      LDI	R19,0
    019A 018A      MOVW	R16,R20
    019B 940E03D8  CALL	mod16u
    019D E02A      LDI	R18,0xA
    019E E030      LDI	R19,0
    019F 940E03DA  CALL	div16u
    01A1 93000103  STS	Seg7_Led_Buf+1,R16
(0111)  	 Seg7_Led_Buf[0]=data%10;
    01A3 E02A      LDI	R18,0xA
    01A4 E030      LDI	R19,0
    01A5 018A      MOVW	R16,R20
    01A6 940E03D8  CALL	mod16u
    01A8 93000102  STS	Seg7_Led_Buf,R16
(0112) 	 Seg7_Led_Update();
    01AA DF4D      RCALL	_Seg7_Led_Update
(0113) 	}
    01AB C054      RJMP	0x0200
(0114)  else if(data>99)
    01AC E683      LDI	R24,0x63
    01AD E090      LDI	R25,0
    01AE 1784      CP	R24,R20
    01AF 0795      CPC	R25,R21
    01B0 F510      BCC	0x01D3
(0115)  	{
(0116) 	 Seg7_Led_Buf[3]=16;
    01B1 E180      LDI	R24,0x10
    01B2 93800105  STS	Seg7_Led_Buf+3,R24
(0117)  	 Seg7_Led_Buf[2]=(data%1000)/100;
    01B4 EE28      LDI	R18,0xE8
    01B5 E033      LDI	R19,3
    01B6 018A      MOVW	R16,R20
    01B7 940E03D8  CALL	mod16u
    01B9 E624      LDI	R18,0x64
    01BA E030      LDI	R19,0
    01BB 940E03DA  CALL	div16u
    01BD 93000104  STS	Seg7_Led_Buf+2,R16
(0118)  	 Seg7_Led_Buf[1]=(data%100)/10;
    01BF E624      LDI	R18,0x64
    01C0 E030      LDI	R19,0
    01C1 018A      MOVW	R16,R20
    01C2 940E03D8  CALL	mod16u
    01C4 E02A      LDI	R18,0xA
    01C5 E030      LDI	R19,0
    01C6 940E03DA  CALL	div16u
    01C8 93000103  STS	Seg7_Led_Buf+1,R16
(0119)  	 Seg7_Led_Buf[0]=data%10;
    01CA E02A      LDI	R18,0xA
    01CB E030      LDI	R19,0
    01CC 018A      MOVW	R16,R20
    01CD 940E03D8  CALL	mod16u
    01CF 93000102  STS	Seg7_Led_Buf,R16
(0120) 	 Seg7_Led_Update();
    01D1 DF26      RCALL	_Seg7_Led_Update
(0121) 	}
    01D2 C02D      RJMP	0x0200
(0122)  else if(data>9)
    01D3 E089      LDI	R24,0x9
    01D4 E090      LDI	R25,0
    01D5 1784      CP	R24,R20
    01D6 0795      CPC	R25,R21
    01D7 F4C8      BCC	0x01F1
(0123)  	{
(0124) 	 Seg7_Led_Buf[3]=16;
    01D8 E180      LDI	R24,0x10
    01D9 93800105  STS	Seg7_Led_Buf+3,R24
(0125)  	 Seg7_Led_Buf[2]=16;
    01DB 93800104  STS	Seg7_Led_Buf+2,R24
(0126)  	 Seg7_Led_Buf[1]=(data%100)/10;
    01DD E624      LDI	R18,0x64
    01DE E030      LDI	R19,0
    01DF 018A      MOVW	R16,R20
    01E0 940E03D8  CALL	mod16u
    01E2 E02A      LDI	R18,0xA
    01E3 E030      LDI	R19,0
    01E4 940E03DA  CALL	div16u
    01E6 93000103  STS	Seg7_Led_Buf+1,R16
(0127)  	 Seg7_Led_Buf[0]=data%10;
    01E8 E02A      LDI	R18,0xA
    01E9 E030      LDI	R19,0
    01EA 018A      MOVW	R16,R20
    01EB 940E03D8  CALL	mod16u
    01ED 93000102  STS	Seg7_Led_Buf,R16
(0128) 	 Seg7_Led_Update();
    01EF DF08      RCALL	_Seg7_Led_Update
(0129) 	}
    01F0 C00F      RJMP	0x0200
(0130)  else
(0131)  	{
(0132) 	 Seg7_Led_Buf[3]=16;
    01F1 E180      LDI	R24,0x10
    01F2 93800105  STS	Seg7_Led_Buf+3,R24
(0133)  	 Seg7_Led_Buf[2]=16;
    01F4 93800104  STS	Seg7_Led_Buf+2,R24
(0134)  	 Seg7_Led_Buf[1]=16;
    01F6 93800103  STS	Seg7_Led_Buf+1,R24
(0135)  	 Seg7_Led_Buf[0]=data%10;
    01F8 E02A      LDI	R18,0xA
    01F9 E030      LDI	R19,0
    01FA 018A      MOVW	R16,R20
    01FB 940E03D8  CALL	mod16u
    01FD 93000102  STS	Seg7_Led_Buf,R16
(0136) 	 Seg7_Led_Update();
    01FF DEF8      RCALL	_Seg7_Led_Update
(0137) 	}
    0200 940E0402  CALL	pop_gset1
    0202 9508      RET
_Seg7_Led_float:
  temp                 --> R20
  data                 --> Y+8
    0203 940E03D3  CALL	push_arg4
    0205 940E03FD  CALL	push_gset2
    0207 9724      SBIW	R28,4
(0138) }
(0139) /*************************************************************************
(0140) ** 函数名称:HC595显示浮点数据
(0141) ** 功能描述:
(0142) ** 输 入:
(0143) ** 输出	 :
(0144) ** 全局变量:
(0145) ** 调用模块: 
(0146) ** 说明:
(0147) ** 注意:
(0148) **************************************************************************/
(0149) void Seg7_Led_float(float data)
(0150) {
(0151)  unsigned int temp;
(0152)  /*
(0153)  重要说明:data+=0.00001;其中0.00001为容错值
(0154)  解决float数据类型在计算机内部存储的误差问题,可以解决显示问题
(0155)  但是会引入新的计算误差,如果精度要求大于0.00001建议更改容错值或者将此处注释掉 
(0156)  */
(0157)  data+=0.00001;
    0208 01FE      MOVW	R30,R28
    0209 8420      LDD	R2,Z+8
    020A 8431      LDD	R3,Z+9
    020B 8442      LDD	R4,Z+10
    020C 8453      LDD	R5,Z+11
    020D 925A      ST	R5,-Y
    020E 924A      ST	R4,-Y
    020F 923A      ST	R3,-Y
    0210 922A      ST	R2,-Y
    0211 EB09      LDI	R16,0xB9
    0212 E010      LDI	R17,0
    0213 940E041F  CALL	lpm32
    0215 933A      ST	R19,-Y
    0216 932A      ST	R18,-Y
    0217 931A      ST	R17,-Y
    0218 930A      ST	R16,-Y
    0219 940E04A8  CALL	add32f
    021B 01FE      MOVW	R30,R28
    021C 8700      STD	Z+8,R16
    021D 8711      STD	Z+9,R17
    021E 8722      STD	Z+10,R18
    021F 8733      STD	Z+11,R19
(0158)  point=1;
    0220 E081      LDI	R24,1
    0221 93800100  STS	point,R24
(0159)  if(data>999) //错误处理,超出显示范围则全亮
    0223 EB05      LDI	R16,0xB5
    0224 E010      LDI	R17,0
    0225 940E041F  CALL	lpm32
    0227 933A      ST	R19,-Y
    0228 932A      ST	R18,-Y
    0229 931A      ST	R17,-Y
    022A 930A      ST	R16,-Y
    022B 01FE      MOVW	R30,R28
    022C 8424      LDD	R2,Z+12
    022D 8435      LDD	R3,Z+13
    022E 8446      LDD	R4,Z+14
    022F 8457      LDD	R5,Z+15
    0230 925A      ST	R5,-Y
    0231 924A      ST	R4,-Y
    0232 923A      ST	R3,-Y
    0233 922A      ST	R2,-Y
    0234 940E0506  CALL	cmp32f
    0236 F434      BGE	0x023D
(0160)  	{
(0161) 	 HC_595_OUT(0xFF);
    0237 EF0F      LDI	R16,0xFF
    0238 DEB4      RCALL	_HC_595_OUT
(0162) 	 Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
    0239 B388      IN	R24,0x18
    023A 6F80      ORI	R24,0xF0
    023B BB88      OUT	0x18,R24
(0163) 	}
    023C C18E      RJMP	0x03CB
(0164)  else if(data>99)
    023D EB01      LDI	R16,0xB1
    023E E010      LDI	R17,0
    023F 940E041F  CALL	lpm32
    0241 933A      ST	R19,-Y
    0242 932A      ST	R18,-Y
    0243 931A      ST	R17,-Y
    0244 930A      ST	R16,-Y
    0245 01FE      MOVW	R30,R28
    0246 8424      LDD	R2,Z+12
    0247 8435      LDD	R3,Z+13
    0248 8446      LDD	R4,Z+14
    0249 8457      LDD	R5,Z+15
    024A 925A      ST	R5,-Y
    024B 924A      ST	R4,-Y
    024C 923A      ST	R3,-Y
    024D 922A      ST	R2,-Y
    024E 940E0506  CALL	cmp32f
    0250 F00C      BLT	0x0252
    0251 C077      RJMP	0x02C9
(0165)  	{
(0166) 	 temp=data*10;
    0252 EA0D      LDI	R16,0xAD
    0253 E010      LDI	R17,0
    0254 940E041F  CALL	lpm32
    0256 933A      ST	R19,-Y
    0257 932A      ST	R18,-Y
    0258 931A      ST	R17,-Y
    0259 930A      ST	R16,-Y
    025A 01FE      MOVW	R30,R28
    025B 8424      LDD	R2,Z+12
    025C 8435      LDD	R3,Z+13
    025D 8446      LDD	R4,Z+14
    025E 8457      LDD	R5,Z+15
    025F 925A      ST	R5,-Y
    0260 924A      ST	R4,-Y
    0261 923A      ST	R3,-Y
    0262 922A      ST	R2,-Y
    0263 940E053A  CALL	empy32f
    0265 01FE      MOVW	R30,R28
    0266 8300      STD	Z+0,R16
    0267 8311      STD	Z+1,R17
    0268 8322      STD	Z+2,R18
    0269 8333      STD	Z+3,R19
    026A 01FE      MOVW	R30,R28
    026B 8020      LDD	R2,Z+0
    026C 8031      LDD	R3,Z+1
    026D 8042      LDD	R4,Z+2
    026E 8053      LDD	R5,Z+3
    026F 925A      ST	R5,-Y
    0270 924A      ST	R4,-Y
    0271 923A      ST	R3,-Y
    0272 922A      ST	R2,-Y
    0273 EA09      LDI	R16,0xA9
    0274 E010      LDI	R17,0
    0275 940E041F  CALL	lpm32
    0277 933A      ST	R19,-Y
    0278 932A      ST	R18,-Y
    0279 931A      ST	R17,-Y
    027A 930A      ST	R16,-Y
    027B 940E0506  CALL	cmp32f
    027D F0CC      BLT	0x0297
    027E 01FE      MOVW	R30,R28
    027F 8020      LDD	R2,Z+0
    0280 8031      LDD	R3,Z+1
    0281 8042      LDD	R4,Z+2
    0282 8053      LDD	R5,Z+3
    0283 925A      ST	R5,-Y
    0284 924A      ST	R4,-Y
    0285 923A      ST	R3,-Y
    0286 922A      ST	R2,-Y
    0287 EA09      LDI	R16,0xA9
    0288 E010      LDI	R17,0
    0289 940E041F  CALL	lpm32
    028B 933A      ST	R19,-Y
    028C 932A      ST	R18,-Y
    028D 931A      ST	R17,-Y
    028E 930A      ST	R16,-Y
    028F 940E04B0  CALL	sub32f
    0291 940E0433  CALL	fp2int
    0293 01B8      MOVW	R22,R16
    0294 5060      SUBI	R22,0
    0295 4870      SBCI	R23,0x80
    0296 C008      RJMP	0x029F
    0297 01FE      MOVW	R30,R28
    0298 8100      LDD	R16,Z+0
    0299 8111      LDD	R17,Z+1
    029A 8122      LDD	R18,Z+2
    029B 8133      LDD	R19,Z+3
    029C 940E0433  CALL	fp2int
    029E 01B8      MOVW	R22,R16
    029F 01AB      MOVW	R20,R22
(0167) 	 point_pos=1;
    02A0 E081      LDI	R24,1
    02A1 93800101  STS	point_pos,R24
(0168) 	 Seg7_Led_Buf[3]=temp/1000;
    02A3 EE28      LDI	R18,0xE8
    02A4 E033      LDI	R19,3
    02A5 018A      MOVW	R16,R20
    02A6 940E03DA  CALL	div16u

⌨️ 快捷键说明

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