锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于飞思卡尔DZ60的AD 1302 KEY 485 CAN FLASH LCD程序

时间:2024-05-12 18:07:10

/*********************************************************                 Hardware  :       EVB9S08DZ60 BoardAuthor    :      WBRVersion   :      V1.0Begin Time:      2011.5.30**********************************************************/#include  /* for EnableInterrupts macro */#include "derivative.h" /* include peripheral declarations */#include "1302.h"//#include "lcd.h"//#include "mscan.h"//#include "KEY.h"/******************************************************IO说明:        1:四路AD输入通道 ADP19(AD1)  ADP11(AD2)  ADP3(AD3) ADP4(AD4)        2:485通信      DE (PTE2)  TXD1(PTE0)  RXD1(PTE1)        3:四路光耦输入 DI1(PTG2)  DI2 (PTE5)  DI3 (PTE4)  DI4(PTE3)        4:DS1302       SCL(PTF2)  SDA (PTF3) RST (PTG4)        5:继电器控制   PTA6  PTB5  PTA5  PTC4  PTB6        6:按键(输入) PTC0  PTB0  PTC1  PTA0  PTC2(SW1~SW5)        7:CAN          TX(PTE6)  RX(PTE7)        8:LCD          RW(PTG3)  RS(PTF0) E(PTF1) RST(PTF7) 背光(PTG5)  DATA(PTD0~PTD7)************************************************************/#define  DI1  PTGD_PTGD2                  //外触发1----->PG2#define  DI2  PTED_PTED5                  //外触发2----->PE5#define  DI3  PTED_PTED4                  //外触发3----->PE4#define  DI4  PTED_PTED3                  //外触发4----->PE3//********以上为输入IO********//#define  JDQ1 PTCD_PTCD4                  //继电器1----->PC4#define  JDQ2 PTAD_PTAD5                  //继电器2----->PA5#define  JDQ3 PTBD_PTBD5                  //继电器3----->PB5#define  JDQ4 PTAD_PTAD6                  //继电器4----->PA6#define  JDQ5 PTBD_PTBD6                  //继电器5----->PB6#define DE485 PTED_PTED2                  //485 T R切换----->PE2//#define ID_TX               0x0001      //自定义的CAN发送标识符//#define ID_RX               0x0002      //自定义的CAN接收标识符//Bool can_send_enable = FALSE;           //CAN发送标志位,暂定RTC0.5秒发送一次#define Baud  19200                       //串口波特率9600#define N 51#define T 1800                           //运算电量的时间单位1800是半个小时(1800秒)                    extern byte time_buf1[8];                 //1302时钟寄存器byte ReadTimeFlag = 0;                    //定时器每0.5秒读1302时间的标志位byte ADSET = 0;                           //发送电流电压功率等数值到显示屏标志位/*********************变量和函数定义****************************/word ADCbuffer1[N] = 0;                  //AD转换缓冲word ADC1,ADC2,ADC3,ADC4;                 //AD转换缓冲byte ADC1L,ADC1H,ADC2L,ADC2H,ADC3L,ADC3H,ADC4L,ADC4H;byte MW4L,MW4H,MW5L,MW5H,MW6L,MW6H,MW7L,MW7H,MW8L,MW8H,MW9L,MW9H;byte MW21L,MW21H,MW22L,MW22H,MW25L,MW25H,MW26L,MW26H;      //历史充电电量记录byte MW29L,MW29H,MW30L,MW30H,MW33L,MW33H,MW34L,MW34H;      //历史放电电量记录byte Buffer[15];                          //串口接收缓冲byte ADch_s;                              //AD通道选择byte ADcount;//byte Key_value=0;                       //按键//byte CANbuffer[8];                      //接收到的CAN内容缓冲区数组word  sum=0;                                long  P,P1,P2,P3,Premain,Pup,Pdown,Psum;             //实时充电功率,实时放电功率,历史充电功率,历史放电记录word PL,PH;                               //拆分Pbyte P0L,P0H,P1L,P1H;                     //拆分PH,PLbyte RR = 1;                              //RR = 1;读屏的19号地址;RR = 2读屏的20号地址开始的时间;byte PAGE8;                               //进入设置时间页面和电量页面设置计数;byte T20 =0;word TENT;byte *p;//================================//中值滤波程序//================================void filter(){   static byte count,i,j;   word value_buf[N];   word temp;   sum=0;   for(count=0;countvalue_buf[i+1] )            {              temp = value_buf[i];              value_buf[i] = value_buf[i+1];               value_buf[i+1] = temp;            }        }    }  for(count=1;count晶振16M总线频率8M//====================================void MCU_INIT(void){       MCGC1=0x04; //选择内部时钟    MCGC2=0x40; //时钟源二分频    MCGTRM=0xa8;//内部时钟微调}//===================================//函数名: IO_INIT//作用:   初始化IO 输入输出//====================================void IO_INIT(void){    PTADD = 0xe6;                       //数据方向 1为输出,0为输入    PTBDD = 0x76;    PTCDD = 0xb0;    //PTDDD = 0xff;    PTEDD = 0x45;    PTFDD = 0xff;    PTGDD = 0x38;    PTAD  = 0 ;                        //初始状态IO全为0    PTBD  = 0;    PTCD  = 0;    PTDD  = 0;    PTED  = 0;    PTFD  = 0;    PTGD  = 0;   }//===================================//函数名: ADC_INIT//作用:   初始化ADC   总线时钟8M//===================================void ADC_INIT(void){   ADCCFG = 0xf9;                        //低功耗模式,10位精度,ADCK=总线频率/8/2=500K   ADCSC2 = 0x00;                        //0x00:软件触发,比较功能禁止   APCTL1 = 0x14;                        //通道引脚使能: 使用通道为AD19 AD11 AD3 AD4   APCTL2 = 0x08;   APCTL3 = 0x08;   ADch_s = 19;                          //选择19通道开始    ADCSC1 = 0x73;                        //0x53:中断使能,单次转换,选择19通道启动转换.}//===================================//函数名:SCI_INIT//作用:  初始化SCI1//====================================                void SCI_INIT(void){       SCI1BD = 8000000/16/Baud;           SCI1C1 = 0x00;    SCI1C2 = 0x2c;                        //使能接受中断}//===================================//串口发送//===================================void SCI1send (byte x){   while(SCI1S1_TDRE==0);    SCI1D = x;}//===================================//定时器1初始化//===================================void TPM1_Init(void)                            //定时器1初始化{ TPM1MODH=0x3d;                                // TPM1MODL=0x09;                                //250MS TPM1SC=0x4F;                                  //TPM1时钟源为总线时钟;分频系数为128;溢出中断使能}//===================================//延时//===================================void Delay(Word time){    Word i,j;    for(i=0;i12)    {      MonthC1 = 0;      DateC1= 0;      MW21L = 0;      MW21H = 0;      MW22L = 0;      MW22H = 0;    }//*************前1次的充电记录*********************************  p=(byte *)(0x1411);                              //  MonthC2= *p;  p=(byte *)(0x1412);                              //时间  
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章