📄 c51.c
字号:
// error_debug
//左右调换一次
// 旋转90度两次
// 纵向取模
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include <math.h>
#include <CH375C.h>
#define PrintZoom 2
#define MaxVi_Error 220
#define ErrDispDelay 30000
#define H200Ms 0x4b
#define L200Ms 0xff
#define second0 XBYTE[0x7700]
#define minuts0 XBYTE[0x7702]
#define hour0 XBYTE[0x7704]
#define second0A XBYTE[0x7700]
#define minuts0A XBYTE[0x7702]
#define hour0A XBYTE[0x7704]
#define week0 XBYTE[0x7f06]
//#define day0 XBYTE[0x7f07]
//#define month0 XBYTE[0x7f08]
//#define year0 XBYTE[0x7f09]
#define reg_A XBYTE[0x7f0A]
#define reg_B XBYTE[0x7f0B]
#define reg_C XBYTE[0x7f0c]
#define reg_D XBYTE[0x7f0d]
#define XRAM1 XBYTE[0x7f01]
#define XRAM2 XBYTE[0x7f03]
#define XRAM3 XBYTE[0x7f05]
#define LCDProtectTime XBYTE[0x7f0e] //设置的屏保时间,屏保计时时间
#define LCDProtectAdd XBYTE[0x7f0f]
#define SleepTime 20
#define UserSetMaxViRecord DBYTE[0xC0] //最大运行记录时速
#define UserSetMaxViBeep DBYTE[0xC1] //最大运行报警时速
#define UserSetMaxRunTime DBYTE[0xC2] //最长运行时间
#define Xother1 DBYTE[0xC3]
#define Xother2 DBYTE[0xC4]
#define Xother3 DBYTE[0xC5]
#define Xother4 DBYTE[0xC6]
#define TooViBeepTimes DBYTE[0xC7]
#define TooLongBeepTime DBYTE[0xc8] //超时报警的次数
#define WhichIndex_JiSha DBYTE[0Xc9] //急刹车出现在什么时候,如果这个时候已经循环出了20S以外时,将其改特殊事故改回一般的数据
#define HowTimes DBYTE[0XcA]
#define ImportInfoEnable DBYTE[0x64]
uchar KEYVALUE;
uchar WhichIC;
//-------------------------------------------------------------------------------------------
//注意:由于这段地址是程序作为在查询360小时平均速度及2天内平均速度时存贮60个速度数据时使用的,
//在此又作为超速时的瞬时速度累加及累加的次数--->超速期间的平均速度!! dispnowtime()中独立使用
//-------------------------------------------------------------------------------------------
unsigned long xdata CaoShu_Add _at_ 0x7f20 ;
unsigned int xdata CaoShu_AddTimes _at_ 0x7f28 ;
#define TooViStartA XBYTE[0x7F30]
#define TooViStartB XBYTE[0x7F31]
#define TooViStartC XBYTE[0x7F32]
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
unsigned long xdata BigAddVi _at_ 0x7f10 ;
unsigned int xdata startRunTime _at_ 0x7f15 ; //IC卡的空白地址指针,及起始地址
#define SmallViBaseAddress 0x7000 //瞬时速度的起始基地址
#define SpecialViBaseAddress 0x7898 //特殊事故的起始基地址
#define SetTimeRecordAddess 0x7CF0 //存贮重要参数设置的时间 记录
#define OtherIICSaveAddress 0x7f00 // 临时数据存贮区:
//----------------------------------------------------------
//------使用芯片内部自带的数据存贮器,来进行usb管理---------
//----------------------------------------------------------
#define XDATAUSBBuffer 0x100
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define OldSmallVi XBYTE[0x7f5f] //上次0.2秒算出来的速度值
//#define HowManySpecialVi XBYTE[0x7f5f] //共有好多组特殊事故数据
#define Nowsecond XBYTE[0x7f60] //一秒钟切换标志
#define Nowminuts XBYTE[0x7f61] //一分钟切换用
#define Nowday XBYTE[0x7f62] //一天切换用
#define SAVEBe_TH0 XBYTE[0x7f63]
#define SAVEBe_TL0 XBYTE[0x7f64]
#define SAVE_TH0 XBYTE[0x7f65] // uchar SAVE_TH0,SAVE_TL0;
#define SAVE_TL0 XBYTE[0x7f66]
#define Count25For5s XBYTE[0x7f67] //在测速开始时:如果每0。2秒内有1个脉冲,并连续出现在25次的0。2秒测试内,说明车已经启动,
#define StopWait XBYTE[0x7f68]
#define MaxSmallViDiff XBYTE[0x7f69] //指瞬时速度的之间相差多大时,才记为疑点数据
#define start_second XBYTE[0x7f6A] //用于车在开始行驶的时候,记录下起始的秒
#define StudentTime XBYTE[0x7f6B] //学习时长及学习报警
#define StudentBeep XBYTE[0x7f6C]
#define BeforeCount0 XBYTE[0x7f6d] //在开车条件判断确定前,预先存贮的光电圈数
#define Count_L XBYTE[0x7f6e] //根据所设置的常数来设定计数器的计数开始低位
#define Count_H XBYTE[0x7f6f] //根据所设置的常数来设定计数器的计数开始高位
#define KaHao0 XBYTE[0x7f70] //卡号-------[8位--4个字节]
#define KaHao1 XBYTE[0x7f71]
#define KaHao2 XBYTE[0x7f72]
#define KaHao3 XBYTE[0x7f73]
#define switch_neg XBYTE[0x7f74] //开关状态的取反位
#define JaShiNoAddress 0x7f75 //驾驶证号码
bit testbit=0;
bit IsHaveNextDIR=0; //FAT表中是不是只有一个DIR目录项
bit isViTooBigBeep=0; //是否超速报警
bit SeekMenu1Mode=0;
bit isInterruptSeek=0; // 是不是到达了一公里了!!
bit IsUSBReadErr=0; //是不是USB读写出错了
bit isNullICCar=0;
bit IsRunTooLong=0; //是否超时
bit isTooLongBeep=0; //是否该超时报警
bit IsInputChange=0; //在参数设置过程中,是不是改变了旧的数据
bit isDowithServal=0;
bit IsSpecialSmallVi=0; //是否是特殊疑点事故数据
bit isRecordLongStartTime=0;//是否是改记录超速开始的超始时间(由于要持续10秒才进行记录)
bit isChangeIC=0; //IC卡是否更改 ;
bit BeiGuang=0; //背光是不是打开;
//bit IsChangeNextDay=0; //是不是在行驶过程中第二天了
bit SoftStop=0;
bit whichTimeRun=0; // 0-->6 1-->12;
bit NullCarDriverBeep=1; //如果车在开的时候,检测到没有插入有效的身份识别卡的话,将其置为1,接下来开始反警告
uchar xdata NullCartBeepTime=0;
uchar xdata OldVi;
uint xdata ThisCountGD; //速度在0.2秒内累计得到的个数;
uchar xdata RunSegment ; //运行段的起始标志 :缺省时为0xdd;
uchar xdata SaveStopCarViIndex; //存贮停止车前20S的速度数据,该变量为为存贮的序列号,当到达100时,又从第1个数据开始
uint xdata SaveRunDevViIndex ,SaveRunDevViICIndex ; //第几个分钟的平均数据
uchar xdata PingJunZhuShu; //当前记录仪中存入了多少组瞬数据(小于10)
//uint xdata Now_BlankAdd, Now_StartAdd; //记录仪上的空白地址指针,及起始地址
uint xdata TZ_K; //特征系数
uint xdata ReturnIntValue ;
uchar xdata OldGDCount;
uchar xdata BigIndex; //1s测出一个速度,速度累加 -- //0.2S测出一个速度,速度累加
uchar xdata ToTimer02S=0; //由于定时器1每次中断只能有65ms,为了准确的定出0.2秒的时间
uchar xdata commName,commLen; //通讯使用 的变量
bit isHaveCar=0; //是不是有卡存在
bit NeedWriteAll=0;//总累计的行驶里程自加1 ;
bit isViTooBig=0; //是不是速度过大
bit IsCountOver=0;
//bit Init375OK=0; //是否初使化375成功
//bit isWaitExit=0;
//uchar WaitCommAdd=0;
bit IsRunState=0; //1-->确实在运行状态, 0-->不在运行状态
bit isUSBBuffERR;
sbit ReadSwitchState=P2^1; //读取开关量的状态
sbit SegMentLcd_CS=P2^6;
sbit SegMentLcd_DATA=P2^4;
sbit SegMentLcd_CLK=P2^5;
sbit Car_in=P3^5;
sbit READ_KEY=P1^7;
sbit CLS_WDT=P1^6;
sbit IC_SI=P1^3;
sbit IC_CLK=P1^1;
sbit IC_CS=P1^4;
//sbit comm_sel=P1^6;
sbit E2_DATA=P1^0;
sbit BEEP_CTL =P1^5;
sbit CH375_INT=P3^2;
sbit LCD_Control=P1^2;
sbit IC_SO=P2^3;
//sbit Reset375=P2^0;
void IIC_WRITE_ONEBYTE1(uchar i,uchar j,uchar k);
void IIC_READ_ONEBYTE1(uchar i,uchar j,uchar k);
//void SPI_WRITE_ONEBYTE(uchar ts);
//uchar SPI_READ_ONEBYTE();
// uchar code SetBits[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
// uchar code ClsBits[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code SetBits[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code ClsBits[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code monthA[12]={31,29,31,30,31,30,31,30,31,30,31,30};
uchar code monthB[12]={31,28,31,30,31,30,31,30,31,30,31,30};
uchar code Dec_ASC[36]={
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,
0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,
0x55,0x56,0x57,0x58,0x59,0x5a};
void WriteToICMore(unsigned long PageAddress,uchar len);
void WriteBlankAddressToIC(unsigned long BlankAddress); //写meadress作为当前卡的空白地址指向处
uchar ReadFromIC(unsigned long PageAddress);
// void ReadBlankAddressFromIC();
void ReadBlankAddress();
// void WriteToIC(unsigned long PageAddress,uchar medata);
// void SendCommandTo375(uchar Command); //向375发送命令
void ClsWDT() //清除看门狗
{
CLS_WDT=0;CLS_WDT=0;
CLS_WDT=0;CLS_WDT=0;
CLS_WDT=1;CLS_WDT=1;
CLS_WDT=1;CLS_WDT=1;
}
uchar ShengFen4_2(uint abc)
{
uchar result;
result=0;
switch(abc)
{
case 0xbea9:result=11; break;
case 0xbdf2:result=12;break;
case 0xbcbd:result=13;break;
case 0xbdfa:result=14;break;
case 0xc3c9:result=15;break;
case 0xc1c9:result=21;break;
case 0xbcaa:result=22;break;
case 0xbada:result=23;break;
case 0xbba6:result=31;break;
case 0xcbd5:result=32;break;
case 0xd5e3:result=33;break;
case 0xcdee:result=34;break;
case 0xc3f6:result=35;break;
case 0xb8d3:result=36;break;
case 0xc2b3:result=37;break;
case 0xd4a5:result=41;break;
case 0xb6f5:result=42;break;
case 0xcfe6:result=43;break;
case 0xd4c1:result=44;break;
case 0xb9f0:result=45;break;
case 0xc7ed:result=46;break;
case 0xd3e5:result=50;break;
case 0xb4a8:result=51;break;
case 0xb9f3:result=52;break;
case 0xd4c6:result=53;break;
case 0xb2d8:result=54;break;
case 0xc9c2:result=61;break;
case 0xb8ca:result=62;break;
case 0xc7e0:result=63;break;
case 0xc4fe:result=64;break;
case 0xd0c2:result=65;break;
case 0xcca8:result=71;break;
case 0xb8db:result=81;break;
case 0xb0c4:result=82;break;
}
return result;
}
uint Seek_ShengFen(uchar abc)
{ uint result;
result=0xeeee;
switch(abc)
{
case 11:result=0xbea9; break;
case 12:result=0xbdf2;break;
case 13:result=0xbcbd;break;
case 14:result=0xbdfa;break;
case 15:result=0xc3c9;break;
case 21:result=0xc1c9;break;
case 22:result=0xbcaa;break;
case 23:result=0xbada;break;
case 31:result=0xbba6;break;
case 32:result=0xcbd5;break;
case 33:result=0xd5e3;break;
case 34:result=0xcdee;break;
case 35:result=0xc3f6;break;
case 36:result=0xb8d3;break;
case 37:result=0xc2b3;break;
case 41:result=0xd4a5;break;
case 42:result=0xb6f5;break;
case 43:result=0xcfe6;break;
case 44:result=0xd4c1;break;
case 45:result=0xb9f0;break;
case 46:result=0xc7ed;break;
case 50:result=0xd3e5;break;
case 51:result=0xb4a8;break;
case 52:result=0xb9f3;break;
case 53:result=0xd4c6;break;
case 54:result=0xb2d8;break;
case 61:result=0xc9c2;break;
case 62:result=0xb8ca;break;
case 63:result=0xc7e0;break;
case 64:result=0xc4fe;break;
case 65:result=0xd0c2;break;
case 71:result=0xcca8;break;
case 81:result=0xb8db;break;
case 82:result=0xb0c4;break;
}
return result;
}
void delay(uint value)
{
int i;
ClsWDT();
for(i=0;i<value;i++){}
ClsWDT();
}
void serval();
/*
uchar get_char()
{
uint waiting;
waiting=0;
RI=0; while(RI==0){waiting++; if(waiting>20000) { RI=0; return 0;}}
RI=0;
return SBUF;
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -