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

📄 main.c

📁 mc9s08aw60 RTC LCD PWM
💻 C
📖 第 1 页 / 共 3 页
字号:
// ===================================================================
// Macro Functions definitions
// ===================================================================
#include <hidef.h> 			/* EnableInterrupts macro  */
#include "derivative.h" /* include peripheral declarations */
#include	<stdio.h>
#include  <math.h>
#include  <stdlib.h>
#include "config.h"

#define MASTER


#define	b_SetBit(bit_ID, varID)		(varID |= (muint8)(1<<bit_ID))
#define	b_ClearBit(bit_ID, varID)	(varID &= ~(muint8)(1<<bit_ID))

#define AlarmSound     PTCD_PTCD3


//字符变量定义
extern	bit   	w_or_b;	
bit     key_flag;
extern	char dispbuff[32];	

unsigned short led_data=0x80;
unsigned short flag=0;
unsigned char  flag_1s=0;


uchar volatile KeyNumber;

uchar KeyNumber1;
uchar LedTable[8];		//old
uchar LedNewTable[8];	//new


//秒 分 时 日 月 星期 年
uchar DS1302_InitDate[]={0x33,0x17,0x11,0x0a,0x02,0X06,0x07};
uchar DS1302_RDDate[8];


enum 	key{nothing,run_key,stop_key,bolus_key,silence_key,option_key,up_key,down_key, 
	f3_key,f4_key,dot_key,clear_key,off_key,ok_key,one_key,two_key,three_key,four_key,
	five_key,six_key,seven_key,eight_key,nine_key,zero_key}key_value;
//浮点变量定义
float TransSpeed;
float TransTotal;
uint  TempPWM;
//////////////////////////////////////////////////////////////////////////////
void SystemInitFunc(void);
void PeriphInit(void);
void OptionFunc(void);
void SpeedTotalFunc(void);
void TotalTime(void);
void OtherSetFunc(void);
void SetPressFunc(void);
void SetBuzzerFunc(void);
void SetBolusFunc(void);
void QueryHistoryFunc(void);
void load_pwm(void);   //reentrant


/*#define	SETSYRINGE			0
#define	NORSPDSET			1


#define	NORSPDUNT1SHOW		2
#define	NORSPDUNT2SHOW		3
#define	NORSPDUNT3SHOW		4

#define OPTION				5
#define BOLUS				6
#define PURGE				7
#define USSYRINGE			19

#define RUNFUNC1			8
#define RUNFUNC2			9
#define RUNFUNC3			10

#define	CONCENFUNC2		11
#define CONCENFUNC3		12

#define PURGEFUNC1			13
#define PURGEFUNC2			14
#define PURGEFUNC3			15

#define BOLUSFUNC1			16
#define BOLUSFUNC2			17
#define BOLUSFUNC3			18

#define NORFUNCOPTION1		20
#define NORFUNCOPTION2		21
#define NORFUNCOPTION3		22

#define	UNITEFUNC			23
#define TCIPROGMENU		24
#define	PHYSSETUP			25
#define	INDUCPROG			26
#define	INDUCSHOW			27
#define	TCISHOW				28

#define	TCIRUNMENU			29
#define	TCISTOPMENU		30
#define	TCIPURGEMENU		31
#define	TCIBOLUSMENU		32
#define	TCIOPTIONMENU		33
#define	TCITOTALSHOW		34
#define	TCIDRUGMODEL		35
#define	TCIPERSONSHOW		36


#define	EFFECTSHOW			37
#define	TCIEFFECTSHOW		38
#define	TCIEFFECTRUN		39
#define	TCIEFFECTSTOP		40
#define	EFFECTPURGE		41
#define	EFFECTBOLUS		42

#define	EFFECTOPTION		43
#define	EFFECTTOTAL		44
#define	EFFECTDRUG			45
#define	EFFECTPERSON		46



#define	TAB_MAX				50

typedef	struct
	{
		uint8	MenuIndex;				
		uint8   Option;				
		uint8   Bolus;					
		uint8	Run;					
		uint8	Stop;					
		uint8   PageUp;					
		uint8	PageDown;				
		uint8	Single;					
		void	(*EnterOperate)();		
	}KeyTabStruct;

void	(*KeyFuncPc)();  				   

KeyTabStruct		KeyTab[TAB_MAX];		

uint8 MenuID=SETSYRINGE;				
			
KeyTabStruct	KeyTab[TAB_MAX]=		
{
	
	{SETSYRINGE,	OPTION,			UNITEFUNC,		0xff,		0xff,						TCIPROGMENU,	NORSPDSET,		0xff,			*set_syringe_vol},//
	{NORSPDSET,		CONCENFUNC2,	CONCENFUNC3,	0xff,		0xff,						SETSYRINGE,		NORSPDUNT1SHOW,	SETSYRINGE,		*ConcentSetup},//
	{NORSPDUNT1SHOW,NORFUNCOPTION1,	PURGEFUNC1,		RUNFUNC1,	0xff,						NORSPDSET,		0xff,			SETSYRINGE,		*NormalFunc1},//
	{NORSPDUNT2SHOW,NORFUNCOPTION2,	PURGEFUNC2,		RUNFUNC2,	0xff,						CONCENFUNC2,	0xff,			SETSYRINGE,		*NormalFunc2},//
	{NORSPDUNT3SHOW,NORFUNCOPTION3,	PURGEFUNC3,		RUNFUNC3,	0xff,						CONCENFUNC3,	0xff,			SETSYRINGE,		*NormalFunc3},//
	{OPTION,		USSYRINGE,		BOLUS,			0xff,		0xff,						SETSYRINGE,		PURGE,			SETSYRINGE,		*option},		//
	{BOLUS,			0xff,			0xff,			0xff,		0xff,						OPTION,			0xff,			SETSYRINGE,		*bolus_menu},	//
	{PURGE,			0xff,			0xff,			0xff,		0xff,						OPTION,			0xff,			SETSYRINGE,		*purge_menu},	//
	{RUNFUNC1,		0xff,			BOLUSFUNC1,		0xff,		NORSPDUNT1SHOW,				0xff,			0xff,			0xff,			*NormalRunFunc1},
	{RUNFUNC2,		0xff,			BOLUSFUNC2,		0xff,		NORSPDUNT2SHOW,				0xff,			0xff,			0xff,			*NormalRunFunc2},
	{RUNFUNC3,		0xff,			BOLUSFUNC3,		0xff,		NORSPDUNT3SHOW,				0xff,			0xff,			0xff,			*NormalRunFunc3},
 	{CONCENFUNC2,	NORFUNCOPTION2,	PURGEFUNC2,		RUNFUNC2,	0XFF,						NORSPDSET,		0xff,			SETSYRINGE,		*NormalConcen2},
 	{CONCENFUNC3,	NORFUNCOPTION3,	PURGEFUNC3,		RUNFUNC3,	0XFF,						NORSPDSET,		0xff,			SETSYRINGE,		*NormalConcen3},
 	{PURGEFUNC1,	0xff,			0xff,			0xff,		NORSPDUNT1SHOW,				0XFF,			0XFF,			0xff,			*PurgeAirFunc1},
 	{PURGEFUNC2,	CONCENFUNC2,	0xff,			0xff,		NORSPDUNT2SHOW,				0XFF,			0XFF,			0xff,			*PurgeAirFunc2},
 	{PURGEFUNC3,	CONCENFUNC3,	0xff,			0xff,		NORSPDUNT3SHOW,				0XFF,			0XFF,			0xff,			*PurgeAirFunc3},
 	{BOLUSFUNC1,	NORSPDUNT1SHOW,	0xff,			0xff,		RUNFUNC1,					0XFF,			0XFF,			0xff,			*BolusRunFunc1},
 	{BOLUSFUNC2,	NORSPDUNT2SHOW,	0xff,			0xff,		RUNFUNC2,					0XFF,			0XFF,			0xff,			*BolusRunFunc2},
 	{BOLUSFUNC3,	NORSPDUNT3SHOW,	0xff,			0xff,		RUNFUNC3,					0XFF,			0XFF,			0xff,			*BolusRunFunc3},
 	{USSYRINGE,		0xff,			0xff,			0xff,		0XFF,						OPTION,			0XFF,			SETSYRINGE,		*syringe_menu},
 	{NORFUNCOPTION1,0xff,			0xff,			0xff,		0XFF,						NORSPDUNT1SHOW,	0XFF,			SETSYRINGE,		*NorFunc1Option},
 	{NORFUNCOPTION2,NORSPDUNT2SHOW,	0xff,			0xff,		0XFF,						CONCENFUNC2,	0XFF,			SETSYRINGE,		*NorFunc2Option},
 	{NORFUNCOPTION3,NORSPDUNT3SHOW,	0xff,			0xff,		0XFF,						CONCENFUNC3,	0XFF,			SETSYRINGE,		*NorFunc3Option},
 	{UNITEFUNC,		0xff,			0xff,			0xff,		0XFF,						SETSYRINGE,		TCIPROGMENU,	SETSYRINGE,		*UniteFunc},
 	{TCIPROGMENU,	0xff,			UNITEFUNC,		0xff,		0XFF,						SETSYRINGE,		PHYSSETUP,		SETSYRINGE,		*tci_prog},
 	{PHYSSETUP,		0xff,			0xff,			0xff,		0XFF,						TCIPROGMENU,	INDUCPROG,		SETSYRINGE,		*phys_setup},
 	{INDUCPROG,		EFFECTSHOW,		0xff,			0xff,		0XFF,						PHYSSETUP,		INDUCSHOW,		SETSYRINGE,		*induc_prog},
 	{INDUCSHOW,		0xff,			0xff,			0xff,		0XFF,						INDUCPROG,		TCISHOW,		SETSYRINGE,		*induc_show},
 	{TCISHOW,		0xff,			TCIPURGEMENU,	TCIRUNMENU,	0XFF,						INDUCSHOW,		0xff,			SETSYRINGE,		*tci_show_prog},
 	{TCIRUNMENU,	TCIOPTIONMENU,	TCIBOLUSMENU,	0xff,		TCISTOPMENU,				0XFF,			TCITOTALSHOW,	0XFF,			*TciRunFunc},
 	{TCISTOPMENU,	TCIOPTIONMENU,	TCIPURGEMENU,	TCIRUNMENU,	0xff,						0xff,			TCITOTALSHOW,	SETSYRINGE,		*TciStopFunc},
 	{TCIPURGEMENU,	TCISTOPMENU,	0xff,			0xff,		TCISHOW,					0XFF,			0XFF,			0XFF,			*TciPurgeFunc},
 	{TCIBOLUSMENU,	TCISTOPMENU,	0xff,			0xff,		TCIRUNMENU,					0XFF,			0XFF,			0XFF,			*TciBolusFunc},
 	
 	{TCIOPTIONMENU,	TCISTOPMENU,	0xff,			0xff,		TCISTOPMENU,				TCIRUNMENU,		0XFF,			0XFF,			*TciOptionFunc},
 	{TCITOTALSHOW,	TCISTOPMENU,	0xff,			0xff,		TCISTOPMENU,				TCIRUNMENU,		TCIDRUGMODEL,	0XFF,			*TciTotalShowFunc},
 	{TCIDRUGMODEL,	0xff,			0xff,			0xff,		TCISTOPMENU,				TCITOTALSHOW,	TCIPERSONSHOW,	0XFF,			*TciDrugModelFunc},
 	{TCIPERSONSHOW,	0xff,			0xff,			0xff,		TCISTOPMENU,				TCIDRUGMODEL,	0XFF,			0XFF,			*TciPersonShowFunc},
 	{EFFECTSHOW,	0xff,			0xff,			0xff,		0XFF,						INDUCPROG,		TCIEFFECTSHOW,	SETSYRINGE,		*effect_induc_show},
 	{TCIEFFECTSHOW,	0xff,			EFFECTPURGE,	TCIEFFECTRUN,0XFF,						EFFECTSHOW,		0xff,			SETSYRINGE,		*tci_effect_show_prog},
 	
 	{TCIEFFECTRUN,	EFFECTOPTION,	EFFECTBOLUS,	0xff,		TCIEFFECTSTOP,				0XFF,			EFFECTTOTAL,	0xff,			*TciEffectRunFunc},
 	{TCIEFFECTSTOP,	EFFECTOPTION,	EFFECTPURGE,	TCIEFFECTRUN,0xff,						0xff,			EFFECTTOTAL,	SETSYRINGE,		*TciEffectStopFunc},
 	{EFFECTPURGE,	TCIEFFECTSTOP,	0xff,			0xff,		TCIEFFECTSHOW,				0XFF,			0XFF,			0XFF,			*TciEffectPurgeFunc},
 	{EFFECTBOLUS,	0XFF,			0xff,			0xff,		TCIEFFECTRUN,				0XFF,			0XFF,			0XFF,			*TciEffectBolusFunc},
	
	{EFFECTOPTION,	TCIEFFECTSTOP,	0xff,			0xff,		TCIEFFECTSTOP,				TCIEFFECTRUN,	0XFF,			0XFF,			*TciEffectOptionFunc},
	{EFFECTTOTAL,	TCIEFFECTSTOP,	0xff,			0xff,		TCIEFFECTSTOP,				TCIEFFECTRUN,	EFFECTDRUG,		0XFF,			*TciEffectTotalShow},
	{EFFECTDRUG,	0XFF,			0xff,			0xff,		TCIEFFECTSTOP,				EFFECTTOTAL,	EFFECTPERSON,	0XFF,			*TciEffectDrugModel},
	{EFFECTPERSON,	0XFF,			0xff,			0xff,		TCIEFFECTSTOP,				EFFECTDRUG,		0XFF,			0XFF,			*TciEffectPersonShow},
 };
*/
//==========================================================================================
//**
//**纵向取模,字节倒序
//**
//==========================================================================================

/******************************************************************************************/
//
/******************************************************************************************/
void delayXms(uint time) //延时xxms  time<744
{
  uchar i;
  while(time--)     
    {
    for(i=0;i<250;i++);
    }
}
/*
** ===================================================================
**     Method      :  MCU_init (bean MC9S08AW60)
**
**     Description :
**         Device initialization code for selected peripherals.
** ===================================================================
*/
void MCU_init(void)
{
  /* ### MC9S08GB60 "Cpu" init code ... */
  /*  PE initialization code after reset */
  /*  System clock initialization */
  
  /*** SOPT - System Options Register; 0x00001802 ***/
  /* SOPT: COPE=0,COPT=1,STOPE=0,BKGDPE=1 */
  //SOPT = 0x53;   //禁止看门狗 
  SOPT = 0x00;   //禁止看门狗 
  
  
  //System Power Management Status and Control 1 Register 
  /*  LVDF LVDACK LVDIE LVDRE LVDSE  LVDE 0 BGBE  */                                 
  /* SPMSC1: LVDF=0,LVDACK=0,LVDIE=0,LVDRE=1,LVDSE=1,LVDE=1 */
  SPMSC1 = 0x1C; //LVD查询使能,中断关闭                                     
  /* SPMSC2: LVWF=0,LVWACK=0,LVDV=0,LVWV=0,PPDF=0,PPDACK=0,PDC=0,PPDC=0 */
  SPMSC2 = 0x00;    //LVD警告,STOP3模式                                  
  /* ICGC1: RANGE=1,REFS=0,CLKS1=0,CLKS0=0,OSCSTEN=1 */
  ICGC1 = 0x44;                                      
  /* ICGC2: LOLRE=0,MFD2=0,MFD1=0,MFD0=0,LOCRE=0,RFD2=0,RFD1=0,RFD0=0 */
  ICGC2 = 0x00;                                      
  /* Common initialization of the write once registers */
  
  //ICGC1 = 0x28;
  //ICGC2 = 0x70;
  ICGS1=0x00;
  ICGS2=0x00;
  
   //PTCDD = 0x10;  // set port c as inputs for push button switch input 
   //PTCPE = 0xEF;  // enable port c pullups for push button switch operation

   //PTFDD = 0xFF;	 // set port f as outputs for LED operation
   //PTFD  = 0x00;
  /* Common initialization of the CPU registers */
  /* PTASE: PTASE7=0,PTASE6=0,PTASE5=0,PTASE4=0,PTASE3=0,PTASE2=0,PTASE1=0,PTASE0=0 */
  PTASE = 0x00;                                      
  /* PTBSE: PTBSE7=0,PTBSE6=0,PTBSE5=0,PTBSE4=0,PTBSE3=0,PTBSE2=0,PTBSE1=0,PTBSE0=0 */
  PTBSE = 0x00;                                      
  /* PTCSE: PTCSE7=0,PTCSE6=0,PTCSE5=0,PTCSE4=0,PTCSE3=0,PTCSE2=0,PTCSE1=0,PTCSE0=0 */
  PTCSE = 0x00;                                      
  /* PTDSE: PTDSE7=0,PTDSE6=0,PTDSE5=0,PTDSE4=0,PTDSE3=0,PTDSE2=0,PTDSE1=0,PTDSE0=0 */
  PTDSE = 0x00;                                      
  /* PTESE: PTESE7=0,PTESE6=0,PTESE5=0,PTESE4=0,PTESE3=0,PTESE2=0,PTESE1=0,PTESE0=0 */
  PTESE = 0x00;                                      
  /* PTFSE: PTFSE7=0,PTFSE6=0,PTFSE5=0,PTFSE4=0,PTFSE3=0,PTFSE2=0,PTFSE1=0,PTFSE0=0 */
  PTFSE = 0x00;                                      
  /* PTGSE: PTGSE7=0,PTGSE6=0,PTGSE5=0,PTGSE4=0,PTGSE3=0,PTGSE2=0,PTGSE1=0,PTGSE0=0 */
  PTGSE = 0x00;
    
  PTCPE_PTCPE0=0x00;
  PTCPE_PTCPE1=0x00;                                    
  /* ### Init_COP init code */
  SRS = 0xFF;                          /* Clear WatchDog counter */

  /* ### */
  asm CLI;                             /* Enable interrupts */
  TPM1SC_TOIE=0;
} /*MCU_init*/
/*
// ---------------------------------------------------------------------------
// Peripheral Initialization Routine
// ---------------------------------------------------------------------------
*/
void PeriphInit(void)
{
    SOPT  = 0x00;	 /* Disable COP	*/
    
    PTADD = 0xFF;  //输出
    PTAD  = 0x00;
    
    PTBDD = 0xFF;
    PTBD  = 0x00;
    
    PTCDD = 0xFF;  // set port c as inputs for push button switch input 
    PTCPE = 0x00;  // enable port c pullups for push button switch operation
    PTCD  = 0XFF;

    PTEDD = 0xFF;	 // set port f as outputs for LED operation
    PTED  = 0x00;
    
    PTFDD = 0xFF;	 // set port f as outputs for LED operation
    PTFD  = 0x00;
    
    PTGDD = 0xFF;
    PTGD  = 0x00; 
    
    PTDDD = 0x3F;	 // set port f as outputs for LED operation
    PTDD  = 0x80;
    

    KBISC=  0x02;
    KBIPE=  0x80;
       
    AlarmSound=0;
             		
}

//***************************************************************
//
//
//
//***************************************************************
void TPM_init(void)  
{ 
  /*
  TPM1SC  = 0x00;   //TPM2SC                    // Stop and reset counter 
  TPM1MOD = 0xFFFF; //溢出周期,即PWM周期                   // Period value setting 
  TPM1C0V =0x1FFF;
  (void)(TPM1C0SC==0); 
  
  //TPM1C0SC= 0x68;//                 
  TPM1C0SC= 0x28;//
								    									   
  (void)(TPM1SC == 0);     //???    // Overflow int. flag clearing (first part) 
  
  TPM1SC = 0x08;                       // Int. flag clearing (2nd part) and timer control register setting 
  TPM1C0SC_CH0IE=0X00; 
  */
  
}
//***************************************************************
//
//开机 LOGO
//
//***************************************************************
void start_screen(void)
{ 
	clr_oled();
	dprintf_NUM48(1,0,"SLGO");
	dprintf_WORD16(3,8,"思路高");
	delayXms(6000);


}
//***************************************************************
//
//公司、版本
//
//***************************************************************
void SLGO_InfoLCD(void) {
     clr_oled();
  	dprintf_WORD16(0,0,"北京思路高高科技");
  	dprintf_WORD16(2,4,"有限公司");
  	dprintf_WORD16(6,0,"版本");
  	dprintf_CHAR12(6,6,"V1.00.00");
  	delayXms(6000);

}

/******************************************************************************************/
/*	  输液泵速度设置							   */
/******************************************************************************************/
void load_pwm(void)   //reentrant
{
  TPM1SC = 0x00;   //TPM2SC                    /* Stop and reset counter */
  TPM1MOD = 0xFFFF; //溢出周期,即PWM周期                   /* Period value setting */
  TPM1C0V=(uint)(65536.0/900.0*TransSpeed);
  (void)(TPM1C0SC==0); 
                   
  //TPM1C0SC= 0x68;//
  TPM1C0SC= 0x28;////
								    									   
  (void)(TPM1SC == 0);     //???    /* Overflow int. flag clearing (first part) */
  
  TPM1SC = 0x08;                       /* Int. flag clearing (2nd part) and timer control register setting */
  TPM1C0SC_CH0IE=0X00; 
  			
	}
//***************************************************************
//
//主运行界面
//
//***************************************************************
void ManiRunFunc(void) {

 
    float      tempadc0;
    float      tempadc1;
    
    unsigned int i;
    //float value=345.987;
    //float value1;
    


  
    uchar	MainRun_menu=1;
    key_value=nothing;
	  key_flag=0;
    clr_oled();
  	dprintf_WORD16(0,0,"工作模式");
  	dprintf_WORD16(0,10,"持续");
  	
  	dprintf_WORD16(2,0,"流速");
  	w_or_b=BLACK;
    sprintf(dispbuff,"%.1f",TransSpeed);
		dprintf_CHAR12(2,5,dispbuff);//
		w_or_b=WHITE;
		dprintf_CHAR12(2,12,"ml/h");//
		
    //dprintf_WORD16(4,0,"总量");
	//	sprintf(dispbuff,"%.3f",TransTotal);
	//	dprintf_CHAR12(4,5,dispbuff);//
	//	dprintf_CHAR12(4,12,"ml");//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -