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

📄 zlg7290.lst

📁 数码管 按键芯片zlg7290的atmega128 的c语言程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    024F E010      LDI	R17,0
    0250 DF68      RCALL	_delay1
(0153) 	for ( x=0; x<8; x++ )
    0251 2744      CLR	R20
    0252 C007      RJMP	0x025A
(0154) 	{
(0155) 		ZLG7290_WriteReg(ZLG7290_ScanNum,x);
    0253 2F24      MOV	R18,R20
    0254 E00D      LDI	R16,0xD
    0255 DEF1      RCALL	_ZLG7290_WriteReg
(0156) 		delay(100);
    0256 E604      LDI	R16,0x64
    0257 E010      LDI	R17,0
    0258 DE20      RCALL	_delay
    0259 9543      INC	R20
    025A 3048      CPI	R20,0x8
    025B F3B8      BCS	0x0253
(0157) 	}
(0158) }
    025C 9623      ADIW	R28,3
    025D 940E0351  CALL	pop_gset1
    025F 9508      RET
_Test_Flash:
  dat                  --> R20
  x                    --> R22
    0260 940E0365  CALL	push_gset2
    0262 9723      SBIW	R28,3
(0159) 
(0160) /*
(0161) 函数:Test_Flash()
(0162) 功能:测试闪烁功能
(0163) */
(0164) void Test_Flash()
(0165) {
(0166) 	uchar dat = 0x01;
    0263 E041      LDI	R20,1
(0167) 	uchar x;
(0168) //显示01234567
(0169) 	for ( x=0; x<8; x++ )
    0264 2766      CLR	R22
    0265 C007      RJMP	0x026D
(0170) 	{
(0171) 		ZLG7290_Download(x,0,0,x);
    0266 836A      STD	R22,2+Y
    0267 2422      CLR	R2
    0268 8228      STD	R2,0+Y
    0269 2722      CLR	R18
    026A 2F06      MOV	R16,R22
    026B DF21      RCALL	_ZLG7290_Download
    026C 9563      INC	R22
    026D 3068      CPI	R22,0x8
    026E F3B8      BCS	0x0266
(0172) 	}
(0173) //设置闪烁控制寄存器
(0174) 	ZLG7290_WriteReg(ZLG7290_FlashOnOff,0x11);	
    026F E121      LDI	R18,0x11
    0270 E00C      LDI	R16,0xC
    0271 DED5      RCALL	_ZLG7290_WriteReg
(0175) //闪烁演示
(0176) 	for ( x=0; x<8; x++ )
    0272 2766      CLR	R22
    0273 C008      RJMP	0x027C
(0177) 	{
(0178) 		ZLG7290_Flash(dat);
    0274 2F24      MOV	R18,R20
    0275 E700      LDI	R16,0x70
    0276 DEF4      RCALL	_ZLG7290_cmd
(0179) 		dat <<= 1;
    0277 0F44      LSL	R20
(0180) 		delay1(300);
    0278 E20C      LDI	R16,0x2C
    0279 E011      LDI	R17,1
    027A DF3E      RCALL	_delay1
    027B 9563      INC	R22
    027C 3068      CPI	R22,0x8
    027D F3B0      BCS	0x0274
(0181) 	}
(0182) //数码管的8个位一起闪烁
(0183) 	ZLG7290_Flash(0xFF);
    027E EF2F      LDI	R18,0xFF
    027F E700      LDI	R16,0x70
    0280 DEEA      RCALL	_ZLG7290_cmd
(0184) 	delay1(350);
    0281 E50E      LDI	R16,0x5E
    0282 E011      LDI	R17,1
    0283 DF35      RCALL	_delay1
(0185) //停止闪烁
(0186) 	ZLG7290_Flash(0x00);
    0284 2722      CLR	R18
    0285 E700      LDI	R16,0x70
    0286 DEE4      RCALL	_ZLG7290_cmd
(0187) 	delay1(50);
    0287 E302      LDI	R16,0x32
    0288 E010      LDI	R17,0
    0289 DF2F      RCALL	_delay1
(0188) }
    028A 9623      ADIW	R28,3
    028B 940E0375  CALL	pop_gset2
    028D 9508      RET
_Test_SegOnOff:
  seg                  --> R20
    028E 940E034E  CALL	push_gset1
(0189) 
(0190) /*
(0191) 函数:Test_SegOnOff()
(0192) 功能:测试段寻址功能
(0193) */
(0194) void Test_SegOnOff()
(0195) {
(0196) 	uchar seg;
(0197) 	ClearAll();
    0290 DF41      RCALL	_ClearAll
(0198) 	delay1(100);
    0291 E604      LDI	R16,0x64
    0292 E010      LDI	R17,0
    0293 DF25      RCALL	_delay1
(0199) 	for ( seg=0; seg<64; seg++ )
    0294 2744      CLR	R20
    0295 C007      RJMP	0x029D
(0200) 	{
(0201) 		ZLG7290_SegOnOff(seg,1);
    0296 E021      LDI	R18,1
    0297 2F04      MOV	R16,R20
    0298 DEE6      RCALL	_ZLG7290_SegOnOff
(0202) 		delay1(30);
    0299 E10E      LDI	R16,0x1E
    029A E010      LDI	R17,0
    029B DF1D      RCALL	_delay1
    029C 9543      INC	R20
    029D 3440      CPI	R20,0x40
    029E F3B8      BCS	0x0296
(0203) 	}
(0204) 	delay1(100);
    029F E604      LDI	R16,0x64
    02A0 E010      LDI	R17,0
    02A1 DF17      RCALL	_delay1
(0205) 	for ( seg=0; seg<64; seg++ )
    02A2 2744      CLR	R20
    02A3 C007      RJMP	0x02AB
(0206) 	{
(0207) 		ZLG7290_SegOnOff(seg,0);
    02A4 2722      CLR	R18
    02A5 2F04      MOV	R16,R20
    02A6 DED8      RCALL	_ZLG7290_SegOnOff
(0208) 		delay1(30);
    02A7 E10E      LDI	R16,0x1E
    02A8 E010      LDI	R17,0
    02A9 DF0F      RCALL	_delay1
    02AA 9543      INC	R20
    02AB 3440      CPI	R20,0x40
    02AC F3B8      BCS	0x02A4
(0209) 	}
(0210) 	delay1(100);
    02AD E604      LDI	R16,0x64
    02AE E010      LDI	R17,0
    02AF DF09      RCALL	_delay1
(0211) }
    02B0 940E0351  CALL	pop_gset1
    02B2 9508      RET
_DispValue:
  d                    --> R22
  dat                  --> R10
  x                    --> R20
    02B3 940E0369  CALL	push_gset3
    02B5 2EA2      MOV	R10,R18
    02B6 2F40      MOV	R20,R16
    02B7 9723      SBIW	R28,3
(0212) 
(0213) /*
(0214) 函数:DispValue()
(0215) 功能:显示100以内的数值
(0216) 参数:
(0217) 	x:显示位置,取值0~6
(0218) 	dat:要显示的数据,取值0~99
(0219) */
(0220) void DispValue(uchar x, uchar dat)
(0221) {
(0222) 	uchar d;
(0223) 	d = dat / 10;
    02B8 E01A      LDI	R17,0xA
    02B9 2D0A      MOV	R16,R10
    02BA 940E033C  CALL	div8u
    02BC 2F60      MOV	R22,R16
(0224) 	ZLG7290_Download(x,0,0,d);
    02BD 836A      STD	R22,2+Y
    02BE 2422      CLR	R2
    02BF 8228      STD	R2,0+Y
    02C0 2722      CLR	R18
    02C1 2F04      MOV	R16,R20
    02C2 DECA      RCALL	_ZLG7290_Download
(0225) 	d = dat - d * 10;
    02C3 E08A      LDI	R24,0xA
    02C4 9F86      MUL	R24,R22
    02C5 2D6A      MOV	R22,R10
    02C6 1960      SUB	R22,R0
(0226) 	ZLG7290_Download(x+1,0,0,d);
    02C7 836A      STD	R22,2+Y
    02C8 2422      CLR	R2
    02C9 8228      STD	R2,0+Y
    02CA 2722      CLR	R18
    02CB 2F04      MOV	R16,R20
    02CC 5F0F      SUBI	R16,0xFF
    02CD DEBF      RCALL	_ZLG7290_Download
(0227) }
    02CE 9623      ADIW	R28,3
    02CF 940E0378  CALL	pop_gset3
    02D1 9508      RET
_DispHexValue:
  d                    --> R22
  dat                  --> R10
  x                    --> R20
    02D2 940E0369  CALL	push_gset3
    02D4 2EA2      MOV	R10,R18
    02D5 2F40      MOV	R20,R16
    02D6 9723      SBIW	R28,3
(0228) 
(0229) /*
(0230) 函数:DispHexValue()
(0231) 功能:以16进制方式显示数值
(0232) 参数:
(0233) 	x:显示位置,取值0~6
(0234) 	dat:要显示的数据,取值0~255
(0235) */
(0236) void DispHexValue(uchar x, uchar dat)
(0237) {
(0238) 	uchar d;
(0239) 	d = dat / 16;
    02D7 E110      LDI	R17,0x10
    02D8 2D0A      MOV	R16,R10
    02D9 940E033C  CALL	div8u
    02DB 2F60      MOV	R22,R16
(0240) 	ZLG7290_Download(x,0,0,d);
    02DC 836A      STD	R22,2+Y
    02DD 2422      CLR	R2
    02DE 8228      STD	R2,0+Y
    02DF 2722      CLR	R18
    02E0 2F04      MOV	R16,R20
    02E1 DEAB      RCALL	_ZLG7290_Download
(0241) 	d = dat - d * 16;
    02E2 E180      LDI	R24,0x10
    02E3 9F86      MUL	R24,R22
    02E4 2D6A      MOV	R22,R10
    02E5 1960      SUB	R22,R0
(0242) 	ZLG7290_Download(x+1,0,0,d);
    02E6 836A      STD	R22,2+Y
    02E7 2422      CLR	R2
    02E8 8228      STD	R2,0+Y
    02E9 2722      CLR	R18
    02EA 2F04      MOV	R16,R20
    02EB 5F0F      SUBI	R16,0xFF
    02EC DEA0      RCALL	_ZLG7290_Download
(0243) }
    02ED 9623      ADIW	R28,3
    02EE 940E0378  CALL	pop_gset3
    02F0 9508      RET
_Test_Key:
  FnKeyValue           --> Y+2
  RepeatCnt            --> Y+1
  KeyValue             --> Y+0
    02F1 9723      SBIW	R28,3
(0244) 
(0245) /*
(0246) 函数:Test_Key()
(0247) 功能:测试按键功能
(0248) */
(0249) void Test_Key()
(0250) {
(0251) 	uchar KeyValue;
(0252) 	uchar RepeatCnt;
(0253) 	uchar FnKeyValue;
(0254) 	ClearAll();
    02F2 DEDF      RCALL	_ClearAll
(0255) 	for (;;)
(0256) 	{
(0257) 		if ( FlagINT )		//如果有键按下
    02F3 90200110  LDS	R2,0x110
    02F5 90300111  LDS	R3,0x111
    02F7 2022      TST	R2
    02F8 F411      BNE	0x02FB
    02F9 2033      TST	R3
    02FA F3C1      BEQ	0x02F3
(0258) 		{
(0259) 		//清除中断标志
(0260) 			FlagINT = 0;
    02FB 2422      CLR	R2
    02FC 2433      CLR	R3
    02FD 92300111  STS	R3,0x111
    02FF 92200110  STS	R2,0x110
(0261) 		//读取键值、连击计数器值、功能键值
(0262) 			ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
    0301 019E      MOVW	R18,R28
    0302 E001      LDI	R16,1
    0303 DE57      RCALL	_ZLG7290_ReadReg
(0263) 			ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
    0304 019E      MOVW	R18,R28
    0305 5F2F      SUBI	R18,0xFF
    0306 4F3F      SBCI	R19,0xFF
    0307 E002      LDI	R16,2
    0308 DE52      RCALL	_ZLG7290_ReadReg
(0264) 			ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
    0309 019E      MOVW	R18,R28
    030A 5F2E      SUBI	R18,0xFE
    030B 4F3F      SBCI	R19,0xFF
    030C E003      LDI	R16,3
    030D DE4D      RCALL	_ZLG7290_ReadReg
(0265) 		//显示键值、连击计数器值、功能键值
(0266) 			DispValue(0,KeyValue);
    030E 8128      LDD	R18,0+Y
    030F 2700      CLR	R16
    0310 DFA2      RCALL	_DispValue
(0267) 			DispHexValue(3,RepeatCnt);
    0311 8129      LDD	R18,1+Y
    0312 E003      LDI	R16,3
    0313 DFBE      RCALL	_DispHexValue
(0268) 			DispHexValue(6,FnKeyValue);
    0314 812A      LDD	R18,2+Y
    0315 E006      LDI	R16,6
    0316 DFBB      RCALL	_DispHexValue
    0317 CFDB      RJMP	0x02F3
    0318 9623      ADIW	R28,3
    0319 9508      RET
_main:
  x                    --> R20
    031A 9723      SBIW	R28,3
(0269) 		}
(0270) 	}
(0271) }
(0272) 
(0273) void main()
(0274) {
(0275)    uchar x;
(0276) 	SystemInit();		//系统初始化
    031B DEB1      RCALL	_SystemInit
    031C C01A      RJMP	0x0337
(0277) 	//Test_DispBuf();		//测试直接写显存
(0278) 	//Test_Download();	//测试下载数据
(0279) 	//Test_ScanNum();	//测试不同扫描位数
(0280) 	//Test_Flash();		//测试闪烁功能
(0281) 	//Test_SegOnOff();	//测试段寻址功能
(0282) 	//Test_Key();		//测试键盘功能
(0283) 	while (1)
(0284) 	{
(0285) 	   for ( x=0; x<8; x++ )
    031D 2744      CLR	R20
    031E C008      RJMP	0x0327
(0286) 	    {
(0287) 		ZLG7290_Download(x,1,0,5);
    031F E085      LDI	R24,5
    0320 838A      STD	R24,2+Y
    0321 2422      CLR	R2
    0322 8228      STD	R2,0+Y
    0323 E021      LDI	R18,1
    0324 2F04      MOV	R16,R20
    0325 DE67      RCALL	_ZLG7290_Download
    0326 9543      INC	R20
    0327 3048      CPI	R20,0x8
    0328 F3B0      BCS	0x031F
(0288) 	     }
(0289) 	    delay1(100);
    0329 E604      LDI	R16,0x64
    032A E010      LDI	R17,0
    032B DE8D      RCALL	_delay1
(0290) 	  //Test_Key();
(0291) 	  //ZLG7290_Download(0,0,0,4); 
(0292) 	   for ( x=0; x<6; x++ )
    032C 2744      CLR	R20
    032D C007      RJMP	0x0335
(0293) 	    {
(0294) 		  ZLG7290_WriteReg(ZLG7290_ScanNum,x);
    032E 2F24      MOV	R18,R20
    032F E00D      LDI	R16,0xD
    0330 DE16      RCALL	_ZLG7290_WriteReg
(0295) 		  delay(100);
    0331 E604      LDI	R16,0x64
    0332 E010      LDI	R17,0
    0333 DD45      RCALL	_delay
    0334 9543      INC	R20
    0335 3046      CPI	R20,6
    0336 F3B8      BCS	0x032E
    0337 CFE5      RJMP	0x031D
(0296) 	    }
(0297) 	}
(0298) }FILE: <library>
    0338 9623      ADIW	R28,3
    0339 9508      RET
mod8u:
    033A 9468      BSET	6
    033B C001      RJMP	xdiv8u
div8u:
    033C 94E8      BCLR	6
xdiv8u:
    033D 932A      ST	R18,-Y
    033E 92FA      ST	R15,-Y
    033F 24FF      CLR	R15
    0340 E028      LDI	R18,0x8
    0341 0F00      LSL	R16
    0342 1CFF      ROL	R15
    0343 16F1      CP	R15,R17
    0344 F010      BCS	0x0347
    0345 1AF1      SUB	R15,R17
    0346 9503      INC	R16
    0347 952A      DEC	R18
    0348 F7C1      BNE	0x0341
    0349 F40E      BRTC	0x034B
    034A 2D0F      MOV	R16,R15
    034B 90F9      LD	R15,Y+
    034C 9129      LD	R18,Y+
    034D 9508      RET
push_gset1:
    034E 935A      ST	R21,-Y
    034F 934A      ST	R20,-Y
    0350 9508      RET
pop_gset1:
    0351 E0E1      LDI	R30,1
pop:
    0352 9149      LD	R20,Y+
    0353 9159      LD	R21,Y+
    0354 FDE0      SBRC	R30,0
    0355 9508      RET
    0356 9169      LD	R22,Y+
    0357 9179      LD	R23,Y+
    0358 FDE1      SBRC	R30,1
    0359 9508      RET
    035A 90A9      LD	R10,Y+
    035B 90B9      LD	R11,Y+
    035C FDE2      SBRC	R30,2
    035D 9508      RET
    035E 90C9      LD	R12,Y+
    035F 90D9      LD	R13,Y+
    0360 FDE3      SBRC	R30,3
    0361 9508      RET
    0362 90E9      LD	R14,Y+
    0363 90F9      LD	R15,Y+
    0364 9508      RET
push_gset2:
    0365 937A      ST	R23,-Y
    0366 936A      ST	R22,-Y
    0367 940C034E  JMP	push_gset1
push_gset3:
    0369 92BA      ST	R11,-Y
    036A 92AA      ST	R10,-Y
    036B 940C0365  JMP	push_gset2
push_gset4:
    036D 92DA      ST	R13,-Y
    036E 92CA      ST	R12,-Y
    036F 940C0369  JMP	push_gset3
push_gset5:
    0371 92FA      ST	R15,-Y
    0372 92EA      ST	R14,-Y
    0373 940C036D  JMP	push_gset4
pop_gset2:
    0375 E0E2      LDI	R30,2
    0376 940C0352  JMP	pop
pop_gset3:
    0378 E0E4      LDI	R30,4
    0379 940C0352  JMP	pop
pop_gset4:
    037B E0E8      LDI	R30,0x8
    037C 940C0352  JMP	pop
pop_gset5:
    037E 27EE      CLR	R30
    037F 940C0352  JMP	pop
asgncblk:
    0381 93AA      ST	R26,-Y
    0382 93BA      ST	R27,-Y
    0383 93EA      ST	R30,-Y
    0384 93FA      ST	R31,-Y
    0385 920A      ST	R0,-Y
    0386 81AF      LDD	R26,7+Y
    0387 85B8      LDD	R27,8+Y
    0388 81ED      LDD	R30,5+Y
    0389 81FE      LDD	R31,6+Y
    038A 3000      CPI	R16,0
    038B 0701      CPC	R16,R17
    038C F031      BEQ	0x0393
    038D 95C8      LPM
    038E 920D      ST	R0,X+
    038F 9631      ADIW	R30,1
    0390 5001      SUBI	R16,1
    0391 4010      SBCI	R17,0
    0392 CFF7      RJMP	0x038A
    0393 9009      LD	R0,Y+
    0394 91F9      LD	R31,Y+
    0395 91E9      LD	R30,Y+
    0396 91B9      LD	R27,Y+
    0397 91A9      LD	R26,Y+
    0398 9624      ADIW	R28,4
    0399 9508      RET

⌨️ 快捷键说明

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