NuMicro® NUC131系列特色為寬電壓工作范圍2.5V至5.5V, 工作溫度: -40℃至105℃, 內建22.1184MHz高精度晶振(1%準確度)。 備有豐富的外設, 如CAN2.0A/B, 定時器, 看門狗定時器,多組UART, SPI, I2C, PWM, 12位ADC, 模擬比較器等.提供多種包裝 LQFP48, LQFP64。
1.lcd段碼屏顯示
2.傳感器部分:溫濕度 SHT31 PM2.5: 四方光電 PM2008 CO2 : CM1106 TVOC傳感器
3.4路觸摸按鍵: 經典算法 : 長按 短按 持續按鍵 復合按鍵
5,慶科wifi模塊 串口通信
6.鋰電池 充電 升壓 二合一
7.設備聯控:采用標準的MOSBUS RTU 協議
51hei截圖_20190810170256.png (63.58 KB, 下載次數: 90)
下載附件
2019-8-10 17:03 上傳
單片機源程序如下:
- /**************************************************************************//**
- * @file main.c
- * @version V2.00
- * $Revision: 5 $
- * $Date: 15/01/16 11:44a $
- * @brief Implement timer counting in periodic mode.
- * @note
- * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
- ******************************************************************************/
- #include "define.H"
- #define PLL_CLOCK 50000000
- /*---------------------------------------------------------------------------------------------------------*/
- /* Global Interface Variables Declarations */
- /*---------------------------------------------------------------------------------------------------------*/
- volatile uint32_t g_au32TMRINTCount[4] = {0};
- uint8_t PwmIO_count;
- uint16_t PM_value;
- uint16_t CO2_value;
- uint16_t HCHO_value;
- #if 0
- /*
- V003 2019-03-02
- 1,Power on and power off button change to touch leave control,
- perviously is short press control.
- 2.WIFI COM temperture,perviously version PCBA send indoor temperture,
- modified to send inlet air temperature.
-
- V009 2019-05-25
- 1.Add DS1302 RTC
- 2.Adjust the GPIO with 20190325 schematic
- V010 2019-05-29
- 1.Set PM2.5 value 999 up limit
- 2.Modify the button sequence except child lock.
- */
- #endif
- /**
- * @brief Timer0 IRQ
- *
- * @param None
- *
- * @return None
- *
- * @details The Timer0 default IRQ, declared in startup_NUC131.s.
- */
- void TMR0_IRQHandler(void)
- {
- if(TIMER_GetIntFlag(TIMER0) == 1)
- {
- /* Clear Timer0 time-out interrupt flag */
- TIMER_ClearIntFlag(TIMER0);
- if(Time.t_1ms==0)
- {
- Time.t_1ms=10;
- F_10ms=1;
- Time_handler();
- }
- Time.t_1ms--;
- F_1ms=1;
- if (++PwmIO_count > 14)
- PwmIO_count = 0;
- if (PwmIO_set > PwmIO_count)
- LedCom_pin = 1;
- else
- LedCom_pin = 0;
- // LedCom_pin=1;
- }
- }
- /**
- * @brief Timer1 IRQ
- *
- * @param None
- *
- * @return None
- *
- * @details The Timer1 default IRQ, declared in startup_NUC131.s.
- */
- void TMR1_IRQHandler(void)
- {
- if(TIMER_GetIntFlag(TIMER1) == 1)
- {
- /* Clear Timer1 time-out interrupt flag */
-
- g_au32TMRINTCount[1]++;
- }
- }
- /**
- * @brief Timer2 IRQ
- *
- * @param None
- *
- * @return None
- *
- * @details The Timer2 default IRQ, declared in startup_NUC131.s.
- */
- void TMR2_IRQHandler(void)
- {
- if(TIMER_GetIntFlag(TIMER2) == 1)
- {
- /* Clear Timer2 time-out interrupt flag */
- TIMER_ClearIntFlag(TIMER2);
- TIMER_ClearIntFlag(TIMER1);
- if(Buzz.B_Buzzer_Model)
- {
- if(Buzz_Frec_pin)
- Buzz_Frec_pin=0;
- else
- Buzz_Frec_pin=1;
- }
- }
- }
- /**
- * @brief Timer3 IRQ
- *
- * @param None
- *
- * @return None
- *
- * @details The Timer3 default IRQ, declared in startup_NUC131.s.
- */
- void TMR3_IRQHandler(void)
- {
- if(TIMER_GetIntFlag(TIMER3) == 1)
- {
- /* Clear Timer3 time-out interrupt flag */
- TIMER_ClearIntFlag(TIMER3);
- g_au32TMRINTCount[3]++;
- }
- }
- #if 0
- void SYS_Init(void)
- {
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init System Clock */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Enable HIRC clock */
- CLK_EnableXtalRC(CLK_PWRCON_IRC22M_EN_Msk);
- /* Waiting for HIRC clock ready */
- CLK_WaitClockReady(CLK_CLKSTATUS_IRC22M_STB_Msk);
- /* Switch HCLK clock source to HIRC */
- CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));
- /* Enable HXT */
- // CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);
- /* Waiting for clock ready */
- // CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);
- /* Set core clock as PLL_CLOCK from PLL and SysTick source to HCLK/2*/
- CLK_SetCoreClock(PLL_CLOCK);
- CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLK_S_HCLK_DIV2);
- /* Enable peripheral clock */
- CLK_EnableModuleClock(UART0_MODULE);
- // CLK_EnableModuleClock(UART4_MODULE);
- CLK_EnableModuleClock(TMR0_MODULE);
- CLK_EnableModuleClock(TMR1_MODULE);
- CLK_EnableModuleClock(TMR2_MODULE);
- CLK_EnableModuleClock(TMR3_MODULE);
- /* Peripheral clock source *///CLK_CLKSEL1_UART_S_PLL
- CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1));
- // CLK_SetModuleClock(UART4_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1));
- CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HIRC, 0);
- CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR0_S_HIRC, 0);
- CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL1_TMR2_S_HIRC, 0);
- CLK_SetModuleClock(TMR3_MODULE, CLK_CLKSEL1_TMR3_S_HIRC, 0);
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init I/O Multi-function */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Set PB multi-function pins for UART0 RXD, TXD */
- /* Set GPB multi-function pins for UART0 RXD(PB.0) and TXD(PB.1) */
- SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
- SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;
-
- // SYS->GPB_MFP &= ~(SYS_GPC_MFP_PC7_Msk | SYS_GPC_MFP_PC6_Msk);
- // SYS->GPB_MFP |= SYS_GPC_MFP_PC7_UART4_RXD | SYS_GPC_MFP_PC6_UART4_TXD;
- }
- #endif
- void SYS_Init(void)
- {
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init System Clock */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Enable Internal RC 22.1184MHz clock */
- CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
- /* Waiting for Internal RC clock ready */
- CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
- /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
- CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));
- /* Enable external XTAL 12MHz clock */
- // CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);
- /* Waiting for external XTAL clock ready */
- // CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);
- /* Set core clock as PLL_CLOCK from PLL */
- CLK_SetCoreClock(PLL_CLOCK);
- /* Enable UART module clock */
- CLK_EnableModuleClock(UART0_MODULE);
- CLK_EnableModuleClock(UART1_MODULE);
- CLK_EnableModuleClock(UART2_MODULE);
- CLK_EnableModuleClock(UART3_MODULE);
- CLK_EnableModuleClock(UART4_MODULE);
- CLK_EnableModuleClock(TMR0_MODULE);
- CLK_EnableModuleClock(TMR1_MODULE);
- CLK_EnableModuleClock(TMR2_MODULE);
- CLK_EnableModuleClock(TMR3_MODULE);
- /* Select UART module clock source */
- // CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));
- /* Select UART module clock source */
- CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1));
- CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1));
- CLK_SetModuleClock(UART2_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1));
- CLK_SetModuleClock(UART3_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1));
- CLK_SetModuleClock(UART4_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1));
-
- CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HIRC, 0);
- CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR0_S_HIRC, 0);
- CLK_SetModuleClock(TMR2_MODULE, CLK_CLKSEL1_TMR2_S_HIRC, 0);
- CLK_SetModuleClock(TMR3_MODULE, CLK_CLKSEL1_TMR3_S_HIRC, 0);
-
- /* Enable ADC module clock */
- CLK_EnableModuleClock(ADC_MODULE);
- /* ADC clock source is 22.1184MHz, set divider to 7, ADC clock is 22.1184/7 MHz */
- CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init I/O Multi-function */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Set GPB multi-function pins for UART0 RXD(PB.0) and TXD(PB.1) */
- SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
- SYS->GPB_MFP |= SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD;
- // SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB4_Msk | SYS_GPB_MFP_PB5_Msk);
- // SYS->GPB_MFP |= SYS_GPB_MFP_PB4_UART1_RXD | SYS_GPB_MFP_PB5_UART1_TXD;
- SYS->GPB_MFP &= ~( SYS_GPB_MFP_PB5_Msk);
- SYS->GPB_MFP |= SYS_GPB_MFP_PB5_UART1_TXD;
- SYS->GPD_MFP &= ~(SYS_GPD_MFP_PD14_Msk | SYS_GPD_MFP_PD15_Msk);
- SYS->GPD_MFP |= SYS_GPD_MFP_PD14_UART2_RXD | SYS_GPD_MFP_PD15_UART2_TXD;
- // SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA3_Msk | SYS_GPA_MFP_PA2_Msk);
- // SYS->GPA_MFP |= SYS_GPA_MFP_PA3_UART3_RXD | SYS_GPA_MFP_PA2_UART3_TXD;
- SYS->ALT_MFP4 &= ~(SYS_ALT_MFP4_PA5_Msk | SYS_ALT_MFP4_PA6_Msk);
- SYS->ALT_MFP4 |= SYS_ALT_MFP4_PA5_UART3_RXD | SYS_ALT_MFP4_PA6_UART3_TXD;
- SYS->GPA_MFP &= ~(SYS_GPA_MFP_PA5_Msk | SYS_GPA_MFP_PA6_Msk);
- SYS->GPA_MFP |= SYS_GPA_MFP_PA5_UART3_RXD | SYS_GPA_MFP_PA6_UART3_TXD;
-
- SYS->GPC_MFP &= ~(SYS_GPC_MFP_PC7_Msk | SYS_GPC_MFP_PC6_Msk);
- SYS->GPC_MFP |= SYS_GPC_MFP_PC7_UART4_RXD | SYS_GPC_MFP_PC6_UART4_TXD;
- /*
- SYS->GPF_MFP &= ~(SYS_GPF_MFP_PF0_Msk | SYS_GPF_MFP_PF1_Msk);
- SYS->GPF_MFP |= SYS_GPF_MFP_PF0_GPIO | SYS_GPF_MFP_PF1_GPIO; */
- /* Configure the GPA0 - GPA3 ADC analog input pins */
- SYS->GPA_MFP &= ~( SYS_GPA_MFP_PA7_Msk ) ;
- SYS->GPA_MFP |= SYS_GPA_MFP_PA7_ADC7;
- }
- void GPIO_Init(void)
- {
- #if 0
- GPIO_SetMode(PC, BIT6, GPIO_PMD_OUTPUT);//UART4 TX
- PC6=0;
- GPIO_SetMode(PA, BIT6, GPIO_PMD_OUTPUT);//UART4 TX
- PA6=0;
- GPIO_SetMode(PB, BIT1, GPIO_PMD_OUTPUT);//UART4 TX
- PB1=0;
- #endif
- GPIO_SetMode(PA,BIT1,GPIO_PMD_OUTPUT);//Sensor power
- GPIO_SetMode(PA,BIT12,GPIO_PMD_OUTPUT);//SW485
- GPIO_SetMode(PA,BIT13,GPIO_PMD_OUTPUT);//BackLight
- GPIO_SetMode(PA,BIT2,GPIO_PMD_INPUT);//KEY
- GPIO_SetMode(PA,BIT3,GPIO_PMD_INPUT);
- GPIO_SetMode(PA,BIT4,GPIO_PMD_INPUT);
-
- GPIO_SetMode(PA,BIT14,GPIO_PMD_OUTPUT);//Led Com
- GPIO_SetMode(PC,BIT0,GPIO_PMD_OUTPUT);//Led
- GPIO_SetMode(PC,BIT1,GPIO_PMD_OUTPUT);//Led
- GPIO_SetMode(PC,BIT2,GPIO_PMD_OUTPUT);//Led
- GPIO_SetMode(PC,BIT3,GPIO_PMD_OUTPUT);//Led
-
- GPIO_SetMode(PB,BIT3,GPIO_PMD_OUTPUT);//Buzz`
- GPIO_SetMode(PD,BIT6,GPIO_PMD_OUTPUT);//Buzz
- GPIO_SetMode(PD,BIT7,GPIO_PMD_OUTPUT);//Sensor power
- GPIO_SetMode(PB,BIT2,GPIO_PMD_OUTPUT);//WIFI power
- GPIO_SetMode(PB,BIT12,GPIO_PMD_INPUT);//CHG
-
- GPIO_SetMode(PB,BIT15,GPIO_PMD_OUTPUT);//1302
- GPIO_SetMode(PF,BIT1,GPIO_PMD_OUTPUT);//1302
- GPIO_SetMode(PF,BIT0,GPIO_PMD_OUTPUT);//1302
- WIFI_EN();
- PA14=1;
-
- Led_pin1 = 0;
- Led_pin2 = 0;
- Led_pin3 = 0;
- Led_pin4 = 0;
- // PD7 = 1;
-
- /* Led_pin1=0;
- Led_pin2=0;
- Led_pin3=0;
- Led_pin4=0; */
-
- //GPIO_SetMode(PB,BIT12,GPIO_PMD_OUTPUT);//TEST`
- SW485_DIS();
- }
- uint8_t Adc_Cnt;
- uint32_t Adc_buffer2;
- uint32_t Adc_buffer1;
- uint16_t VBatMv=0;
- void ADC_Init(void)
- {
- ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_CONTINUOUS, 0x80);
- /* Power on ADC module */
- ADC_POWER_ON(ADC);
- /* Clear the A/D interrupt flag for safe */
- ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
-
- /* Start A/D conversion */
- ADC_START_CONV(ADC);
- }
- void ADC_Scan(void)
- {
- /* Clear the A/D interrupt flag for safe */
- // ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
- /* Start A/D conversion */
- // ADC_START_CONV(ADC);
-
- /* Wait conversion done */
- // while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT));
- /* Clear the A/D interrupt flag for safe */
- ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
- Adc_buffer1+=ADC_GET_CONVERSION_DATA(ADC,7);
-
- if(++Adc_Cnt<149)
- return;
- Adc_buffer2=Adc_buffer1;
- Adc_Cnt=0;
- Adc_buffer1=0;
-
- if(VBatMv==0)
- {
- VBatMv=Adc_buffer2/64;
- }
- else
- {
- VBatMv+=Adc_buffer2/64;
- VBatMv/=2;
- }
- }
- /*---------------------------------------------------------------------------------------------------------*/
- /* MAIN function */
- /*---------------------------------------------------------------------------------------------------------*/
- int main(void)
- {
- volatile uint32_t u32InitCount;
- /* Unlock protected registers */
- SYS_UnlockReg();
- /* Init System, peripheral clock and multi-function I/O */
- SYS_Init();
- /* Lock protected registers */
- SYS_LockReg();
- /* Init UART0 for printf */
- UART0_Init();
- UART1_Init();
- UART2_Init();
- UART3_Init();
- UART4_Init();
-
- GPIO_Init();
- TVOC_init();
- IIC_Init();
- InitCHM_01A();
- PA13=1;
- Rtc_init();
- Init_DS1302();
- /* Open Timer0 in periodic mode, enable interrupt and 1 interrupt tick per second */
- TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 1000);
- TIMER_EnableInt(TIMER0);
- /* Open Timer1 in periodic mode, enable interrupt and 2 interrupt ticks per second */
- TIMER_Open(TIMER1, TIMER_PERIODIC_MODE, 2);
- TIMER_EnableInt(TIMER1);
- /* Open Timer2 in periodic mode, enable interrupt and 4 interrupt ticks per second */
- TIMER_Open(TIMER2, TIMER_PERIODIC_MODE, 4);
- TIMER_EnableInt(TIMER2);
- /* Open Timer3 in periodic mode, enable interrupt and 8 interrupt ticks per second */
- TIMER_Open(TIMER3, TIMER_PERIODIC_MODE, 8);
- TIMER_EnableInt(TIMER3);
- /* Enable Timer0 ~ Timer3 NVIC */
- NVIC_EnableIRQ(TMR0_IRQn);
- NVIC_EnableIRQ(TMR1_IRQn);
- NVIC_EnableIRQ(TMR2_IRQn);
- NVIC_EnableIRQ(TMR3_IRQn);
- /* Start Timer0 ~ Timer3 counting */
- TIMER_Start(TIMER0);
- TIMER_Start(TIMER1);
- TIMER_Start(TIMER2);
- TIMER_Start(TIMER3);
- SetTemp=25;
- SetHum=50;
- ADC_Init();
- Init1729();
- WriteDDRAM();
- WriteDDRAM();
- // WriteDDRAM();
- // Buzz.B_Buzzer_Model=1;
- UART_ClearIntFlag(UART1, UART_ISR_DATWKIF_Msk | UART_ISR_CTSWKIF_Msk | UART_ISR_BUF_ERR_INT_Msk|
- UART_ISR_MODEM_INT_Msk| UART_ISR_RLS_INT_Msk);
-
- UART_EnableInt(UART0, (UART_IER_RDA_IEN_Msk));
- UART_EnableInt(UART1, (UART_IER_RDA_IEN_Msk));
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
Airbox_190525.7z
(2.17 MB, 下載次數: 34)
2019-8-10 18:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|