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

📄 hc595.lst

📁 ATMEGA128的SEG7驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0149 91800102  LDS	R24,point
    014B 3081      CPI	R24,1
    014C F471      BNE	0x015B
    014D 91800103  LDS	R24,point_pos
    014F 3081      CPI	R24,1
    0150 F451      BNE	0x015B
(0070)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
    0151 E88C      LDI	R24,0x8C
    0152 E090      LDI	R25,0
    0153 91E00105  LDS	R30,Seg7_Led_Buf+1
    0155 27FF      CLR	R31
    0156 0FE8      ADD	R30,R24
    0157 1FF9      ADC	R31,R25
    0158 9104      LPM	R16,0(Z)
    0159 6800      ORI	R16,0x80
    015A DFC9      RCALL	_HC_595_OUT
(0071)  Seg7_Bit1_En();
    015B 9ABD      SBI	0x17,5
    015C 9AC5      SBI	0x18,5
(0072)  delay_nus(60);
    015D E30C      LDI	R16,0x3C
    015E E010      LDI	R17,0
    015F 940E00E0  CALL	_delay_nus
(0073)  Seg7_Bit1_Dis();
    0161 9ABD      SBI	0x17,5
    0162 98C5      CBI	0x18,5
(0074)  
(0075)  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]); 
    0163 E88C      LDI	R24,0x8C
    0164 E090      LDI	R25,0
    0165 91E00106  LDS	R30,Seg7_Led_Buf+2
    0167 27FF      CLR	R31
    0168 0FE8      ADD	R30,R24
    0169 1FF9      ADC	R31,R25
    016A 9104      LPM	R16,0(Z)
    016B DFB8      RCALL	_HC_595_OUT
(0076)  if((point==1)&&(point_pos==2))
    016C 91800102  LDS	R24,point
    016E 3081      CPI	R24,1
    016F F471      BNE	0x017E
    0170 91800103  LDS	R24,point_pos
    0172 3082      CPI	R24,2
    0173 F451      BNE	0x017E
(0077)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
    0174 E88C      LDI	R24,0x8C
    0175 E090      LDI	R25,0
    0176 91E00106  LDS	R30,Seg7_Led_Buf+2
    0178 27FF      CLR	R31
    0179 0FE8      ADD	R30,R24
    017A 1FF9      ADC	R31,R25
    017B 9104      LPM	R16,0(Z)
    017C 6800      ORI	R16,0x80
    017D DFA6      RCALL	_HC_595_OUT
(0078)  Seg7_Bit2_En();
    017E 9ABE      SBI	0x17,6
    017F 9AC6      SBI	0x18,6
(0079)  delay_nus(60);
    0180 E30C      LDI	R16,0x3C
    0181 E010      LDI	R17,0
    0182 940E00E0  CALL	_delay_nus
(0080)  Seg7_Bit2_Dis();
    0184 9ABE      SBI	0x17,6
    0185 98C6      CBI	0x18,6
(0081)  
(0082)  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
    0186 E88C      LDI	R24,0x8C
    0187 E090      LDI	R25,0
    0188 91E00107  LDS	R30,Seg7_Led_Buf+3
    018A 27FF      CLR	R31
    018B 0FE8      ADD	R30,R24
    018C 1FF9      ADC	R31,R25
    018D 9104      LPM	R16,0(Z)
    018E DF95      RCALL	_HC_595_OUT
(0083)  if((point==1)&&(point_pos==3))
    018F 91800102  LDS	R24,point
    0191 3081      CPI	R24,1
    0192 F471      BNE	0x01A1
    0193 91800103  LDS	R24,point_pos
    0195 3083      CPI	R24,3
    0196 F451      BNE	0x01A1
(0084)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
    0197 E88C      LDI	R24,0x8C
    0198 E090      LDI	R25,0
    0199 91E00107  LDS	R30,Seg7_Led_Buf+3
    019B 27FF      CLR	R31
    019C 0FE8      ADD	R30,R24
    019D 1FF9      ADC	R31,R25
    019E 9104      LPM	R16,0(Z)
    019F 6800      ORI	R16,0x80
    01A0 DF83      RCALL	_HC_595_OUT
(0085)  Seg7_Bit3_En();
    01A1 9ABF      SBI	0x17,7
    01A2 9AC7      SBI	0x18,7
(0086)  delay_nus(60);
    01A3 E30C      LDI	R16,0x3C
    01A4 E010      LDI	R17,0
    01A5 940E00E0  CALL	_delay_nus
(0087)  Seg7_Bit3_Dis();
    01A7 9ABF      SBI	0x17,7
    01A8 98C7      CBI	0x18,7
    01A9 9508      RET
_Seg7_Led_display:
  data                 --> R20
    01AA 940E0436  CALL	push_gset1
    01AC 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) //错误处理,超出显示范围则全亮
    01AD E08F      LDI	R24,0xF
    01AE E297      LDI	R25,0x27
    01AF 1784      CP	R24,R20
    01B0 0795      CPC	R25,R21
    01B1 F430      BCC	0x01B8
(0102)  	{
(0103) 	 HC_595_OUT(0xFF);
    01B2 EF0F      LDI	R16,0xFF
    01B3 DF70      RCALL	_HC_595_OUT
(0104) 	 Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
    01B4 B388      IN	R24,0x18
    01B5 6F80      ORI	R24,0xF0
    01B6 BB88      OUT	0x18,R24
(0105) 	}
    01B7 C07F      RJMP	0x0237
(0106)  else if(data>999)
    01B8 EE87      LDI	R24,0xE7
    01B9 E093      LDI	R25,3
    01BA 1784      CP	R24,R20
    01BB 0795      CPC	R25,R21
    01BC F530      BCC	0x01E3
(0107)  	{
(0108) 	 Seg7_Led_Buf[3]=data/1000;
    01BD EE28      LDI	R18,0xE8
    01BE E033      LDI	R19,3
    01BF 018A      MOVW	R16,R20
    01C0 940E0411  CALL	div16u
    01C2 93000107  STS	Seg7_Led_Buf+3,R16
(0109)  	 Seg7_Led_Buf[2]=(data%1000)/100;
    01C4 EE28      LDI	R18,0xE8
    01C5 E033      LDI	R19,3
    01C6 018A      MOVW	R16,R20
    01C7 940E040F  CALL	mod16u
    01C9 E624      LDI	R18,0x64
    01CA E030      LDI	R19,0
    01CB 940E0411  CALL	div16u
    01CD 93000106  STS	Seg7_Led_Buf+2,R16
(0110)  	 Seg7_Led_Buf[1]=(data%100)/10;
    01CF E624      LDI	R18,0x64
    01D0 E030      LDI	R19,0
    01D1 018A      MOVW	R16,R20
    01D2 940E040F  CALL	mod16u
    01D4 E02A      LDI	R18,0xA
    01D5 E030      LDI	R19,0
    01D6 940E0411  CALL	div16u
    01D8 93000105  STS	Seg7_Led_Buf+1,R16
(0111)  	 Seg7_Led_Buf[0]=data%10;
    01DA E02A      LDI	R18,0xA
    01DB E030      LDI	R19,0
    01DC 018A      MOVW	R16,R20
    01DD 940E040F  CALL	mod16u
    01DF 93000104  STS	Seg7_Led_Buf,R16
(0112) 	 Seg7_Led_Update();
    01E1 DF4D      RCALL	_Seg7_Led_Update
(0113) 	}
    01E2 C054      RJMP	0x0237
(0114)  else if(data>99)
    01E3 E683      LDI	R24,0x63
    01E4 E090      LDI	R25,0
    01E5 1784      CP	R24,R20
    01E6 0795      CPC	R25,R21
    01E7 F510      BCC	0x020A
(0115)  	{
(0116) 	 Seg7_Led_Buf[3]=16;
    01E8 E180      LDI	R24,0x10
    01E9 93800107  STS	Seg7_Led_Buf+3,R24
(0117)  	 Seg7_Led_Buf[2]=(data%1000)/100;
    01EB EE28      LDI	R18,0xE8
    01EC E033      LDI	R19,3
    01ED 018A      MOVW	R16,R20
    01EE 940E040F  CALL	mod16u
    01F0 E624      LDI	R18,0x64
    01F1 E030      LDI	R19,0
    01F2 940E0411  CALL	div16u
    01F4 93000106  STS	Seg7_Led_Buf+2,R16
(0118)  	 Seg7_Led_Buf[1]=(data%100)/10;
    01F6 E624      LDI	R18,0x64
    01F7 E030      LDI	R19,0
    01F8 018A      MOVW	R16,R20
    01F9 940E040F  CALL	mod16u
    01FB E02A      LDI	R18,0xA
    01FC E030      LDI	R19,0
    01FD 940E0411  CALL	div16u
    01FF 93000105  STS	Seg7_Led_Buf+1,R16
(0119)  	 Seg7_Led_Buf[0]=data%10;
    0201 E02A      LDI	R18,0xA
    0202 E030      LDI	R19,0
    0203 018A      MOVW	R16,R20
    0204 940E040F  CALL	mod16u
    0206 93000104  STS	Seg7_Led_Buf,R16
(0120) 	 Seg7_Led_Update();
    0208 DF26      RCALL	_Seg7_Led_Update
(0121) 	}
    0209 C02D      RJMP	0x0237
(0122)  else if(data>9)
    020A E089      LDI	R24,0x9
    020B E090      LDI	R25,0
    020C 1784      CP	R24,R20
    020D 0795      CPC	R25,R21
    020E F4C8      BCC	0x0228
(0123)  	{
(0124) 	 Seg7_Led_Buf[3]=16;
    020F E180      LDI	R24,0x10
    0210 93800107  STS	Seg7_Led_Buf+3,R24
(0125)  	 Seg7_Led_Buf[2]=16;
    0212 93800106  STS	Seg7_Led_Buf+2,R24
(0126)  	 Seg7_Led_Buf[1]=(data%100)/10;
    0214 E624      LDI	R18,0x64
    0215 E030      LDI	R19,0
    0216 018A      MOVW	R16,R20
    0217 940E040F  CALL	mod16u
    0219 E02A      LDI	R18,0xA
    021A E030      LDI	R19,0
    021B 940E0411  CALL	div16u
    021D 93000105  STS	Seg7_Led_Buf+1,R16
(0127)  	 Seg7_Led_Buf[0]=data%10;
    021F E02A      LDI	R18,0xA
    0220 E030      LDI	R19,0
    0221 018A      MOVW	R16,R20
    0222 940E040F  CALL	mod16u
    0224 93000104  STS	Seg7_Led_Buf,R16
(0128) 	 Seg7_Led_Update();
    0226 DF08      RCALL	_Seg7_Led_Update
(0129) 	}
    0227 C00F      RJMP	0x0237
(0130)  else
(0131)  	{
(0132) 	 Seg7_Led_Buf[3]=16;
    0228 E180      LDI	R24,0x10
    0229 93800107  STS	Seg7_Led_Buf+3,R24
(0133)  	 Seg7_Led_Buf[2]=16;
    022B 93800106  STS	Seg7_Led_Buf+2,R24
(0134)  	 Seg7_Led_Buf[1]=16;
    022D 93800105  STS	Seg7_Led_Buf+1,R24
(0135)  	 Seg7_Led_Buf[0]=data%10;
    022F E02A      LDI	R18,0xA
    0230 E030      LDI	R19,0
    0231 018A      MOVW	R16,R20
    0232 940E040F  CALL	mod16u
    0234 93000104  STS	Seg7_Led_Buf,R16
(0136) 	 Seg7_Led_Update();
    0236 DEF8      RCALL	_Seg7_Led_Update
(0137) 	}
    0237 940E0439  CALL	pop_gset1
    0239 9508      RET
_Seg7_Led_float:
  temp                 --> R20
  data                 --> Y+8
    023A 940E040A  CALL	push_arg4
    023C 940E0434  CALL	push_gset2
    023E 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;
    023F 01FE      MOVW	R30,R28
    0240 8420      LDD	R2,Z+8
    0241 8431      LDD	R3,Z+9
    0242 8442      LDD	R4,Z+10
    0243 8453      LDD	R5,Z+11
    0244 925A      ST	R5,-Y
    0245 924A      ST	R4,-Y
    0246 923A      ST	R3,-Y
    0247 922A      ST	R2,-Y
    0248 EB09      LDI	R16,0xB9
    0249 E010      LDI	R17,0
    024A 940E0456  CALL	lpm32
    024C 933A      ST	R19,-Y
    024D 932A      ST	R18,-Y
    024E 931A      ST	R17,-Y
    024F 930A      ST	R16,-Y
    0250 940E04DF  CALL	add32f
    0252 01FE      MOVW	R30,R28
    0253 8700      STD	Z+8,R16
    0254 8711      STD	Z+9,R17
    0255 8722      STD	Z+10,R18
    0256 8733      STD	Z+11,R19
(0158)  point=1;
    0257 E081      LDI	R24,1
    0258 93800102  STS	point,R24
(0159)  if(data>999) //错误处理,超出显示范围则全亮
    025A EB05      LDI	R16,0xB5
    025B E010      LDI	R17,0
    025C 940E0456  CALL	lpm32
    025E 933A      ST	R19,-Y
    025F 932A      ST	R18,-Y
    0260 931A      ST	R17,-Y
    0261 930A      ST	R16,-Y
    0262 01FE      MOVW	R30,R28
    0263 8424      LDD	R2,Z+12
    0264 8435      LDD	R3,Z+13
    0265 8446      LDD	R4,Z+14
    0266 8457      LDD	R5,Z+15
    0267 925A      ST	R5,-Y
    0268 924A      ST	R4,-Y
    0269 923A      ST	R3,-Y
    026A 922A      ST	R2,-Y
    026B 940E053D  CALL	cmp32f
    026D F434      BGE	0x0274
(0160)  	{
(0161) 	 HC_595_OUT(0xFF);
    026E EF0F      LDI	R16,0xFF
    026F DEB4      RCALL	_HC_595_OUT
(0162) 	 Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
    0270 B388      IN	R24,0x18
    0271 6F80      ORI	R24,0xF0
    0272 BB88      OUT	0x18,R24
(0163) 	}
    0273 C18E      RJMP	0x0402
(0164)  else if(data>99)
    0274 EB01      LDI	R16,0xB1
    0275 E010      LDI	R17,0
    0276 940E0456  CALL	lpm32
    0278 933A      ST	R19,-Y
    0279 932A      ST	R18,-Y
    027A 931A      ST	R17,-Y
    027B 930A      ST	R16,-Y
    027C 01FE      MOVW	R30,R28
    027D 8424      LDD	R2,Z+12
    027E 8435      LDD	R3,Z+13
    027F 8446      LDD	R4,Z+14
    0280 8457      LDD	R5,Z+15
    0281 925A      ST	R5,-Y
    0282 924A      ST	R4,-Y
    0283 923A      ST	R3,-Y
    0284 922A      ST	R2,-Y
    0285 940E053D  CALL	cmp32f
    0287 F00C      BLT	0x0289
    0288 C077      RJMP	0x0300
(0165)  	{
(0166) 	 temp=data*10;
    0289 EA0D      LDI	R16,0xAD
    028A E010      LDI	R17,0
    028B 940E0456  CALL	lpm32
    028D 933A      ST	R19,-Y
    028E 932A      ST	R18,-Y
    028F 931A      ST	R17,-Y
    0290 930A      ST	R16,-Y
    0291 01FE      MOVW	R30,R28
    0292 8424      LDD	R2,Z+12
    0293 8435      LDD	R3,Z+13
    0294 8446      LDD	R4,Z+14
    0295 8457      LDD	R5,Z+15
    0296 925A      ST	R5,-Y
    0297 924A      ST	R4,-Y
    0298 923A      ST	R3,-Y
    0299 922A      ST	R2,-Y
    029A 940E0571  CALL	empy32f
    029C 01FE      MOVW	R30,R28
    029D 8300      STD	Z+0,R16
    029E 8311      STD	Z+1,R17
    029F 8322      STD	Z+2,R18
    02A0 8333      STD	Z+3,R19
    02A1 01FE      MOVW	R30,R28
    02A2 8020      LDD	R2,Z+0
    02A3 8031      LDD	R3,Z+1
    02A4 8042      LDD	R4,Z+2
    02A5 8053      LDD	R5,Z+3
    02A6 925A      ST	R5,-Y
    02A7 924A      ST	R4,-Y
    02A8 923A      ST	R3,-Y
    02A9 922A      ST	R2,-Y
    02AA EA09      LDI	R16,0xA9
    02AB E010      LDI	R17,0
    02AC 940E0456  CALL	lpm32
    02AE 933A      ST	R19,-Y
    02AF 932A      ST	R18,-Y
    02B0 931A      ST	R17,-Y
    02B1 930A      ST	R16,-Y
    02B2 940E053D  CALL	cmp32f
    02B4 F0CC      BLT	0x02CE
    02B5 01FE      MOVW	R30,R28
    02B6 8020      LDD	R2,Z+0
    02B7 8031      LDD	R3,Z+1
    02B8 8042      LDD	R4,Z+2
    02B9 8053      LDD	R5,Z+3
    02BA 925A      ST	R5,-Y
    02BB 924A      ST	R4,-Y
    02BC 923A      ST	R3,-Y
    02BD 922A      ST	R2,-Y
    02BE EA09      LDI	R16,0xA9
    02BF E010      LDI	R17,0
    02C0 940E0456  CALL	lpm32

⌨️ 快捷键说明

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