📄 jisuan.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 + -