/**************************************************************************************************
  Title:
    LCD test

  Version:
    0.11

  Filename:
    lcdtest-0.11.c

  Author(s):
    mkobit
    ahong

  Purpose of Program:
    Test basic initialization and displaying of data with the LCD on the PCB

  How to build:
    delay.c
    lcd_16x2.c - delay.c

  Update History:


**************************************************/
int main(void)
{
    int pbFreq;

    pbFreq = SYSTEMConfigPerformance(SYSTEM_FREQUENCY);
    DelayInit(SYSTEM_FREQUENCY);
    DelayMs(1000);  // simple delay to get ready for program
    LcdInit(lcd_pairs[0].bitnum, lcd_pairs[0].port_id,
            lcd_pairs[1].bitnum, lcd_pairs[1].port_id,
            lcd_pairs[2].bitnum, lcd_pairs[2].port_id,
            lcd_pairs[3].bitnum, lcd_pairs[3].port_id,
            lcd_pairs[4].bitnum, lcd_pairs[4].port_id,
            lcd_pairs[5].bitnum, lcd_pairs[5].port_id,
            lcd_pairs[6].bitnum, lcd_pairs[6].port_id,
            lcd_pairs[7].bitnum, lcd_pairs[7].port_id,
            lcd_pairs[8].bitnum, lcd_pairs[8].port_id,
            lcd_pairs[9].bitnum, lcd_pairs[9].port_id,
            lcd_pairs[10].bitnum, lcd_pairs[10].port_id,
            LCD_DOTS_5x8);   // Using a wide selection of pins in lab with these ports connected
    // this test will just test writing to the LCD
    LcdInstrSetDisplayMode(LCD_DISPLAY_ON, LCD_CURSOR_OFF, LCD_CURSOR_BLINK_OFF);

    while(1) {
        LcdInstrReturnHome();
        LcdDisplayData("Hello\nThere!");

        DelayMs(5000);
        LcdInstrClearDisplay();
        DelayS(5);
        LcdDisplayData("Just cleared it.\nYou see that?");
        DelayS(5);
        LcdInstrClearDisplay();
        LcdDisplayData("Cleared it again but now to test a long string to check lines");
        DelayS(5);
        LcdInstrClearDisplay();
        LcdDisplayData("Return H");
        LcdInstrSetDDRAMAddress(14);
        LcdDisplayData("END!");
        DelayS(5);
    }

    return 0;
}
/**************************************************************************************************
  Title: 
    Delay Test
    
  Version: 
    0.1
    
  Filename: 
    delaytest-0.1.c
    
  Author(s): 
    mkobit
    
  Purpose of Program: 
    Test delay protocol for each of the DelayS, DelayMs, and DelayUs
    
  How to build: 
    delay.c
    
  Update History: 
    4/30/12: Having problems testing with the peripheral bus on the PCB, need to figure out what is going on
            * Found out that core timer does not use peripheral bus, it uses system clock
    
**************************************************/
int main(void)
{
  int nc;
  unsigned int pbFreq;
  long int delayed = 0;
  char buffer[50] = "0";

  pbFreq = SYSTEMConfigPerformance(SYSTEM_FREQUENCY);
  //pbFreq = SYSTEM_FREQUENCY;
  OpenUART2(UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT, UART_RX_ENABLE | UART_TX_ENABLE,
          (pbFreq/16/BAUDRATE) - 1);
  DelayInit(SYSTEM_FREQUENCY);
  putsUART2(CLEAR_VT);
  DelayMs(1500);
  putsUART2("Beginning in 3...\r\n");
  //printf("Hi\n");
  DelayS(1);
  putsUART2("Beginning in 2...\r\n");
  DelayUs(50000);
  DelayMs(995);
  putsUART2("Beginning in 1...\n\r");
  DelayS(1);
  putsUART2("Start!\n\r");
  while(1) {
    DelayMs(770);
    DelayS(2);
    DelayUs(230000);
    DelayMs(2000);
    delayed += 5;
    itoa(buffer, delayed, 10);
    putsUART2(buffer);
    putsUART2(" s\r\n");
  }

  //putsUART2(myHelloStr);

  return nc;
}
Beispiel #3
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;
        }

		
	}
}