📄 xiugai.lst
字号:
617 6 ///////////////// 十组保护写满,不能工作
618 6 if(MissIDStop==1)
619 6 {
620 7 DisplayErrorCard();
621 7 delay10ms(4);
622 7 P1_4=1; //关继电器
623 7 send_byte(CMD_RESET);
624 7 continue;
625 7 }
626 6 }
627 5 ////////////////////////////////////////////////////
628 5 //////////////读卡部分/////////////////////////////
629 5 ////////////////////////////////////////////////////
630 5
631 5 for(i=0;i<=8;i++)
632 5 {
633 6 USERID[i]=0;
634 6 }
635 5 USERID[0]=cTransBuffer[8]; //4位卡号
636 5 USERID[1]=cTransBuffer[9];
637 5 USERID[2]=cTransBuffer[10];
638 5 USERID[3]=cTransBuffer[11];
639 5
640 5
641 5 money_value=0;
642 5 xian=0x00;
643 5 money_value=1000*cTransBuffer[13]+100*cTransBuffer[14]+10*cTransBuffer[15]+cTransBuffer[16
-];
644 5 for(i=1;i<=10;i++)
645 5 {
646 6 money_value=money_value+1000*cTransBuffer[12];
647 6 }
648 5
649 5 if(money_value<1000)
650 5 xian=0x07;
651 5 else if(money_value>=1000&&money_value<10000)
652 5 xian=0x0f;
653 5 else xian=0x1f;
654 5 //write7279(ACTCTL,xian);
655 5 for(i=16;i>=12;i--)
656 5 {
657 6 money[16-i]=cTransBuffer[i]; //display money of user
658 6 write7279(DECODE0+16-i,money[16-i]);
659 6 write7279(SEGON,23);
660 6 write7279(ACTCTL,xian);
661 6 }
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 12
662 5 //************************************
663 5 // 卡余额不足
664 5 //************************************
665 5 if(money_value<100)
666 5 {
667 6
668 6 delay10ms(10);//新加延时
669 6 //memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
670 6 //JMY_TRANS(cTransBuffer);
671 6 send_byte(CMD_RESET);
672 6 P1_4=1;
673 6 continue;
674 6 }
675 5 //把卡清0
676 5 for(i=0;i<=8;i++) //赋值卡号
677 5 {
678 6 ComWriteBlock2[i+16]=USERID[i];
679 6 }
680 5 memcpy(WriteBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
681 5 JMY_TRANS(WriteBuffer);
682 5
683 5
684 5 /////////////////卡上余额小于5元
685 5 if(money_value<500)
686 5 write7279(BLINKCTL,0xf8); //设置闪烁
687 5 memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
688 5 JMY_TRANS(cTransBuffer);
689 5 delay10ms(120); ///
690 5 send_byte(CMD_RESET);
691 5 //点亮0000
692 5 for(i=0;i<4;i++)
693 5 {
694 6 write7279(DECODE0+i,0);
695 6 write7279(SEGON,31);
696 6 }
697 5 /////////////
698 5 c=money_value; //卡上的余额
699 5 for(i=8;i>=4;i--)
700 5 {
701 6 USERID[i]=c%10;
702 6 c=c/10;
703 6 }
704 5 g=1;
705 5
706 5 flag = USED; //设置标志位是有用户状态
707 5 P1_4=0; //开继电器(电机启动,电表或传感器开始有计数脉冲发送过来)
708 5 clock0_initial(); //计数器0中断初始化
709 5 delay10ms(60);
710 5
711 5
712 5 }
713 4
714 4
715 4 else
716 4 {
717 5 P1_4=1; //关继电器
718 5 DisplayErrorCard();
719 5 delay10ms(5);
720 5 send_byte(CMD_RESET);
721 5 continue;
722 5 }
723 4 }
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 13
724 3
725 3
726 3 else if(flag == USED) //判断标志位确定机器状态
727 3 { //判断是否上次的用户卡//是的话 结账
728 4 if(cTransBuffer[8]==USERID[0]&&cTransBuffer[9]==USERID[1]&&cTransBuffer[10]==USERID[2]&&cTransB
-uffer[11]==USERID[3])
729 4 {
730 5 memcpy(cTransBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
731 5 JMY_TRANS(cTransBuffer);
732 5 IE=0x00; //关闭所有中断
733 5
734 5 //把余额写入USERID中
735 5 c=money_value-v; //卡上的余额
736 5 for(i=8;i>=4;i--)
737 5 {
738 6 USERID[i]=c%10;
739 6 c=c/10;
740 6 }
741 5 //把余额写入卡中
742 5 for(i=0;i<=8;i++)
743 5 {
744 6 ComWriteBlock2[i+16]=USERID[i];
745 6 }
746 5 memcpy(cTransBuffer,ComWriteBlock2,sizeof(ComWriteBlock2)); //写卡的块2
747 5 JMY_TRANS(cTransBuffer);
748 5
749 5 //delay10ms(200);
750 5 send_byte(CMD_RESET);
751 5 c=money_value-v; //卡上的余额
752 5 wei=0x00;
753 5 if(c<1000) wei=0x07;
754 5 else if(c>=1000&&c<10000) wei=0x0F;
755 5 else wei=0x1F;
756 5 ///显示卡内余额
757 5 for(i=0;i<=5;i++)
758 5 {
759 6 write7279(SEGON,23);
760 6 write7279(DECODE0+i,c%10);
761 6 write7279(ACTCTL,wei);
762 6 c=c/10;
763 6 }
764 5 if(MissID[10]==0)
765 5 {
766 6 MissID[10]=0;
767 6 Write24c02(0,30); //复位掉电标志位
768 6 }
769 5 else if(MissID[11]==0)
770 5 {
771 6 MissID[11]=0;
772 6 Write24c02(0,40); //复位掉电标志位
773 6 }
774 5 else if(MissID[12]==0)
775 5 {
776 6 MissID[12]=0;
777 6 Write24c02(0,50); //复位掉电标志位
778 6 }
779 5 else if(MissID[13]==0)
780 5 {
781 6 MissID[13]=0;
782 6 Write24c02(0,60); //复位掉电标志位
783 6 }
784 5 else if(MissID[14]==0)
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 14
785 5 {
786 6 MissID[14]=0;
787 6 Write24c02(0,70); //复位掉电标志位
788 6 }
789 5 else if(MissID[15]==0)
790 5 {
791 6 MissID[15]=0;
792 6 Write24c02(0,80); //复位掉电标志位
793 6 }
794 5 else if(MissID[16]==0)
795 5 {
796 6 MissID[16]=0;
797 6 Write24c02(0,90); //复位掉电标志位
798 6 }
799 5 else if(MissID[17]==0)
800 5 {
801 6 MissID[17]=0;
802 6 Write24c02(0,100); //复位掉电标志位
803 6 }
804 5 else if(MissID[18]==0)
805 5 {
806 6 MissID[18]=0;
807 6 Write24c02(0,110); //复位掉电标志位
808 6 }
809 5 else if(MissID[19]==0)
810 5 {
811 6 MissID[19]=0;
812 6 Write24c02(0,120); //复位掉电标志位
813 6 }
814 5
815 5 delay10ms(100);
816 5 send_byte(CMD_RESET);
817 5 flag=NO_USER; //标志位复位为无用户状态
818 5 //delay10ms(100);
819 5 //延时三分钟再关继电器的定时1中断初始化
820 5 clock1_initial();
821 5 }
822 4
823 4 else
824 4 {
825 5 DisplayErrorCard();
826 5 delay10ms(5);
827 5 send_byte(CMD_RESET);
828 5 continue;
829 5 }
830 4 }
831 3 }
832 2 }
833 1 }
834
835 ///////////////////////////////
836 ////////////子函数
837 //////////////////////////////
838 ///回刷显示子函数
839 void DisplayCard(void)
840 {
841 1 MissIDFlag=MissID[10]||MissID[11]||MissID[12]||MissID[13]||MissID[14]||MissID[15]||MissID[16]||MissID[
-17]||MissID[18]||MissID[19];
842 1 MissIDStop=MissID[10]&&MissID[11]&&MissID[12]&&MissID[13]&&MissID[14]&&MissID[15]&&MissID[16]&&MissID[
-17]&&MissID[18]&&MissID[19];
843 1 memcpy(WriteBuffer,FengM,sizeof(FengM)); //设置蜂鸣器
844 1 JMY_TRANS(WriteBuffer);
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 15
845 1 //显示余额部分
846 1 money_value=0;
847 1 xian=0x00;
848 1 money_value=1000*MissID[5]+100*MissID[6]+10*MissID[7]+MissID[8];
849 1 for(i=1;i<=10;i++)
850 1 {
851 2 money_value=money_value+1000*MissID[4];
852 2 }
853 1 if(money_value<1000)
854 1 xian=0x07;
855 1 else if(money_value>=1000&&money_value<10000)
856 1 xian=0x0f;
857 1 else xian=0x1f;
858 1 for(i=8;i>=4;i--)
859 1 {
860 2 write7279(DECODE0+8-i,MissID[i]);
861 2 write7279(SEGON,23);
862 2 write7279(ACTCTL,xian);
863 2 }
864 1
865 1 }
866 ///////////////////////////////////////////
867
868 //定时器1中断服务程序
869 void clock1_int(void) interrupt 3 using 0
870 {
871 1 TH1=0x27; //延时60ms 计数初值
872 1 TL1=0xfc;
873 1 IE=0x88; //中断允许
874 1 TF1=0;
875 1 time++;
876 1 if(time>18000)
877 1 {
878 2 P1_4=1; //延时三分钟再关继电器
879 2 }
880 1 }
881
882 //计数器0中断服务程序
883 void clock_int(void) interrupt 1 using 0
884 {
885 1 TH0=0xff; //设置的计数初值(65506),每?个外部脉冲溢出
886 1 TL0=0xfa;
887 1 IE=0x82;
888 1 TF0=0;
889 1 /*for(i=0;i<=3;i++)
890 1 {
891 1 water[i]=Read24c02(i);
892 1 }*/
893 1 waterperkwh=water[3]+10*water[2]+100*water[1]+1000*water[0]; //来一个中断时水的增加量
894 1
895 1 //P1_7=0; //P1-7口接了继电器
896 1
897 1 water_value=water_value+waterperkwh;
898 1 b=water_value;
899 1 //judge xiaoying wei
900 1 if(b<10000) wei=0x0F;
901 1 else if(b>=10000&&b<100000) wei=0x1F;
902 1 else if(b>=100000&&b<1000000) wei=0x3F;
903 1 else if(b>=1000000&&b<10000000) wei=0x7F;
904 1 else if(b>=10000000&&b<100000000) wei=0xFF;
905 1 for(i=0;i<=7;i++)
906 1 {
C51 COMPILER V7.50 XIUGAI 11/27/2006 17:18:35 PAGE 16
907 2 write7279(SEGON,31);
908 2 write7279(DECODE0+i,b%10);
909 2 write7279(ACTCTL,wei);
910 2 b=b/10;
911 2 }
912 1 //减钱
913 1 moneypkh[0]=Read24c02(4);
914 1 moneypkh[1]=Read24c02(5);
915 1 moneyperkwh=10*moneypkh[0]+moneypkh[1];
916 1 money_value=money_value-moneyperkwh;
917 1 f++;
918 1 //c=money_value;
919 1 //wei=0x00;
920 1 //if(c<1000) wei=0x07;
921 1 //else if(c>=1000&&c<10000) wei=0x0F;
922 1 //else wei=0x1F;
923 1 //把余额写入USERID中
924 1 c=money_value-v; //卡上的余额
925 1 for(i=8;i>=4;i--)
926 1 {
927 2 USERID[i]=c%10;
928 2 c=c/10;
929 2 }
930 1
931 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -