/************************************************************************************************** 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; }
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; } } }