C结集

 linux c

//1.gui

 MainMenu();//界面
 while(1)
 {
  c=getch();
  switch(nStatus)//界面标识
  {
  case State_Main:
   MainInput(c);//键盘处理
   break;
  case State_Operation:
   ProcInput(c);//键盘处理
   break;
  case State_Admin:
   AdminInput(c);//键盘处理
   break;
  }
 }

 

while(bquit)
 {
  key=getch() ;
  if(pCurScr==NULL)
   break ;
  pCurScr->proc(key) ;
  
 }

//2.去空格

void Trim( char *Str )
{
 int i , len , Left , Right ;
 
 len = strlen( Str ) ;
 if( len == 0 )
  return ;
  
 for( Left = 0 ; Left < len && Str[Left] == ' ' ; Left++ ) ;
 if( Left == len ){
  Str[1] = 0 ;
  return ;
 }
 if( Left != 0 ){
  memcpy( Str , Str+Left , len - Left ) ;
  Str[len - Left] = 0 ;
 }
   
 len = strlen( Str ) ;
 for( Right = len - 1 ; Right > 0 && Str[Right] == ' ' ; Right-- ) ; 
 if( Right < len - 1 )
  Str[Right+1] = 0 ;
 
 return ;  
}

//3.串口发数

#include <fcntl.h>
#include <stdio.h>
#include <sys/termios.h>
#include <errno.h>
extern char msg[60];

int setport(int fd, int speed, int parity, int databits, int stopbits)//串口设置
{
 int name_arr[] = {115200,57600,38400,  19200,  9600,  4800,  2400,  1200,  300  };
 int speed_arr[] = { B115200, B57600,B38400, B19200, B9600, B4800, B2400, B1200, B300 };
 struct termios options_old ;
 int i = 0, ret = 0;
 struct termios options = {0};
 
 if ((ret = tcgetattr(fd, &options_old)) != 0)
  return ret; 
 if ((ret = tcflush(fd, TCIOFLUSH)) != 0)
  return ret;
 
 for (i = 0;  i < sizeof(speed_arr) / sizeof(int);  i++) {
  if  (speed == name_arr[i])
  {
   options.c_cflag |= (CLOCAL | CREAD);    
   if ((ret = cfsetispeed(&options, speed_arr[i])) != 0)
    return ret;
   if ((ret = cfsetospeed(&options, speed_arr[i])) != 0)
    return ret;
   break; 
  }
 }
  
 options.c_cflag &= ~CSIZE;
 switch (databits)
 {  
  case 7:  
   options.c_cflag |= CS7;
   break;
  case 8:    
   options.c_cflag |= CS8;
   break;  
  default: 
   return EINVAL;
   
 }
 switch (parity)
 {
  case 'n':
  case 'N':   
   options.c_cflag &= ~PARENB;
   options.c_iflag &= ~INPCK;
   options.c_iflag &= ~ICRNL;
   break; 
  
  case 'o':  
  case 'O':    
   options.c_cflag |= (PARODD | PARENB);
   options.c_iflag |= (INPCK | ISTRIP);
   break; 
  
  case 'e': 
  case 'E':  
   options.c_cflag |= PARENB;
   options.c_cflag &= ~PARODD;
   options.c_iflag |= (INPCK | ISTRIP);
   break;
  
  case 'S':
  case 's':
      options.c_cflag &= ~PARENB;
   options.c_cflag &= ~CSTOPB;
   options.c_iflag &= ~INPCK;
   break; 
   
  default:  
   return EINVAL;
 } 
 
 switch (stopbits)
 {  
  case 1:   
   options.c_cflag &= ~CSTOPB; 
   break; 
  case 2:   
   options.c_cflag |= CSTOPB; 
   break;
  default:   
   return EINVAL;
 }
 
 options.c_cc[VTIME] = 10;
 options.c_cc[VMIN] = 0;
 options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
 options.c_oflag &= ~OPOST;

 ret = tcsetattr(fd, TCSAFLUSH, &options);
 return ret;
}
int com_trans(char* string)//串口发送

 unsigned char SendBuffer[20],cr;
 fd_set inputs ;
 int fdcomm =0;
 int i;
 cr=0x0d;
 
 if ((fdcomm=open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY ))<0)
 {
  sprintf( msg ,"打开通讯端口失败!");
  if (!fdcomm)
   return 0;
  close(fdcomm) ;
  return 0;
 }
 fcntl(fdcomm, F_SETFL, 0);
 setport(fdcomm, 19200, 'n', 8, 1) ;
 FD_ZERO(&inputs) ;
 FD_SET(fdcomm,&inputs) ;
 i=strlen(string);
 strcpy(SendBuffer,string);
 write(fdcomm,SendBuffer,i);
 write(fdcomm,&cr,1);
 if (!fdcomm)
  return 1;
 close(fdcomm) ;
 return 1;
}

//4.自制textbox INPUT

typedef struct
{
 int  len; //输入字符的长度
 int  x;   //显示X坐标
 int  y;   //显示Y坐标
 char type;//输入类型"N"数值,"C"字符
}TAG_INPS ;

#include <ncurses.h>
#include "Header.h"
#include "Key_Value.h"

int key_string(TAG_INPS *pkey_inps, char *string)//---------------------
{
 int Key,i;
 i=0;
 string[i]=0;
 while(1)
 {
  Key = getch() ;
  switch( Key)
  {
  case KEY_F(12):
   return 0;
  case _KEY_BS:
  case KEY_BACKSPACE:
    i--;
    if(i<0)
    i=0;
    string[i]=32;
    mvprintw(pkey_inps->y,pkey_inps->x, "%s",string);
    string[i]=0;
    mvprintw(pkey_inps->y,pkey_inps->x, "%s",string);
    refresh() ;
    break;
  case _KEY_ENTER:
  case _KEY_G :
   return 1;
  default:
   if(pkey_inps->type=='N')
   {
    if( ( Key >= '0' && Key <= '9') )
    {
     if(i==pkey_inps->len)
      break;
     string[i]=Key;
     i++;
     string[i]=0;
     mvprintw(pkey_inps->y,pkey_inps->x, "%s",string);
      refresh() ;
     break;
    } 
   }
   else
   {
    if(i==pkey_inps->len)
     break;
    string[i]=Key;
    i++;
    string[i]=0;
    mvprintw(pkey_inps->y,pkey_inps->x, "%s",string);
    refresh() ;
    break;
   }
  }
 }
}

//5字符串大小转换

void a2A(char *buf,int mode)
{
 while(buf++)
 {
  switch (mode)
  {
   case 0:
    if ((0x41 <= *buf) && (*buf <= 0x5a))
    {
     *buf += 0x20;
    }
    break;
   case 1:
    if ((0x61 <= *buf) && (*buf <= 0x7a))
    {
     *buf -= 0x20;
    }
    break;
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值