⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jisuan.c

📁 通过键盘计算输入的代数式
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <fcntl.h>      // open() close()
#include <unistd.h>     // read() write()
#include <math.h>

#define DEVICE_NAME "/dev/keypad"


#define MY_KEY_NUM	11
#define MY_KEY_ENT	12
#define MY_KEY_ADD      13
#define MY_KEY_SUB      14
#define MY_KEY_MUL      15
#define MY_KEY_DIV      16
#define MY_KEY_DOT      17
#define MY_KEY_NO0      0
#define MY_KEY_NO1      1
#define MY_KEY_NO2      2
#define MY_KEY_NO3      3
#define MY_KEY_NO4      4
#define MY_KEY_NO5      5
#define MY_KEY_NO6      6
#define MY_KEY_NO7      7
#define MY_KEY_NO8      8
#define MY_KEY_NO9      9

#define add_opera	0
#define sub_opera	1
#define mul_opera	2
#define div_opera	3

double	result=0;
void calc_two(int index);
//------------------------------------- main ----------------------------------------------------------------
int main(void)
{
	int fd,fd_led;
	int ret;
	unsigned int buf[2] ;
//	int i;
      	double x;
	char pre_scancode = 0xff;
	
	int data_led;	
	int index;
	unsigned int buf_led[] = {

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0xff,0x0e,0x46,0x40,0x36,0x70,0x80};

        printf("\nstart keypad_driver test\n\n");

        fd = open(DEVICE_NAME, O_RDWR);
	
	
//	printf("fd = %d\n",fd);

		
        if (fd == -1) {
		printf("open device %s error\n",DEVICE_NAME);
        }
        else {

		buf[0]=0x22;
		while (1) {
			read (fd,(char*)buf,1);
			if(buf[0]!= pre_scancode)
			{
				if(buf[0]!=0xff)
				{
					
					index=buf[0];    //从键盘输入数值
					
					
					if(index>10)
						index-=6;  
						
					calc_two(index);
					
					 
			 
				}
				
			}
			pre_scancode = buf[0];
//			printf("buf[0]=%x\n",buf[0]);
//			sleep(1);			
			usleep(50000);
			
		}
		// close 
		ret = close(fd);
		ret = close(fd_led);
		printf ("ret=%d\n",ret);
		printf ("close keypad_driver test\n");
	}

        return 0;
}// end main

void calc_two(int index)
{	//根据键入的数据进行相应的计算
	int i;
	static double data[100]={0};
	static int num=0,dot_f=0,quan=1;
	static int opera[100]={0};
	
	switch(index)
	{
	case	0:;
	case 	1:;
	case	2:;
	case	3:;
	case	4:;
	case	5:;
	case	6:;
	case	7:;
	case	8:;
	case	9:
		{	printf("%d",index);
			if(num==0)
			{	
				
				for(i=0;i<100;i++){data[i]=0;}
				opera[0]=add_opera;
				num=1;
				dot_f=0;
				quan=1;
			}
			data[num]*=10;
			data[num]+=index;
			if(dot_f==1)
				quan*=10;
				
			break;
		}
	case	MY_KEY_DOT:
		{	//printf(".");
			if(num==0)
			{	for(i=0;i<100;i++){data[i]=0;}
				opera[0]=add_opera;
				num=1;
				dot_f=0;
				quan=1;
			}
			dot_f=1;
			break;
		}
	case	MY_KEY_ADD:
		{	printf("+");
		if(num>0)
		{
			data[num]/=quan;
			quan=1;
			dot_f=0;
			if(opera[num-1]>=mul_opera)
			{
				if(opera[num-1]==mul_opera)
					data[num-1]*=data[num];
				else
					data[num-1]/=data[num];
				opera[num-1]=add_opera;
			}
			else
			{
				opera[num]=add_opera;
				num++;
			}
		}
		break;
		}
	case	MY_KEY_SUB:
		{	printf("-");
		if(num>0)
		{
			data[num]/=quan;
			quan=1;
			dot_f=0;
			if(opera[num-1]>=mul_opera)
			{
				if(opera[num-1]==mul_opera)
					data[num-1]*=data[num];
				else
					data[num-1]/=data[num];
				opera[num-1]=sub_opera;
			}
			else
			{
				opera[num]=sub_opera;
				num++;
			}
		}
		break;
		}
	case	MY_KEY_MUL:
		{	printf("*");
		if(num>0)
		{
			data[num]/=quan;
			quan=1;
			dot_f=0;
			if(opera[num-1]>=mul_opera)
			{
				if(opera[num-1]==mul_opera)
					data[num-1]*=data[num];
				else
					data[num-1]/=data[num];
				opera[num-1]=mul_opera;
			}
			else
			{
				opera[num]=mul_opera;
				num++;
			}
		}
		break;
		}
	case	MY_KEY_DIV:
		{	printf("/");
		if(num>0)
		{
			data[num]/=quan;
			quan=1;
			dot_f=0;
			if(opera[num-1]>=mul_opera)
			{
				if(opera[num-1]==mul_opera)
					data[num-1]*=data[num];
				else
					data[num-1]/=data[num];
				opera[num-1]=div_opera;
			}
			else
			{
				opera[num]=div_opera;
				num++;
			}
		}
		break;
		}
	case	MY_KEY_ENT:
	{	
		result=data[1];
		for(i=2;i<=num;i++)
		{
			switch(opera[i-1])
			{
			case	add_opera:
			{
				result+=data[i];
				break;
			}
			case	sub_opera:
			{
				result-=data[i];
				break;
			}
			case	mul_opera:
			{
				result*=data[i];
				break;
			}
			case	div_opera:
			{
				result/=data[i];
				break;
			}
			}
		}
		
		for(i=0;i<100;i++){data[i]=0;}
		opera[0]=add_opera;
		num=0;
		dot_f=0;
		quan=1;
		
		//printf("\n\nresult=%lf\n\n",result);
		printf("=%lf\n\n",result);
		break;
	}
	default:
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -