void main( void )
{
     Delay(100);      //等待复位
     LcmInit();
     LcmClearTXT();
     LcmClearBMP();
     while(1)
     {
           LcmClearTXT();
           PutBMP(bmp1);
           DelayKey(1,5);
           
           DisplayDots(0x55);
           DelayKey(1,5);
           
           LcmClearBMP();
           PutStr(0,0,str1);
           DelayKey(1,5);
                       
           LcmClearTXT();
           DisplayDots(0xaa);
           DelayKey(1,5);
     }
}
Beispiel #2
0
int main(void)
{
    OSCCON = 0xF2; //配置CPU时钟频率为16MHz
    
	//定时器1配置,10ms,源Fosc/4,再分频1:2,10ms一次中断
	TMR1ON = 0;
	TMR1CS = 0; //内部时钟Fosc/4
	T1CKPS1 = 1; //1:4预分频比
	T1CKPS0 = 0;
	//TMR1H = 0xD8;   //10ms
	//TMR1L = 0xEF;
    TMR1H = 0x3C;  //50ms
    TMR1L = 0xAF;

	TMR1IE = 1;
	TMR1ON = 1;
    //定时器1配置结束并启用
    
    //定时器2配置,1ms
    TMR2ON=0;
    TMR2IE=0;
    T2CON=0b00000010;
    PR2=125;
    TMR2IE=1;
    TMR2ON=1;
    //定时器2配置结束
    
    //开启全局中断
   	PEIE = 1;
	GIE = 1;

	b50MsFlag = 0;
    b1SecFlag=0;
    b1MinFlag=0;
    b1HourFlag=0;
    nTimer1Count = 0;
    nSecCount = 0;
    nMinCount = 0;
    nHourCount = 0;
    IO_Config();  //初始化所有端口
    
    //初始化参数,如果已经保存到EEPROM,则读取,否则默认值初始化并保存
    KYJ_Param_Default();
    if(EEPROM_Read(EEPROM_FLAG_ADDR) == 100)
    {
        EEPROM_Load_Param(PARAM_STORE_BYTES);
        EEPROM_Load_Counter();//这个要放在后面
    }
    else
    {
        EEPROM_Save_Param(PARAM_STORE_BYTES);
        EEPROM_Write(EEPROM_FLAG_ADDR,100);
    }
    
    //初始化
    LcmInit();
    DelayMs(100);
    LcmInit();  //防止LCD一次初始化失败,再次初始化
    LED_ON;
//    DelayMs(100);
    KYJ_Init();
    adc_init();
    LED_RUN_ON;
    LED_ERROR_ON;
    BEEP_ON;
    //显示欢迎界面
    LcmSetSongBuff(1,2,3,4,0,0,0,0);
    LcmPutSongStr(1,30,BuffCharDot,4,0);

    LcmSetSongBuff(5,6,7,8,9,0,0,0);
    LcmPutSongStr(4,20,BuffCharDot,5,0);
    asm("CLRWDT");
    DelayS(3);
    LcmClear(0x00);
    LED_RUN_OFF;
    LED_ERROR_OFF;
    BEEP_OFF;

    //运行前验证下参数设置是否正确,另外在每次设置参数值后也要验证下
    sKYJ.nValidateParamResult = KYJ_ValidateParam();
    //sKYJ.nStatusTimeElapse = sKYJ.sUserParam.nRestartDelayTime;
    //sKYJ.sFactoryParam.nLowTempProtect = -10;
    SWDTEN = 1;
    while(1)
	{
        //检查状态
        if(KYJ_CheckStatus(STATUS_POWERSTOP)) KYJ_SwitchToStatus(STATUS_POWERSTOP);
		if(KYJ_CheckStatus(STATUS_KEYSTOP)) KYJ_SwitchToStatus(STATUS_KEYSTOP);
		if(KYJ_CheckStatus(STATUS_DELAYSTOP)) KYJ_SwitchToStatus(STATUS_DELAYSTOP);
		if(KYJ_CheckStatus(STATUS_FAULTSTOP)) KYJ_SwitchToStatus(STATUS_FAULTSTOP);
		if(KYJ_CheckStatus(STATUS_STARTUP)) KYJ_SwitchToStatus(STATUS_STARTUP);
		if(KYJ_CheckStatus(STATUS_LOAD)) KYJ_SwitchToStatus(STATUS_LOAD);
		if(KYJ_CheckStatus(STATUS_UNLOAD)) KYJ_SwitchToStatus(STATUS_UNLOAD);
		if(KYJ_CheckStatus(STATUS_MANUAL)) KYJ_SwitchToStatus(STATUS_MANUAL);
		KYJ_ExcecuteStatus();

        //检查界面
        if(KYJ_CheckInterface(INTERFACE_MAIN)) KYJ_SwitchToInterface(INTERFACE_MAIN);
		if(KYJ_CheckInterface(INTERFACE_MENU)) KYJ_SwitchToInterface(INTERFACE_MENU);
		if(KYJ_CheckInterface(INTERFACE_RUNPARAM)) KYJ_SwitchToInterface(INTERFACE_RUNPARAM);
		if(KYJ_CheckInterface(INTERFACE_USERPARAM)) KYJ_SwitchToInterface(INTERFACE_USERPARAM);
		if(KYJ_CheckInterface(INTERFACE_FACTORYPARAM)) KYJ_SwitchToInterface(INTERFACE_FACTORYPARAM);
		if(KYJ_CheckInterface(INTERFACE_REGPARAM)) KYJ_SwitchToInterface(INTERFACE_REGPARAM);
		if(KYJ_CheckInterface(INTERFACE_PASSWORD)) KYJ_SwitchToInterface(INTERFACE_PASSWORD);
		if(KYJ_CheckInterface(INTERFACE_PARAM)) KYJ_SwitchToInterface(INTERFACE_PARAM);
		KYJ_ExecuteInterface();
        
		if(b50MsFlag)
		{
            //更新压力和温度数据
//            KYJ_UpdateData();  //不能放在这里,会被1ms的中断打断,导致采样不准
            b50MsFlag = 0;
        }
        if(b1SecFlag)
        {
            asm("CLRWDT");
            sKYJ.nStatusTimeElapse++;
            //如果时间超过9999秒,则定格在9999秒,否则无法显示
            if(sKYJ.nStatusTimeElapse>9999) sKYJ.nStatusTimeElapse = 9999;
            sKYJ.nInterfaceTimeElapse++;
            //重新初始化下端口
//            IO_Config();
            if(sKYJ.nInterface == INTERFACE_RUNPARAM)KYJ_ShowRunParam();
            b1SecFlag=0;
            
            //是否1分钟到
            nSecCount++;
            if(nSecCount>=60)
            {
                b1MinFlag = 1;
                nSecCount = 0;
            }
        }
        if(b1MinFlag)
        {
            //如果不是停止状态,则运行时间加一
            if((sKYJ.nStatus & 0xF0) == 0) sKYJ.sFactoryParam.nTotalRunTime++;
            //如果是加载状态,则加载时间加一
            if(sKYJ.nStatus == STATUS_LOAD) sKYJ.sFactoryParam.nTotalLoadTime++;
            b1MinFlag = 0;
            
            nMinCount++;
            if(nMinCount>=60)
            {
                b1HourFlag = 1;
                nMinCount =0;
            }
            
            //每隔10分钟,重新初始化下液晶
            if((nMinCount%10) == 0 && sKYJ.nInterface == INTERFACE_MAIN)
            //每隔1分钟,重新初始化下液晶
            //if(sKYJ.nInterface == INTERFACE_MAIN)
            {
                LcmInit();
                LcmSetSongBuff(12,0,0,0,0,0,0,0); //℃
                LcmPutSongStr(1,32,BuffCharDot,1,0);
                
                LcmPutStr(104,1,(unsigned char *)"MPa");
                LcmSetSongBuff(19,0,0,0,0,0,0,0); //秒
                LcmPutSongStr(4,112,BuffCharDot,1,0);
            }
            //每隔1分钟,如果处于停止状态重新初始化下端口
            if(sKYJ.nStatus&0xF0 != 0)
            {
                IO_Config();
            }
        }
        if(b1HourFlag)
        {
            //每隔1小时,如果处于停止状态重新初始化下端口
//            if(sKYJ.nStatus&0xF0 != 0)
//            {
//                IO_Config();
//            }
            b1HourFlag = 0;
        }

		
	}
}