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;
}
}
}
更多推荐
C结集
发布评论