📄 driver.lst
字号:
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 + -