📄 main.c
字号:
// ===================================================================
// 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 + -