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

📄 main.c

📁 基于c8051f020的应用
💻 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 + -