真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于arm的多路溫度采集控制系統(tǒng)(4)菜單界面

嵌入式項(xiàng)目實(shí)踐–多路溫度采集控制系統(tǒng)(4)菜單界面

菜單界面

基于arm的多路溫度采集控制系統(tǒng)(4)菜單界面

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的岢嵐網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

菜單顯示

   	printf("\nTC9000 濕溫度控制系統(tǒng)V1.0");
        printf("\n    [1] 報(bào)警設(shè)置");
        printf("\n    [2] 輸出控制設(shè)置"); 
        printf("\n    [3] 濕度/溫度查詢");
        printf("\n    [4] 系統(tǒng)設(shè)置");
        printf("\n    [x] 退出系統(tǒng)");

接收命令行輸入

        printf(shell_s);
        fflush(stdout);
        get_line(cmd);

輸入選擇處理

        switch(cmd[0]){
            case '1':
                menu_alarm(cmd);
                break;
            case '2':
            ...
        }

消息隊(duì)列

獲取隊(duì)列ID

id = msgget((key_t)4455,0666|IPC_CREAT);

向隊(duì)列發(fā)送消息

    struct st_msg cmd;
    cmd.index = index;
    cmd.dat = dat;
    if((msgid=get_msgid_menu()) < 0)
        return -1;
    if(msgsnd(msgid,(void*)&cmd,sizeof(int),0)==-1)
        return -1;

消息類型處理

#define TEMP_SMG_INDEX_BASE 10
#define UPDATE_TIME_SMG_INDEX 4


msg_type = TEMP_SMG_INDEX_BASE+channel;
menu_send_update(msg_type,g_dev->temp_max[channel]);

消息隊(duì)列相關(guān)命令

#ipcs -q //顯示消息隊(duì)列
#ipcrm -q  //刪除指定id隊(duì)列

菜單界面代碼

菜單程序頭文件

#ifndef _TC9000_SYS_IPC_H
#define _TC9000_SYS_IPC_H

#include "config.h"

//消息隊(duì)列接收時索引值
#define TEMP_SMG_INDEX_BASE 10
#define WEB_SMG_INDEX 2
#define WEB_UPDATE_SMG_INDEX 3
#define UPDATE_TIME_SMG_INDEX 4

struct st_msg{
    long int index;
    int dat;
};

struct st_msg_dev{
    long int index;
    struct st_sys dev;
};

#endif

菜單界面程序

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 

#include "sys_ipc.h"
#include "config.h"


int menu_alarm(char * cmd);//報(bào)警功能菜單
int get_line(char *cmd);//獲取命令行輸入

struct st_sys g_dev[1];//全局變量

char shell_s[]="\nG9000 shell>$: ";//命令行提示符號


//同菜單進(jìn)程通信的隊(duì)列,key=4455
int get_msgid_menu(void)
{
    int id = -1;
    id = msgget((key_t)4455,0666|IPC_CREAT);
    if(id == -1){
        printf("msgget error\n");
        exit(1);
    }
    return id;
}

//向主控程序發(fā)送設(shè)置的數(shù)據(jù)
/*============================================
函數(shù)名稱:menu_send_update
功能:向主控程序發(fā)送設(shè)置的數(shù)據(jù)
參數(shù):long int 消息類型 int 消息數(shù)據(jù)
返回值:return 0 返回主菜單
============================================*/
int menu_send_update(long int index,int dat)
{
    int msgid;
    struct st_msg cmd;
    cmd.index = index;
    cmd.dat = dat;
    if((msgid=get_msgid_menu()) < 0)
        return -1;
    if(msgsnd(msgid,(void*)&cmd,sizeof(int),0)==-1)
        return -1;
    return 0;
}

/*============================================
函數(shù)名稱:menu_alarm
功能:溫濕度報(bào)警設(shè)置菜單
參數(shù):char* cmd 用戶輸入的命令
返回值:return 0 返回主菜單
============================================*/
int menu_alarm(char* cmd)
{
    int channel;
    long int msg_type;

    while(1){
        printf("\n    [1] 檢測間隔時間(5-300s)");
        printf("\n    [2] 溫度上限報(bào)警值(40-90℃)");
        printf("\n    [3] 溫度下限報(bào)警值(-20-5℃)");
        printf("\n    [4] 溫度報(bào)警回差設(shè)置(1-10℃)");
        printf("\n    [x] 返回主菜單");
        printf(shell_s);
        fflush(stdout);
        get_line(cmd);

        switch(cmd[0]){
            case '1':
                printf("當(dāng)前檢測間隔時間:%d\n",g_dev->update_time);
                printf("請輸入新值:");
                fflush(stdout);
                get_line(cmd);

                g_dev->update_time= atoi(cmd);
                msg_type = UPDATE_TIME_SMG_INDEX
                menu_send_update(msg_type,g_dev->update_time);
                break;
            case '2':
                printf("\n    請選擇傳感器編號[1] [2] [3] [4] :");
                fflush(stdout);
                get_line(cmd);
                channel = atoi(cmd)-1;

                printf("當(dāng)前溫度上限報(bào)警值:%d\n",g_dev->temp_max[channel]);
                printf("請輸入新值:");
                fflush(stdout);
                get_line(cmd);

                g_dev->temp_max[channel]= atoi(cmd);
                msg_type = TEMP_SMG_INDEX_BASE+channel;
                menu_send_update(msg_type,g_dev->temp_max[channel]);
                break;
            case 'x':
                return 0;
                break;              
            default:
                printf("輸入選項(xiàng)錯誤!\n");
                break;
        }   
    }
    return 1;
}



//命令行輸入處理
int get_line(char *cmd)
{
    int i=0;
    char temp;
    memset(cmd,0,sizeof(cmd));  

    while (1) { 
        temp = getchar();
        cmd[i]=temp;
            if(cmd[i]==13 || cmd[i] == 10){
                        cmd[i]=0;
                        break;
        }
        fflush(stdout);
        i++;
    }
    return 0;
}

/*============================================
函數(shù)名稱:main
功能:系統(tǒng)命令行處理菜單主程序,通過隊(duì)列同后臺程序通信
參數(shù):void * arg
返回值:int
============================================*/

int main(void)
{
    char cmd[16];//命令數(shù)據(jù)緩沖區(qū)
    load_dev(g_dev);

    while(1){
        system("clear");
        printf("\nTC9000 濕溫度控制系統(tǒng)V1.0");
        printf("\n    [1] 報(bào)警設(shè)置");
        printf("\n    [2] 輸出控制設(shè)置"); 
        printf("\n    [3] 濕度/溫度查詢");
        printf("\n    [4] 系統(tǒng)設(shè)置");
        printf("\n    [x] 退出系統(tǒng)");

        printf(shell_s);
        fflush(stdout);
        get_line(cmd);
        switch(cmd[0]){

            case '1':
                menu_alarm(cmd);
                break;
            case '2':
                //menu_out_set(cmd);
                break;
            case '3':
                //menu_data_show(cmd);
                break; 
            case '4':
                //menu_sys_set(cmd);
                break;                
            case 'x':
                exit(0);
                break;       
            default:
                printf("輸入選項(xiàng)錯誤\n");
                break;
        }
    }

}

標(biāo)題名稱:基于arm的多路溫度采集控制系統(tǒng)(4)菜單界面
文章URL:http://weahome.cn/article/jseedg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部