📄 ic.lst
字号:
0374 F574 413 MOV 74H,A
0376 414 D2:
0376 120730 415 LCALL KSTART ;等待松手
0379 70FB 416 JNZ D2
037B E574 417 MOV A,74H
037D B40A02 418 CJNE A,#0AH,GS ;判断不是确定键则继续输入,否则返回
0380 8012 419 JMP DEND
0382 420 GS:
0382 B40B0A 421 CJNE A,#0BH,GS1 ;判断是不是取消键
0385 7960 422 MOV R1,#60H
0387 423 D5:
0387 7700 424 MOV @R1,#00H
0389 09 425 INC R1
038A B966FA 426 CJNE R1,#66H,D5
038D 8005 427 JMP DEND
038F 428 GS1:
038F 1203A3 429 LCALL SHOWNUM ;不是确认键则调用显示程序
0392 80DD 430 JMP D3
0394 431 DEND:
0394 22 432 RET
433 ;*******************************单个数字的输入*********************
0395 434 ENTER: ;存取钱的时候对键盘输入值的处理
0395 435 ENEXT:
0395 1206E7 436 LCALL KEYSCAN ;扫描键盘输入
0398 B40A02 437 CJNE A,#0AH,ENT ;判断不是确定键则继续输入,否则返回
039B 8005 438 JMP ENTEND
039D 439 ENT:
039D F6 440 MOV @R0,A ;将输入数据放入以60h开始的单元
039E 08 441 INC R0
039F 0F 442 INC R7
03A0 8000 443 JMP E1
03A2 444 ENTEND:
03A2 22 445 E1: RET
446 ;*************************对已输入数据的循环显示*******************
03A3 447 SHOWNUM:
03A3 448 S0:
03A3 8F55 449 MOV 55h,R7 ;单轮循环次数放在b中
03A5 120730 450 LCALL KSTART
03A8 7035 451 JNZ SEND
03AA 7571FE 452 MOV 71H,#0FEH
03AD 453 S1:
A51 MACRO ASSEMBLER IC 07/12/2008 15:19:28 PAGE 8
03AD 7960 454 MOV R1,#60H ;循环显示的起始位置
03AF 455 S3:
03AF DF04 456 DJNZ R7,S2 ;一轮是否显示完
03B1 AF55 457 MOV R7,55h ;显示完毕则重给R2赋原值
03B3 80EE 458 JMP S0
03B5 459 S2:
03B5 E7 460 MOV A,@R1 ;显示的数字放入A中
03B6 1203E0 461 LCALL K2N
03B9 C2A6 462 CLR DULA
03BB 758000 463 MOV P0,#00H
03BE D2A6 464 SETB DULA
03C0 C2A6 465 CLR DULA
03C2 C2A7 466 CLR WELA
03C4 857180 467 MOV P0,71H
03C7 D2A7 468 SETB WELA
03C9 C2A7 469 CLR WELA
03CB C2A6 470 CLR DULA
03CD 857280 471 MOV P0,72H ;全灭,选中71H位,显示72H内容
03D0 D2A6 472 SETB DULA
03D2 C2A6 473 CLR DULA
03D4 120738 474 LCALL DELAY2
03D7 E571 475 MOV A,71H
03D9 23 476 RL A
03DA F571 477 MOV 71H,A
03DC 09 478 INC R1
03DD 80D0 479 JMP S3
03DF 480 SEND:
03DF 22 481 RET
482 ;****************************键值转化为表示的码*********************
03E0 483 K2N:
03E0 B40005 484 CJNE A,#0H,NU1
03E3 75723F 485 MOV 72H,#3FH
03E6 8043 486 JMP NUEND
03E8 487 NU1:
03E8 B40105 488 CJNE A,#1H,NU2
03EB 757206 489 MOV 72H,#06H
03EE 803B 490 JMP NUEND
03F0 491 NU2:
03F0 B40205 492 CJNE A,#2H,NU3
03F3 75725B 493 MOV 72H,#5BH
03F6 8033 494 JMP NUEND
03F8 495 NU3:
03F8 B40305 496 CJNE A,#3H,NU4
03FB 75724F 497 MOV 72H,#4FH
03FE 802B 498 JMP NUEND
0400 499 NU4:
0400 B40405 500 CJNE A,#4H,NU5
0403 757266 501 MOV 72H,#66H
0406 8023 502 JMP NUEND
0408 503 NU5:
0408 B40505 504 CJNE A,#5H,NU6
040B 75726D 505 MOV 72H,#6DH
040E 801B 506 JMP NUEND
0410 507 NU6:
0410 B40605 508 CJNE A,#6H,NU7
0413 75727D 509 MOV 72H,#7DH
0416 8013 510 JMP NUEND
0418 511 NU7:
0418 B40705 512 CJNE A,#7H,NU8
041B 757207 513 MOV 72H,#07H
041E 800B 514 JMP NUEND
0420 515 NU8:
0420 B40805 516 CJNE A,#8H,NU9
0423 75727F 517 MOV 72H,#7FH
0426 8003 518 JMP NUEND
0428 519 NU9:
A51 MACRO ASSEMBLER IC 07/12/2008 15:19:28 PAGE 9
0428 75726F 520 MOV 72H,#6FH
042B 521 NUEND:
042B 22 522 RET
523 ;*****************************向存储芯片写入*******************
042C D2A0 524 WR_1B: SETB SDA ;初始状态
042E D2A1 525 SETB SCL ;置SDA&SCL=1
0430 9179 526 ACALL START ;启动I2C总线
0432 7FA0 527 MOV R7,#0A0H ;写命令
0434 9187 528 ACALL WR8BIT ;按位写入1个字节
0436 91A4 529 ACALL CACK ;应答检查
0438 8520E0 530 MOV ACC,POINTER ;取芯片地址
043B AFE0 531 MOV R7,ACC ;送芯片地址
043D 9187 532 ACALL WR8BIT ;写芯片地址
043F 91A4 533 ACALL CACK ;应答检查
0441 8521E0 534 MOV ACC,NUMB ;取待写数据
0444 AFE0 535 MOV R7,ACC ;送数据
0446 9187 536 ACALL WR8BIT ;写数据
0448 91A4 537 ACALL CACK ;应答检查
044A 91DD 538 ACALL STOP ;停止
044C 91F8 539 ACALL DEL10MS ;等待内部写周期完成
044E 22 540 RET
541 ;***************************读存储芯片指定地址的单元******************
044F 120479 542 RD_1B: LCALL START ;启动总线
0452 7FA0 543 MOV R7,#0A0H ;写命令
0454 120487 544 LCALL WR8BIT ;写写命令
0457 1204A4 545 LCALL CACK ;应答检查
045A E520 546 MOV A,POINTER ;取地址
045C FF 547 MOV R7,A ;送地址
045D 120487 548 LCALL WR8BIT ;写地址
0460 1204A4 549 LCALL CACK ;应答检查
0463 D2A0 550 SETB SDA ;
0465 D2A1 551 SETB SCL ;保证启动条件
0467 120479 552 LCALL START ;再次启动总线,以便进行读操作
046A 7FA1 553 MOV R7,#0A1H ;送芯片地址+写命令
046C 120487 554 LCALL WR8BIT ;写芯片地址+写命令
046F 1204A4 555 LCALL CACK ;应答检查
0472 1204BB 556 LCALL RD8BIT ;读8位数
0475 1204DD 557 LCALL STOP ;关闭总线
0478 22 558 RET
0479 1204EB 559 START: LCALL DEL5US ;对2402操作开始
047C C2A0 560 CLR SDA ;在SCL=1时,SDA由1变为0表示开始
047E 1204EB 561 LCALL DEL5US
0481 C2A1 562 CLR SCL
0483 1204EB 563 LCALL DEL5US
0486 22 564 RET
565 ;***************************写8比特*****************************
0487 EF 566 WR8BIT: MOV A,R7 ;将R7中的数发送出去
0488 7E08 567 MOV R6,#08H ;数据位数
048A 33 568 WR1BIT: RLC A ;将A中的数据移到数据线上
048B 92A0 569 MOV SDA,C ;送出数据
048D 1204EB 570 LCALL DEL5US ;延时5US
0490 D2A1 571 SETB SCL ;发送串行时钟进行写操作
0492 1204EB 572 LCALL DEL5US
0495 C2A1 573 CLR SCL
0497 DEF1 574 DJNZ R6,WR1BIT ;串行发送8BIT
0499 D2A0 575 SETB SDA ;准备接收ACK
049B 1204EB 576 LCALL DEL5US
049E D2A1 577 SETB SCL ;接收ACK的时钟
04A0 1204EB 578 LCALL DEL5US
04A3 22 579 RET
04A4 7905 580 CACK: MOV R1,#05 ;检测应答
04A6 A2A0 581 CACK1: MOV C,SDA
04A8 D903 582 DJNZ R1,Y1
04AA 0204B1 583 LJMP Y2
04AD 40F7 584 Y1: JC CACK1 ;有应答的时候应为低电平
04AF 81B3 585 AJMP Y3
A51 MACRO ASSEMBLER IC 07/12/2008 15:19:28 PAGE 10
04B1 7906 586 Y2: MOV R1,#06H
04B3 C2A1 587 Y3: CLR SCL ;为下一步其他操作做准备
04B5 C2A0 588 CLR SDA ;
04B7 1204F0 589 LCALL DEL1MS ;等待内部写完
04BA 22 590 RET
591 ;***************************读8比特*****************************
04BB C0E0 592 RD8BIT: PUSH ACC ;保存 ACC
04BD 7E08 593 MOV R6,#08H
04BF D2A0 594 RD1B: SETB SDA ;置数据线=1
04C1 1204EB 595 LCALL DEL5US
04C4 D2A1 596 SETB SCL ;输出一个串行时钟
04C6 1204EB 597 LCALL DEL5US
04C9 A2A0 598 MOV C,SDA ;读数据线上的数据到C
04CB 33 599 RLC A ;移到ACC
04CC 1204EB 600 LCALL DEL5US
04CF C2A1 601 CLR SCL
04D1 DEEC 602 DJNZ R6,RD1B ;读8BIT数据
04D3 1204EB 603 LCALL DEL5US
04D6 C2A0 604 CLR SDA
04D8 AFE0 605 MOV R7,ACC ;将接收到的数据保存到R7
04DA D0E0 606 POP ACC ;还原ACC
04DC 22 607 RET
04DD 1204EB 608 STOP: LCALL DEL5US ;对2402操作结束
04E0 D2A1 609 SETB SCL ;在 SCL =1时,SDA由0变为1表示结束
04E2 1204EB 610 LCALL DEL5US
04E5 D2A0 611 SETB SDA
04E7 1204EB 612 LCALL DEL5US
04EA 22 613 RET
04EB 00 614 DEL5US: NOP
04EC 00 615 NOP
04ED 00 616 NOP
04EE 00 617 NOP
04EF 22 618 RET
04F0 7CC8 619 DEL1MS: MOV R4,#200
04F2 00 620 NOP
04F3 00 621 NOP
04F4 00 622 NOP
04F5 DCFB 623 DJNZ R4,$-3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -