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

📄 c51.c

📁 一段C的小程序
💻 C
📖 第 1 页 / 共 5 页
字号:
// 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 + -