#include "cal_stack.h"
#include "cal_number.h"
#include "lcd.h"
#include "cal_EU.h"
#include "math.h"
#include <stdbool.h>
#define TRUE 1
#define FALSE 0
//bool operation_rank(int t);
extern float num_temp;
extern bool cal_status;
bool do_one_operation(int t);
bool factorial(float *f);
bool do_special_operation(char t);
static int operation_rank(int num){
switch(num){
case add_am: case del_am:
return 1;
case mul_am: case div_am:
return 2;
case power_am: //case roots_am:
return 3;
case equ_am:
return 0;
default:return 0;//take other num as equ_am
}
}
bool operation_work(char t){
char oper_num;
if(button_type(t)==SPECIAL_BTN){
do_special_operation(t);
}
else{
oper_num = get_oper_top();//
if(cal_status == 1 && t!= equ_am){
pop_oper();
pop_data();
}
if(t!= equ_am){
for(;operation_rank(oper_num) >= operation_rank(t);oper_num = get_oper_top()){
if(!do_one_operation(oper_num)) return FALSE;
pop_oper();
}
push_oper(t);
//cal_status = 1;
}
else{
for(;oper_num !=equ_am; oper_num = get_oper_top()){
if(!do_one_operation(oper_num)) return FALSE;
pop_oper();
}
cal_reset();
}
}
//num_temp=get_data_top();//get data stack's top value
return TRUE;
}
bool do_one_operation(int t){
float left,right;
right=pop_data();
left=pop_data();
switch(t){
case add_am+SECOND_FUN_GAP://
case add_am: num_temp=(left+right);
push_data(num_temp);
break;
case del_am+SECOND_FUN_GAP://
case del_am: num_temp=(left-right);
push_data(num_temp);
break;
case mul_am+SECOND_FUN_GAP://
case mul_am: num_temp=(left*right);
push_data(num_temp);
break;
case div_am+SECOND_FUN_GAP://
case div_am:
if(right == 0) return FALSE;
else{
num_temp=(left/right);
push_data(num_temp);
}
break;
case power_am+SECOND_FUN_GAP://roots_am
num_temp=pow(left,1/right);
push_data(num_temp);
break;
case power_am:
num_temp=pow(left,right);
push_data(num_temp);
break;
}
//cal_status = 1;
return TRUE;
}
bool do_special_operation(char num){
switch(num){// '//'second choice
case sin_am+SECOND_FUN_GAP: ////sin-1
num_temp = asin(num_temp)/PI*180;
break;
case sin_am: //sin
num_temp = sin(num_temp/180*PI);
break;
case cos_am+SECOND_FUN_GAP: ////cos-1
num_temp = acos(num_temp)/PI*180;
break;
case cos_am: //cos
num_temp = cos(num_temp/180*PI);
break;
case tan_am+SECOND_FUN_GAP: ////tan-1
num_temp = atan(num_temp)/PI*180;
break;
case tan_am: //tan
num_temp = tan(num_temp/180*PI);
break;
case square_am+SECOND_FUN_GAP: ////sqrt
if(num_temp<0) return FALSE;
else num_temp = sqrt(num_temp);
break;
case square_am: //square
num_temp *= num_temp;
break;
case neg_am+SECOND_FUN_GAP: ////
case neg_am: //negtive
num_temp = -num_temp;
break;
case factorial_am+SECOND_FUN_GAP: ////
case factorial_am: //factorial
if(!factorial(&num_temp)) return FALSE;
break;
case start_am+SECOND_FUN_GAP: ////
case start_am: //start
cal_reset();
num_temp=0;
break;
}
//cal_status = 0; // change cal_status
return TRUE;
}
bool factorial(float *f){
float ld;int c;
ld=(long int)(*f);
if(ld-*f !=0 || *f<0 || *f>256) return FALSE;
ld=1;
for(c=1;c<=*f;++c){
ld *= c;
}
*f=ld;
return TRUE;
}
没有合适的资源?快使用搜索试试~ 我知道了~
5X5点阵键盘+1602液晶显示做的计算器+时钟(AVR单片机)
共36个文件
d:7个
c:7个
h:7个
5星 · 超过95%的资源 需积分: 16 63 下载量 42 浏览量
2010-08-08
10:37:51
上传
评论
收藏 75KB RAR 举报
温馨提示
电路图我不记得放哪了。这个只是程序,AVRStudio下的。 带有第二功能键。
资源推荐
资源详情
资源评论
收起资源包目录
AVR_CalNew.rar (36个子文件)
AVR_CalNew
calAVRtest
cal_number.h 226B
cal_EU.h 107B
main.c 939B
key_instruction.h 662B
cal_priority_operation.h 135B
cal_number.c 863B
cal_stack.h 294B
calAVRtest.aps 4KB
cal_priority_operation.c 3KB
lcd.c 1KB
default
dep
cal_EU.o.d 500B
cal_priority_operation.o.d 934B
cal_number.o.d 376B
cal_stack.o.d 29B
cal_display.o.d 696B
lcd.o.d 565B
main.o.d 882B
lcd.o 4KB
cal_EU.o 4KB
cal_number.o 4KB
calAVRtest.elf 25KB
cal_display.o 7KB
calAVRtest.hex 25KB
main.o 3KB
cal_stack.o 4KB
cal_priority_operation.o 10KB
calAVRtest.eep 13B
Makefile 2KB
lcd.h 1010B
cal_EU.c 898B
cal_display.h 216B
cal_stack.c 809B
cal_display.c 2KB
Last Loaded gt.DBK 98KB
gt.DSN 97KB
gt.PWI 1KB
共 36 条
- 1
资源评论
- coco昵称好多呀2013-07-01和我用的单片机不一样,得改改才能用!
- qq_272747672015-04-18和我用的单片机不一样,得改改才能用!,,但程序是不错的程序
- qq_148632292014-05-02仿真HEX文件 用不了
- CCccra30062013-05-03用不起啊~~~应该是我的问题,等再研究一哈以后来追加评论
ssx205
- 粉丝: 6
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功