基于飞思卡尔DZ60的AD 1302 KEY 485 CAN FLASH LCD程序
Hardware : EVB9S08DZ60 Board
Author : WBR
Version : V1.0
Begin Time: 2011.5.30
**********************************************************/
#include
#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; //拆分P
byte P0L,P0H,P1L,P1H; //拆分PH,PL
byte 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;count { value_buf[count] = ADCbuffer1[count];; } for (j=0;j { for (i=0;i { if ( value_buf[i]>value_buf[i+1] ) { temp = value_buf[i]; value_buf[i] = value_buf[i+1]; value_buf[i+1] = temp; } } } for(count=1;count sum += value_buf[count]; } //=================================== //函数名:MCU_INIT //作用: 初始化MCU时钟 晶振16M总线频率8M //==================================== void MCU_INIT(void) { MCGC1=0x04; //选择内
飞思卡尔DZ60AD 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)