灵动微电子 MM32
直播中

卢松涛

13年用户 474经验值
擅长:嵌入式技术
私信 关注
[原创]

【MM32 eMiniBoard试用连载】第2个程序续(rtc、adc和内部温度)

续上篇【MM32 eMiniBoard试用连载】第2个程序(rtc和温度)
在此基础上加个adc1,2,3,5路每个每次四个数据。
在上个项目上增加HARDWAREADC目录下的adc.c和adc.h文件

无标题.jpg
在main中增加#include "adc.h"
变每秒显示时间为每分
KEY1_PRES设置时间
KEY2_PRES设置adc和内部温度
程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "uart.h"
#include "tsensor.h"
#include "rtc.h"
#include "key.h"
#include "adc.h"
//#include "exti.h"




void time_scr(void)
{
    char str[20];
                                                        sprintf(str,"%d",calendar.w_year);
//            putStr(110, 100,2, 1,str);
                                                printf(str,"");
                                                printf("_year");         
            sprintf(str,"%d",calendar.w_month);
//            putStr(150, 100,2, 1,str);
                                                printf(str,"");
                                                printf("_month");            
            sprintf(str,"%d",calendar.w_date);
//            putStr(170, 100,2, 1,str);
                                                printf(str,"");
                                                printf("_date");                                         
            switch(calendar.week)
            {
            case 0:
//                putStr(110, 120,2, 1,"Sunday   ");
                                                                printf("   Sunday   ");                                                 
                break;
            case 1:
//                putStr(110, 120,2, 1,"Monday   ");
                                                                printf("   Monday   ");                                                 
                break;
            case 2:
//                putStr(110, 120,2, 1,"Tuesday  ");
                                                                printf("   Tuesday   ");                                                 
                break;
            case 3:
//                putStr(110, 120,2, 1,"Wednesday");
                                                                printf("   Wednesday   ");                                                 
                break;
            case 4:
//                putStr(110, 120,2, 1,"Thursday ");
                                                                printf("   Thursday   ");                                                 
                break;
            case 5:
//                putStr(110, 120,2, 1,"Friday   ");
                                                                printf("   Friday   ");                                                 
                break;
            case 6:
//                putStr(110, 120,2, 1,"Saturday ");
                                                                printf("   Saturday   ");                                                 
                break;  
            }
            sprintf(str,"%d",calendar.hour);
                                                printf(str,"");                                                
                                                printf("_hour:");                                                 
//            putStr(110, 140,2, 1,str);
            
            sprintf(str,"%d",calendar.min);
                                                printf(str,"");                                
                                                printf("min:");                                                 
//            putStr(135, 140,2, 1,str);
            
            sprintf(str,"%d",calendar.sec);
                                                printf(str,"");                                
                                                printf("sec");
                                                printf("rnrn");//插入换行
//            putStr(160, 140,2, 1,str);
                                        }










void time_i(void)
{
            char str[20];

                                    u8 t,tymdhm=0,tmo=0,td=0,th=0,tmi=0,tend=0;
       
                                                u16 ty=0;
                printf( "time set:");
                printf("rnrn");//插入换行
                printf( "KEY1_PRES:print timernrn");       
                printf( "KEY2_PRES:switch set year,mon,day,hour,minrnrn");
                printf( "KEY3_PRES:plusrnrn");
                printf( "KEY4_PRES:set timernrn");

        time_scr();       
        printf( "set time:");

                switch(tymdhm)
        {                                 
        case 0://K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
                                        sprintf(str,"%d",calendar.w_year);
                                                printf(str,"");                                 
                    printf( "yearrn");
                       
            break;
        case 1:
                                        sprintf(str,"%d",calendar.w_month);
                                                printf(str,"");                        
                    printf("monthrn");
            break;
        case 2:                               
                                        sprintf(str,"%d",calendar.w_date);
                                                printf(str,"");                        
                    printf("datern");
            break;
        case 3:                               
                                        sprintf(str,"%d",calendar.hour);
                                                printf(str,"");                        
                    printf( "hourrn");
            break;
                               
        case 4:                               
                                        sprintf(str,"%d",calendar.min);
                                                printf(str,"");                
                    printf( "minrn");
            break;
        case 5:                               
                                        sprintf(str,"%d",calendar.sec);
                                                printf(str,"");                                
                    printf( "secrn");
            break;

                               
//        default:
//            delay_ms(1);       
        }        
while(1){



       


                                t=KEY_Scan(0);                //得到键值
        switch(t)
        {                                 
        case KEY1_PRES://K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
                                        tymdhm=0,ty=0,tmo=0,td=0,th=0,tmi=0;       
            time_scr();       
            break;
        case WKUP_PRES:
            LED2=!LED2;
                                                tymdhm+=1;
                                                if (tymdhm==5 )tymdhm=0;
                                                                                                        printf( "set time:");

                                                                                                        switch(tymdhm)
                                                                                                {                                 
                                                                                                case 0://K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
                                                                                                        sprintf(str,"%d",calendar.w_year);
                                                                                                                printf(str,"");                                 
                                                                                                                        printf( "yearrn");
                                                                                       
                                                                                                                break;
                                                                                                case 1:
                                                                                                        sprintf(str,"%d",calendar.w_month);
                                                                                                                printf(str,"");                        
                                                                                                                        printf("monthrn");
                                                                                                                break;
                                                                                                case 2:                               
                                                                                                        sprintf(str,"%d",calendar.w_date);
                                                                                                                printf(str,"");                        
                                                                                                                        printf("datern");
                                                                                                                break;
                                                                                                case 3:                               
                                                                                                        sprintf(str,"%d",calendar.hour);
                                                                                                                printf(str,"");                        
                                                                                                                        printf( "hourrn");
                                                                                                                break;
                                                                                               
                                                                                                case 4:                               
                                                                                                        sprintf(str,"%d",calendar.min);
                                                                                                                printf(str,"");                
                                                                                                                        printf( "minrn");
                                                                                                                break;
                                                                                                case 5:                               
                                                                                                        sprintf(str,"%d",calendar.sec);
                                                                                                                printf(str,"");                                
                                                                                                                        printf( "secrn");
                                                                                                                break;

                                                                                               
                                                                //        default:
                                                                //            delay_ms(1);       
                                                                                                }        
            break;
        case KEY3_PRES:
            LED3=!LED3;


                                                                                                switch(tymdhm)
                                                                                        {                                 
                                                                                        case 0://K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
                                                                                                ty+=1;
                                                                                                sprintf(str,"%d",calendar.w_year+ty);
                                                                                                                printf( str,"year");
                                                                                printf("year");
                                                                                                        break;
                                                                                        case 1:
                                                                                                tmo+=1;
                                                                                                sprintf(str,"%d",calendar.w_month+tmo);
                                                                                                                printf( str,"month");
                                                                                        printf( "month");
                                                                                                        break;
                                                                                        case 2:
                                                                                                td+=1;
                                                                                                sprintf(str,"%d",calendar.w_date+td);
                                                                                                                printf( str,"date");
                                                                                        printf( "date");
                                                                                                        break;
                                                                                        case 3:
                                                                                                th+=1;
                                                                                                sprintf(str,"%d",calendar.hour+th);
                                                                                                                printf( str,"hour");
                                                                                        printf( "hour");
                                                                                                        break;
                                                                                       
                                                                                        case 4:
                                                                                                tmi+=1;
                                                                                                sprintf(str,"%d",calendar.min+tmi);
                                                                                                                printf( str,"min");
                                                                                        printf( ":min:");
                                                                                                        break;
                                                                                        case 5:                               
                                                                                                sprintf(str,"%d",calendar.sec);
                                                                                                                printf( str,"sec");
                                                                                                        break;

                                                                                       
                                                        //        default:
                                                        //            delay_ms(1);       
                                                                                        }
                               
            break;
        case KEY4_PRES:
                                        ty+=calendar.w_year;
                                        tmo+=calendar.w_month;
                                        while((tmo-12)>0)tmo-=12;
                                        td+=calendar.w_date;

                                                                        switch(tmo)
                                                                {                                 
                                                                                case 1:case 3:case 5:case 7:case 8:case 10:case 12://K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
                                                                        while((td-31)>0)td-=31;
                                                                                break;
                                                                                case 4:case 6:case 9:case 11:
                                                                        while((td-30)>0)td-=30;
                                                                                break;
                                                                case 2:                               
                                                                        while((td-29)>0)td-=29;
                                                                                break;


                                                               
                                //        default:
                                //            delay_ms(1);       
                                                                }


                                        th+=calendar.hour;
                                        while((th-24)>0)th-=24;                       
                                        tmi+=calendar.min;
                                        while((tmi-60)>0)tmi-=60;       
                                        RTC_Set(ty,tmo,td,th,tmi,0);
                                                                tend=1;
//            return 0;
            break;
//        default:
//            delay_ms(1);       
        }
          if(tend==1)break;
                        }
   

}




//开发板范例代码3
//串口实验   
void KEY2_main(void)
{       
                printf( "adc set:");
                printf("rnrn");//插入换行
                printf( "KEY1_PRES:adc1,3,5路采集rnrn");       
                printf( "KEY2_PRES:adc2路采集rnrn");
                printf( "KEY3_PRES:Temperature采集 rnrn");
                printf( "KEY4_PRES:回主菜单rnrn");


//    unsigned char tem[20];


//    initLCD();
//   
//    printf( "MM32  Board");
//                printf("rnrn");//插入换行       
while(1){

          unsigned char ucFlag=0;

    unsigned int uiADData=0;
    float fValue = 0;
    u16 average=0;

    u8 i,t,tend;

       


                                t=KEY_Scan(0);                //得到键值
        switch(t)
        {                                 
        case KEY1_PRES://K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
                                        LED1=!LED1;       
//            time_scr();       
                               
                                                                                ADC1_SingleChannel( ADC_Channel_1);
                                                                //    initLCD();
                                                                //   
                                                                //    putStr(110, 20,2,1, "MM32 Dev Board");
                                                                //    putStr(110, 40,2,1, "ADC TEST");
                                                                //    putStr(110, 60,2,1, "@MindMotion");
                                                                //    putStr(110, 80,2,1, "2016/09/02");
                                                                //    putStr(110, 120,2,1, "ADC_CH1_VAL:");
                                                                //    putStr(110, 140,2,1, "ADC_CH1_VOL:0.000V");
                                                                               
                                                                                for(i=0;i<4;i++)
                                                                                {
                                                                                                /*读取当前转换数据*/
                                                                                                ucFlag=ADC1_SingleChannel_Get( ADC_Channel_1, &uiADData);  
                                                                                                if(ucFlag==1)
                                                                                                {
                                                                                                                ucFlag=0;
                                                                                                                fValue = ((float)uiADData/4096)*3.3;
                                                                                                printf( "ADC_1_VAL:");
                                                                                                printf("%d",uiADData);
                                                                                                printf("rn");//插入换行                       
                                                                                                printf( "ADC_1_VOL:");
                                                                                                printf("%.3f",fValue);
                                                                                                printf("rn");//插入换行                                                                                                                       
//                                                                                                                sprintf(val,"%d",uiADData);
//                                                                                                                sprintf(vol,"%.3f",fValue);
                                                                //            putStr(205, 120,2,1, "    ");
                                                                //            putStr(205, 120,2,1, val);
                                                                //            putStr(205, 140,2,1, vol);
                                                                                                                delay_ms(300);   
                                                                                                }
                                                                                }  
                                                                                ADC1_SingleChannel( ADC_Channel_5);
                                                                //    initLCD();
                                                                //   
                                                                //    putStr(110, 20,2,1, "MM32 Dev Board");
                                                                //    putStr(110, 40,2,1, "ADC TEST");
                                                                //    putStr(110, 60,2,1, "@MindMotion");
                                                                //    putStr(110, 80,2,1, "2016/09/02");
                                                                //    putStr(110, 120,2,1, "ADC_CH1_VAL:");
                                                                //    putStr(110, 140,2,1, "ADC_CH1_VOL:0.000V");
                                                                               
                                                                                for(i=0;i<4;i++)
                                                                                {
                                                                                                /*读取当前转换数据*/
                                                                                                ucFlag=ADC1_SingleChannel_Get( ADC_Channel_5, &uiADData);  
                                                                                                if(ucFlag==1)
                                                                                                {
                                                                                                                ucFlag=0;
                                                                                                                fValue = ((float)uiADData/4096)*3.3;
                                                                                                printf( "ADC_3_VAL:");
                                                                                                printf("%d",uiADData);
                                                                                                printf("rn");//插入换行                       
                                                                                                printf( "ADC_3_VOL:");
                                                                                                printf("%.3f",fValue);
                                                                                                printf("rn");//插入换行                                                                                                                       
//                                                                                                                sprintf(val,"%d",uiADData);
//                                                                                                                sprintf(vol,"%.3f",fValue);
                                                                //            putStr(205, 120,2,1, "    ");
                                                                //            putStr(205, 120,2,1, val);
                                                                //            putStr(205, 140,2,1, vol);
                                                                                                                delay_ms(300);   
                                                                                                }
                                                                                }  
                                                                                ADC1_SingleChannel( ADC_Channel_7);
                                                                //    initLCD();
                                                                //   
                                                                //    putStr(110, 20,2,1, "MM32 Dev Board");
                                                                //    putStr(110, 40,2,1, "ADC TEST");
                                                                //    putStr(110, 60,2,1, "@MindMotion");
                                                                //    putStr(110, 80,2,1, "2016/09/02");
                                                                //    putStr(110, 120,2,1, "ADC_CH1_VAL:");
                                                                //    putStr(110, 140,2,1, "ADC_CH1_VOL:0.000V");
                                                                               
                                                                                for(i=0;i<4;i++)
                                                                                {
                                                                                                /*读取当前转换数据*/
                                                                                                ucFlag=ADC1_SingleChannel_Get( ADC_Channel_7, &uiADData);  
                                                                                                if(ucFlag==1)
                                                                                                {
                                                                                                                ucFlag=0;
                                                                                                                fValue = ((float)uiADData/4096)*3.3;
                                                                                                printf( "ADC_5_VAL:");
                                                                                                printf("%d",uiADData);
                                                                                                printf("rn");//插入换行                       
                                                                                                printf( "ADC_5_VOL:");
                                                                                                printf("%.3f",fValue);
                                                                                                printf("rn");//插入换行                                                                                                                       
//                                                                                                                sprintf(val,"%d",uiADData);
//                                                                                                                sprintf(vol,"%.3f",fValue);
                                                                //            putStr(205, 120,2,1, "    ");
                                                                //            putStr(205, 120,2,1, val);
                                                                //            putStr(205, 140,2,1, vol);
                                                                                                                delay_ms(300);   
                                                                                                }
                                                                                }                                                                                 
                               
            break;
        case WKUP_PRES:
            LED2=!LED2;

                               
                                                                                ADC1_SingleChannel( ADC_Channel_4);
                                                                //    initLCD();
                                                                //   
                                                                //    putStr(110, 20,2,1, "MM32 Dev Board");
                                                                //    putStr(110, 40,2,1, "ADC TEST");
                                                                //    putStr(110, 60,2,1, "@MindMotion");
                                                                //    putStr(110, 80,2,1, "2016/09/02");
                                                                //    putStr(110, 120,2,1, "ADC_CH1_VAL:");
                                                                //    putStr(110, 140,2,1, "ADC_CH1_VOL:0.000V");
                                                                               
                                                                                for(i=0;i<4;i++)
                                                                                {
                                                                                                /*读取当前转换数据*/
                                                                                                ucFlag=ADC1_SingleChannel_Get( ADC_Channel_4, &uiADData);  
                                                                                                if(ucFlag==1)
                                                                                                {
                                                                                                                ucFlag=0;
                                                                                                                fValue = ((float)uiADData/4096)*3.3;
                                                                                                printf( "ADC_2_VAL:");
                                                                                                printf("%d",uiADData);
                                                                                                printf("rn");//插入换行                       
                                                                                                printf( "ADC_2_VOL:");
                                                                                                printf("%.3f",fValue);
                                                                                                printf("rn");//插入换行                                                                                                                       
//                                                                                                                sprintf(val,"%d",uiADData);
//                                                                                                                sprintf(vol,"%.3f",fValue);
                                                                //            putStr(205, 120,2,1, "    ");
                                                                //            putStr(205, 120,2,1, val);
                                                                //            putStr(205, 140,2,1, vol);
                                                                                                                delay_ms(300);   
                                                                                                }
                                                                                }                                   
                               
                               

            break;
        case KEY3_PRES:
            LED3=!LED3;
                                                 T_Adc_Init();                                  //ADC初始化         

                                                                                printf( "Temperature TEST");
                                                                                printf("rnrn");//插入换行               
                                                                                printf( "@MindMotion");
                                                                                printf("rnrn");//插入换行               

                                                                                printf( "TEMP_VAL:");
                                                                                printf( "C");
                                                                                printf("rnrn");//插入换行                       

                                                                                                for(i=0;i<10;i++)
                                                                                                {
                                                                                                                T_Get_Adc_Average(ADC_Channel_8,&uiADData);
                                                                                                                average+=uiADData;
                                                                                                                if(i==9)
                                                                                                                                average=average/10;
                                                                                                }
                                                                                                fValue=(float)average*(3.3/4096);                //电压值
                                                                                                fValue=(fValue-1.5)/0.00478+25;        //转换为温度值          
                                                                                                printf( "TEMP_VAL:");
                                                                                                printf("%.2f",fValue);
                                                                                                printf("rnrn");//插入换行
                                                                //        putStr(185, 120,2,1,tem);
                                                                //        delay_ms(1250);
                                                                //        average=0;


                               
            break;
        case KEY4_PRES:
            LED4=!LED4;                                       




                                                                tend=1;
//            return 0;
            break;
//        default:
//            delay_ms(1);       
        }
          if(tend==1)break;
                        }
       
       


        
   
   
}



////////////////////////////////////////////////////////////////////////////////
int main(void)
{
    u8 t,t1;       

    delay_init();                     //延时函数初始化          
    uart_initwBaudRate(9600);                 //串口初始化为9600
    LED_Init();                                //初始化与LED连接的硬件接口
    KEY_Init();                  //初始化与按键连接的硬件接口       
            T_Adc_Init();                                  //ADC初始化            
//    initLCD();
//   
//    putStr(110, 20,2, 1, "MM32 Dev Board");
//    putStr(110, 40,2, 1,  "RTC TEST");
//    putStr(110, 60,2, 1,  "@MindMotion");
//    putStr(110, 80,2, 1,  "2016/09/02");
    printf( "MM32  Board");
                printf("rn");//插入换行       
    while(RTC_Init())                //RTC初始化        ,一定要初始化成功
    {
//        putStr(110, 100,2, 1,"RTC ERROR!   ");
        delay_ms(800);
                                        printf("RTC Trying...");
                       
//        putStr(110, 100,2, 1,"RTC Trying...");
    }
//                    EXTIX_Init();
                                printf("rn");//插入换行       
//    putStr(110, 100,2, 1,"    -  -     ");
//    putStr(110, 140,2, 1,"  :  :  ");
    while(1)
    {               
                          t=KEY_Scan(0);                //得到键值
//                        if (t==0){}else{printf("%d",t);}//插入换行        }
//                        printf("          KEY down rnrn");
        switch(t)
        {                                 
        case KEY1_PRES://K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
                                                printf("KEY1_PRES down rn");
                                                printf("KEY1_PRES ");
            time_i();
            break;
        case WKUP_PRES:
                                                printf("KEY2_PRES down rn");
                                                KEY2_main();
            LED2=!LED2;
            break;
        case KEY3_PRES:       
                                                printf("KEY3_PRES down rn");                                       
            LED3=!LED3;
            break;
        case KEY4_PRES:       
                                                printf("KEY4_PRES down rn");                                       
            LED4=!LED4;
            break;
//        default:
//            delay_ms(1);       
        }
                               
                               
                               
        if(t1!=calendar.min)
        {
            t1=calendar.min;
                                                time_scr();

            LED1=!LED1;
        }       
//        delay_ms(1);                                                                  
    }        
//    while(1);       
}

增加部分图片
无标题.jpg
adc2
无标题1.jpg
adc1,3,5


无标题1.jpg


内部温度

更多回帖

发帖
×
20
完善资料,
赚取积分