四位计算器
来源:互联网 发布:三年学java 编辑:程序博客网 时间:2024/04/27 21:12
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335#include"reg52.h"#include"intrins.h"// test=led_yang[];sbit sw1=P3^0;sbit sw2=P3^1;sbit sw3=P3^2;#define sw(a,b,c) sw1=(a),sw2=(b),sw3=(c)#define led P1#define rec_sw P0#define test P2void delay(int i);void key_down( int val);void getnum_array( int data_num);void getnum(int res);void led_show();void switch_choice(int on);void figure_result();void remove();void remove_neg();void add_neg();int led_yang[17]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,~0xC0}; //共阳int val_array[8]={0,0,0,0,0,0,0,0};//存储变量int operator;//存储操作符int val1=0,val2=0;//存放输入的数值int figure_nums=0; //变量个数int result=0;//计算结果int size=0;//变量位数int val=-1;//存储按键按下后得到的临时变量int flag=0;//判断一次运算是否结束,0表示未结束int b=0;//符号正负unsigned char u;//延时函数void delay(int i){while(i--);}//去除数组中的负号void remove_neg(){int h;for(h=0;h<8;h++){if(val_array[h]==16){val_array[h]=0;break;}}}//在数组中添加负号void add_neg(){int y;for(y=0;y<8;y++){if(val_array[y]>0)break;}val_array[y-1]=16;}//计算出结果void figure_result(){switch(operator){case(10): result=val1+val2;break;case(11): result=val1-val2;break;case(12): result=val1*val2;break;case(13): result=val1/val2;break;}if(result<0){result=0-result;b=1;}elseb=0;}//把数字拆分成元素存入数组中void getnum_array( int data_num){int n;for(n=0;n<8;n++){val_array[7-n]= data_num%10;data_num=data_num/10;}}//把数组中的元素转换成数值存在变量数组中void getnum(int t){int p,res=0,q,k;for(p=0;p<8;p++){k= val_array[p] ;for(q=7-p;q>0;q--){k=k*10;}res=res+k;}if(t==1)val1=res;if(t==2)val2=res;if(t==0)result=res;}//数码管开关选择void switch_choice(int on){switch(on){case(0): sw(0,0,0);break;case(1): sw(0,0,1);break;case(2): sw(0,1,0);break;case(3): sw(0,1,1);break;case(4): sw(1,0,0);break;case(5): sw(1,0,1);break;case(6): sw(1,1,0);break;case(7): sw(1,1,1);break;}}//驱动数码管显示void led_show(){int i;for(i=0;i<8;i++){switch_choice(7-i);//打开数码管开关led=~led_yang[val_array[7-i]];//显示数字delay(1);led=0x00; //防止重影}}//将数字右移,8位数码管右边起第一位为数字子的最高位void remove(){int b;//将数组恢复至上一个数的状态for(b=0;b<size-1;b++){val_array[b]=val_array[b+(8-(size-1))];val_array[b+(8-(size-1))]=0;}//左移数组显示for ( b = 0;b<size;b++){val_array[b + (8 - size)]= val_array[b];val_array[b] = 0;}}//按键识别void key_down( int val){rec_sw=0x0f;if(rec_sw!=0x0f){delay(1000);if(rec_sw!=0x0f){switch(rec_sw){case(0x07): val=0;break;case(0x0b): val=1;break;case(0x0d): val=2;break;case(0x0e): val=3;break;}rec_sw=0xf0;switch(rec_sw){case(0x70): val=val;break;case(0xb0): val=val+4;break;case(0xd0): val=val+8;break;case(0xe0): val=val+12;break;}//当变量长度小于4时,数据值在0-9时,将按键所得数据存入变量数组if(val>=0&&val<=9&&size<4){if(flag==1){for(u=0;u<8;u++)//数组清零val_array[u]=0;flag=0;}size++;if(size>4)size=4;val_array[size-1]=val;remove();//移位显示}//当数值在10-13时将值存入操作符if(val>=10&&val<=13&&(size>0||flag==1)){figure_nums++;//test=led_yang[ figure_nums];if(figure_nums==1){remove_neg();getnum(1);if(b==1){val1=-val1;}}elsegetnum(2);if(figure_nums>=2){figure_result();val1=result;}operator=val;for(u=0;u<8;u++)//数组清零val_array[u]=0;size=0;}// opeartor=14时计算结果if(val==14){if(flag==1){remove_neg();getnum(1);test=led_yang[val1];if(b==1)val1=-val1;}elsegetnum(2);figure_result();//计算结果for(u=0;u<8;u++)//数组清零val_array[u]=0;getnum_array(result);//拆成数组if(b==1)add_neg();figure_nums=0;size=0;flag=1;}while(rec_sw!=0xf0);}}}void main(){while(1){key_down(val);led_show();}}
阅读全文
0 0
- 四位计算器
- 基于51单片机和四位数码管的智能计算器算法
- 项目四 个人所得税计算器
- 32位汇编写简单加减乘除计算器
- 四位方波频率计
- d021: 四位整数
- 四位乘法器代码
- 四位可逆素数
- 四位吸血鬼数字
- 四位可逆素数
- 四位随机数
- 大学JAVA实验四 简单计算器、记事本
- 命令模式(实例四 计算器)
- 第八周项目四—个人所得税计算器
- 第八周项目四:个人所得税计算器
- 第八周项目四:个人所得税计算器
- 第八周项目四 个人所得税计算器
- 第八周项目四 个人所得税计算器
- UE4增加Input选项,操作蓝图完成角色移动
- 物联网在智能家居的应用:智能新风机案例
- UTF-8、BOM、<feff>的问题
- 发布一个智能密码钥匙内部证书导出工具ExportCert
- ITEXT 实现背景色交替的三线表
- 四位计算器
- PHP学习笔记——数组的基本概念及分类
- linux安装编译配置ffmpeg
- ArrayList源码
- [Delphi] Delphi版本号对照
- 关于load与ready的问题
- QT:电子时钟
- GEC210 led流水灯C语言实现 ADS工程
- js异步变同步小技巧-递归