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

📄 driver.lst

📁 用keil开发的.单片机税控器程序.单片机用的是AT公司的.upsd3245
💻 LST
📖 第 1 页 / 共 5 页
字号:
 848           //*                     I2C    M41St87 Init  驱动*
 849           //**************************************************************
 850          
 851          void M41st87Ini()
 852          {
 853   1              uchar tebon=0xe8;   //侵入检测设置:允许侵入检测,允许侵入发生时产生中断,内部通过上或下拉电阻到
 854   1                                                      //输出引脚,触发事件为低电平触发,防侵入检测一直存在,内部为10M电阻到输出引脚
 855   1                                                      //当侵入发生是不清内部RAM和外部RAM。
 856   1              uchar wdi=0x80;         //将WDS置1 ,关闭看门狗
 857   1              uchar outen=0x80;       //置OUT 位,允许在IRQ引脚上输出中断信号
 858   1              uchar temp;                     //临时变量
 859   1              I2cRd(ClockAdr,0x01,1,&temp);   //读41ST87地址01H
 860   1              temp &=0x7f;
 861   1              I2cWr(ClockAdr,0x01,1,&temp);   //置ST位为0,让内部晶体工作
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 15  

 862   1              I2cRd(ClockAdr,0x02,1,&temp);   //读41ST87地址02H
 863   1              temp |=0x80;
 864   1              I2cWr(ClockAdr,0x02,1,&temp);   //置OFIE位为0,允许晶体停振产生中断
 865   1              I2cRd(ClockAdr,0x0a,1,&temp);   //读41ST87地址0aH
 866   1              temp &=0xbf;
 867   1              temp |=0xa0;
 868   1              I2cWr(ClockAdr,0x02,1,&temp);   //置AFE位为1,允许产生报警标志。置SQWE为0,不允许产生方波。置ABE为1,允许在
             -电池备份时产生报警输出
 869   1              I2cWr(ClockAdr,0x08,1,&outen);  //允许IRQ输出
 870   1              I2cWr(ClockAdr,0x09,1,&wdi);    //关闭看门狗
 871   1              I2cWr(ClockAdr,0x14,1,&tebon);  //允许侵入检测TPIN1工作
 872   1              I2cWr(ClockAdr,0x15,1,&tebon);  //允许侵入检测TPIN2工作
 873   1      }
 874          
 875          
 876          uchar Tamper(uchar *time)
 877          {
 878   1              uchar tb;
 879   1              uchar teboff=0x7f;                      //清TEB位:关闭侵入功能。
 880   1              uchar tebon=0xe8;                       //侵入检测设置:允许侵入检测,允许侵入发生时产生中断,内部通过上或下拉电阻到
 881   1                                                                      //输出引脚,触发事件为低电平触发,防侵入检测一直存在,内部为10M电阻到输出引脚
 882   1                                                                      //当侵入发生是不清内部RAM和外部RAM。
 883   1              uchar wdi=0x80;                         //关闭看门狗
 884   1              uchar outen=0x80;                       //置OUT位,允许在IRQ引脚上输出中断信号
 885   1              
 886   1              I2cRd(ClockAdr,0x0f,1,&tb);                             //读标志寄存器  
 887   1              if((tb&0x03)!=0)                                                //判断有无侵入事件发生
 888   1              {                                                                               //如果有侵入事件发生则执行下面的程序
 889   2                      I2cRd(ClockAdr,0x00,8,time);            //读TIMERKEEP寄存器
 890   2                      I2cWr(ClockAdr,0x14,1,&teboff);         //关闭第一路防侵入功能
 891   2                      I2cWr(ClockAdr,0x15,1,&teboff);         //关闭第二路防侵入功能
 892   2                      I2cWr(ClockAdr,0x14,1,&tebon);          //打开第一路防侵入功能
 893   2                      I2cWr(ClockAdr,0x15,1,&tebon);          //打开第二路防侵入功能
 894   2                      return 1;               //有侵入发生则返回1
 895   2              }
 896   1              else 
 897   1              {
 898   2                      if((tb&0x04)!=0)
 899   2                      {
 900   3                               return 2;                      //晶体停振报警事件返回2
 901   3                      }
 902   2                      else 
 903   2                      {
 904   3                              if((tb&0x10)!=0)
 905   3                              {
 906   4                                      return 3;       //      电池电量低报警事件返回3 
 907   4                              }
 908   3                              else 
 909   3                              {
 910   4                                      return 0;  //无标志事件发生
 911   4                              }
 912   3                      }
 913   2              }
 914   1      }
 915          //---------------------------I2C End----------------------------------------------------
 916          
 917          
 918          
 919          
 920          
 921          
 922          //---------------------------Key Begin----------------------------------------------------------
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 16  

 923          
 924          
 925          /*void KeyDelay(uchar t)
 926          {
 927                  uchar i,j;
 928                  
 929                  while(--t)
 930                  {
 931                          j=4;
 932                          while(--j)                      //4×250us=1ms
 933                          {
 934                                  i=250;                  //250;
 935                                  while(--i);             //24MHz时为 250 us
 936                          }
 937                  }       
 938          }
 939          
 940           */
 941          
 942           //---------------------------Key Begin--------------------------------------------------
 943             void KeyDelay(uchar t)
 944          {
 945   1              uchar i,j;
 946   1              
 947   1              while(--t)
 948   1              {
 949   2                      j=4;
 950   2                      while(--j)                      //4×250us=1ms
 951   2                      {
 952   3                              i=250;                  //250;
 953   3                              while(--i);             //24MHz时为 250 us
 954   3                      }
 955   2              }       
 956   1      }
 957          
 958          
 959          uchar GetKey()
 960          {
 961   1          uchar data i,j,cost,q,k=1,temp;
 962   1      
 963   1         
 964   1          for(i=0;i<8;i++)
 965   1          {           
 966   2              P4 = (P4 & 0xf0)|k;//列输出
 967   2              temp=XBYTE[KeyAdr];//读P0口数据
 968   2              if(i==3)
 969   2              {
 970   3                      k=11;
 971   3              }
 972   2            if(temp==0xff)          //无任何键按下
 973   2              {
 974   3                      k++;
 975   3              }
 976   2              else
 977   2              {
 978   3                      KeyDelay(6);
 979   3                      temp=XBYTE[KeyAdr];//读P0口数据
 980   3                      if(temp!=0xff) //有键按下
 981   3                      {
 982   4                              for(j=0;j<8;j++)
 983   4                      {
 984   5                              q = temp|0x7f;
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 17  

 985   5                              if(q==0x7f)
 986   5                              {
 987   6                                      cost = j*9+i;     //计算按键扫描码
 988   6                                      KeyDelay(1);
 989   6                                      while(temp!=0xff)
 990   6                                      {//判键释放
 991   7                                              temp=XBYTE[KeyAdr];
 992   7                              }
 993   6                                      cost|=0x80;
 994   6                                      return cost;
 995   6                              }
 996   5                              temp<<=1;
 997   5                      }
 998   4                      }
 999   3              }
1000   2          }
1001   1          
1002   1              return 0xff;
1003   1      }
1004          
1005          
1006          
1007          
1008          uchar KeyScan()
1009          {
1010   1              uchar k;
1011   1              k=0xFF;
1012   1              while(k==0xFF){k=GetKey();}
1013   1              
1014   1              return k;
1015   1      }
1016          
1017          
1018          
1019          
1020          /*uchar GetKey()   //得到键盘返回值
1021          {
1022              uchar data i,j,cost,q,k=1,temp;
1023          
1024             
1025              for(i=0;i<6;i++)
1026              {           
1027                  P4 = (P4 & 0xf0)|k;//列输出
1028                  temp=XBYTE[KeyAdr];//读P0口数据
1029                  if(i==3)
1030                  {
1031                          k=15;
1032                  }
1033                if(temp==0xff)          //无任何键按下
1034                  {
1035                          k++;
1036                  }
1037                  else
1038                  {
1039                          KeyDelay(6);
1040                          temp=XBYTE[KeyAdr];//读P0口数据
1041                          if(temp!=0xff) //有键按下
1042                          {
1043                                  for(j=0;j<7;j++)
1044                          {
1045                                  q = temp|0x7f;
1046                                  if(q==0x7f)
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 18  

1047                                  {
1048                                          cost = j*7+i;     //计算按键扫描码
1049                                          KeyDelay(1);
1050                                          while(temp!=0xff)
1051                                          {//判键释放
1052                                                  temp=XBYTE[KeyAdr];
1053                                  }
1054                                          cost|=0x80;
1055                                          return cost;
1056                                  }
1057                                  temp<<=1;
1058                          }
1059                          }
1060                  }
1061              }
1062              
1063                  return 0xff;
1064          }
1065          
1066          
1067          
1068          uchar KeyScan()
1069          {
1070                  uchar k;
1071                  k=0xFF;
1072                  while(k==0xFF){k=GetKey();}
1073                  
1074                  return k;
1075          }
1076           */
1077          //************************************************************8
1078           //*                    lock 键盘锁  驱动*
1079           //**************************************************************
1080          
1081          
1082          //uchar GetLock()
1083          //{//(第5版)
1084          //      uchar lock;
1085          //      KeyEnable;
1086          //      P4 = (P4 & 0xf0)|15;//列输出
1087          //      lock = XBYTE[KeyAdr];
1088          //      KeyDisable;
1089          //    return lock;//P0口数据
1090          //}
1091          
1092          
1093          //************************************************************8
1094           //*                     BEEP  驱动*
1095           //**************************************************************
1096          void Beep(ulong n)
1097          {
1098   1              BeepOn;
1099   1              while(--n);
1100   1              BeepOff;
1101   1      }
1102          
1103           //************************************************************8
1104           //*                   BOX  驱动*
1105           //**************************************************************
1106          void OpenBox()
1107          {
1108   1              uint x=80;
C51 COMPILER V8.01   DRIVER                                                                03/28/2006 09:48:45 PAGE 19  

1109   1              OpenCashbox;
1110   1              while(--x);
1111   1              CloseCashbox;
1112   1      }  
1113          //---------------------------Key End----------------------------------------------------
1114          
1115          
1116          
1117          
1118          
1119          
1120          //---------------------------Lcd Begin--------------------------------------------------------------
1121          //void LcdBusyCheck(uint CS)
1122          //{
1123          //  uchar State = 0x80;
1124          //  uint  ChipAdr;
1125          //
1126          //  ChipAdr = StatusReadAdr|CS;
1127          //  while(State & 0x80)
1128          //  {
1129          //    State = XBYTE[ChipAdr];
1130          //  }

⌨️ 快捷键说明

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