📄 main.c
字号:
/***************************************************************************************************************************
** 文件名: MAIN.C
** Copyright (c) 北京金时石油测试技术有限公司-测试仪器公司技术开发部
** 创建人: wxt
** 日 期: 2007.06.
** 修改人:
** 日 期:
** 描 述: 转速测试仪
** 硬 件: RotateSpeed(sch & pcb)
** 版 本: V1.0
** 功 能: 采集转速数据
** 硬件描述:
***************************************************************************************************************************/
#include <c8051F020.h>
#include <stdio.h>
#include <setjmp.h>
#include "HEAD.H"
//**************************************************************************************************************************
jmp_buf ReturnToMain; // 定义返回主程序设置点的寄存器空间
unsigned int Timer3=0x00; // 定时器0的寄存器
unsigned char DatLong=0x00; // 串口发送数据长度指针
unsigned char ComFlag=0x00;
unsigned char DateUpLoadFlag=0x00;
xdata unsigned char FunctionKey=0x00; // 按键标志
xdata unsigned char DatPocket[RtuDataLong+5]={0x00};// 串口发送数据缓冲数组
xdata unsigned char RTUaddress4[RtuDataLong]={0x00};
xdata unsigned int Sam_Num_flag=0x00;// 采集次数计数
xdata unsigned int HollSigNum=0x00;
xdata unsigned char disp_ram[8][128]={0x00};
xdata unsigned char Clock_Date_Str[9]="07-06-22",Clock_Time_Str[9]="11:40:23";// 时间寄存器
xdata unsigned char DI_Data[13]="DI:1111 1111";
xdata unsigned char NowWellName=0x00;
xdata unsigned char Str_Buffer[16];//={0x00};
float RotateSpeed=0;
xdata unsigned int HollSpaceTime=0x00; // 霍尔信号间隔
xdata unsigned char HollDate[HollDateLong]={0x00};
xdata unsigned int HollDataNum=0x00;
xdata unsigned char WorkStation=0x00;
xdata unsigned char WellSaveStation[MaxWellSaveNum]={0};
xdata unsigned char NowWellNum=0x00;
xdata unsigned char NowSaveWellAddr=0x00;
xdata unsigned char UsedWell[MaxWellSaveNum]; //有效井数
xdata struct wellindex_name_date well_index[MaxWellSaveNum];
xdata unsigned char TestTime=1;
xdata unsigned char TempT2=0x00;
xdata unsigned int Tem2Con=0x00;
xdata float InstantaneousSpeed=0;
//**************************************************************************************************************************
void main(void)
{
DisableDog();
EA = 0;
POWER_ON;
CRYSTAL_INIT();
PORT_INIT();
//SOUND_ON;
RTUaddress4[33]=Read_Eeprom(0x7FFF);
NowWellName=Read_Eeprom(0x7FFE);
TestTime=Read_Eeprom(0x7FFD);
if(TestTime>8)
Write_Eeprom(0x7FFD,1);
TestTime=Read_Eeprom(0x7FFD);
LCD_INIT();
LED_Init();
Timer3_Init();
Com0_Init();
Com1_Init();
Timer0_Init();
DS1302_Init();
Holl_Init();
DAC_Init();
ADC_Init();
EEPROM_Init();
CTRL485 = 0;
SOUND_OFF;
EA = 1; // 开总中断
setjmp (ReturnToMain) ;
LCD_CLEAR();
while(1)
{
//FeedDog();
if(Timer3%TimeFre==0x00)
{
DS1302_Read();
ADC_Work();
//LCD_DispStr("RotateSpeed",MainShowAddr,30);
disp_chn_str("抽油机转速仪",5,20,16,1);
LCD_SHOW_TIME();
LCD_SHOW_BatVol();
LCD_SHOW_InstantaneousSpeed();
Display_Data();
}
if(FunctionKey=get_key( 1 ))
{
if(FunctionKey==RETURN_KEY)
{
Sys_Function();
}
if(FunctionKey==UP_ARROW_KEY)
{
RTUaddress4[33]=Read_Eeprom(0x7FFF)+2;
Write_Eeprom(0x7FFF,RTUaddress4[33]);
}
if(FunctionKey==DOWN_ARROW_KEY)
{
RTUaddress4[33]=Read_Eeprom(0x7FFF)-2;
Write_Eeprom(0x7FFF,RTUaddress4[33]);
}
FunctionKey=0x00;
}
if(DateUpLoadFlag!=0x00)
{
UpLoadWellDateTure(DatPocket[2]);
DateUpLoadFlag=0x00;
}
}
}
//**************************************************************************************************************************
void CRYSTAL_INIT(void)
{
xdata unsigned char i; // delay counter
OSCXCN = 0x67; // start external oscillator with 11.0592MHz crystal
for(i=0;i<254;i++); // XTLVLD blanking interval (>1ms)
while(!(OSCXCN & 0x80));// Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK source
// enable missing clock detector,internal oscillator disable
}
//**************************************************************************************************************************
void PORT_INIT(void)
{
XBR0 = 0x04; // 使能UART0
//XBR1 = 0x04; // 使能外部中断0
XBR1 = 0x20; // 使能T2
XBR2 = 0x44; // 使能数据交叉开关和禁止允许弱上拉,使能UART1
//P0MDOUT |= 0xFF; // 允许TXD0,RXD0,TXD0,RXD0,INT0为推挽输出
P1MDOUT |= 0xFF;
P2MDOUT |= 0xEF;
P3MDOUT |= 0xFF;
P2 |= 0x0F;
P3 = 0xFF;
P74OUT &=~30;
P6 |= 0xFF;
P0MDOUT |= 0x20; // 推挽输出,强制输出0,1
P0MDOUT &=~0x10; // 开漏输出,输出1后可读取IO口状态
P0 |= 0x10;
P2MDOUT &=~0x10;
P2 |= 0x10;
KEYLED = 0;
}
/*
//**************************************************************************************************************************
void SoftReset(void)
{
RSTSRC |= 0x10;
}
//**************************************************************************************************************************
void FeedDog(void) //启动/复位看门狗
{
WDTCN = 0xA5; //默认看门狗最大时间间隔是94ms,
}
*/
//**************************************************************************************************************************
void DisableDog(void)
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
//**************************************************************************************************************************
void Delay_ms(unsigned int mini)
{
xdata unsigned char delay;
while(mini--)
{
for (delay = 240; delay != 0 ; delay--);
}
}
//**************************************************************************************************************************
// The End
//**************************************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -