可以實現加減乘除運算,目前寫了六位數以下的,由1602顯示,由于是在開發板上進行調試的,沒有仿真圖,所需要的模塊我已經原理圖中截圖下來,附上自己的程序,供大家參考。
實物圖:
0.png (655.22 KB, 下載次數: 85)
下載附件
2017-6-16 02:37 上傳
0.png (830.98 KB, 下載次數: 99)
下載附件
2017-6-16 02:37 上傳
0.png (844.66 KB, 下載次數: 100)
下載附件
2017-6-16 02:37 上傳
0.png (873.58 KB, 下載次數: 85)
下載附件
2017-6-16 02:38 上傳
原理圖:
0.png (94.97 KB, 下載次數: 95)
下載附件
2017-6-16 02:38 上傳
0.png (35.33 KB, 下載次數: 99)
下載附件
2017-6-16 02:38 上傳
0.png (30.78 KB, 下載次數: 93)
下載附件
2017-6-16 02:38 上傳
0.png (49.01 KB, 下載次數: 95)
下載附件
2017-6-16 02:39 上傳
單片機源程序如下:
- #include<reg52.h>
- #include<stdlib.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define lcd P0
- #define key P3
- void write_com(uchar com);
- void write_dat(uchar dat);
- void delay(uchar z);
- void Init_lcd();
- void keyscan1();
- void keyscan2();
- void keyscan3();
- void keyscan4();
- void count_add();
- void count_sub();
- void count_mul();
- void count_div();
- void show_int();
- void show_float();
- sbit RS=P1^0;
- sbit RW=P1^1;
- sbit E=P2^5;
- uchar temp,i=0,a=0,b=0,c=0,d=0,e=0,f=0,g=0;
- long num,num1,num2,num3,value,value1;
- uchar table[10];
- uchar table2[10];
- uchar table3[10];
- uchar table4[10];
- uchar code table1[]="0123456789";
- void main()
- {
- Init_lcd();
- while(1)
- {
- keyscan1();
- keyscan2();
- keyscan3();
- keyscan4();
- }
- }
- void keyscan1()
- {
- key=0xfe;
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:
- if(f==0)
- {
- if(e==0)
- table[i]='1';
- if(e==1)
- table2[i]='1';
- }
- if(f==1)
- table3[i]='1';
- if(f==2)
- table4[i]='1';
- write_dat('1');
- break;
- case 0xd0:
- if(f==0)
- {
- if(e==0)
- table[i]='2';
- if(e==1)
- table2[i]='2';
- }
- if(f==1)
- table3[i]='2';
- if(f==2)
- table4[i]='2';
- write_dat('2');
- break;
- case 0xb0:
- if(f==0)
- {
- if(e==0)
- table[i]='3';
- if(e==1)
- table2[i]='3';
- }
- if(f==1)
- table3[i]='3';
- if(f==2)
- table4[i]='3';
- write_dat('3');
- break;
- case 0x70:
- if(f==0)
- {
- if(e==0)
- table[i]='4';
- if(e==1)
- table2[i]='4';
- }
- if(f==1)
- table3[i]='4';
- if(f==2)
- table4[i]='4';
- write_dat('4');
- break;
- }
- i++;
- while(temp!=0xf0)
- {
- temp=key;
- temp=temp&0xf0;
- }
- }
- }
- }
- void keyscan2()
- {
- key=0xfd;
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:
- if(f==0)
- {
- if(e==0)
- table[i]='5';
- if(e==1)
- table2[i]='5';
- }
- if(f==1)
- table3[i]='5';
- if(f==2)
- table4[i]='5';
- write_dat('5');
- break;
- case 0xd0:
- if(f==0)
- {
- if(e==0)
- table[i]='6';
- if(e==1)
- table2[i]='6';
- }
- if(f==1)
- table3[i]='6';
- if(f==2)
- table4[i]='6';
- write_dat('6');
- break;
- case 0xb0:
- if(f==0)
- {
- if(e==0)
- table[i]='7';
- if(e==1)
- table2[i]='7';
- }
- if(f==1)
- table3[i]='7';
- if(f==2)
- table4[i]='7';
- write_dat('7');
- break;
- case 0x70:
- if(f==0)
- {
- if(e==0)
- table[i]='8';
- if(e==1)
- table2[i]='8';
- }
- if(f==1)
- table3[i]='8';
- if(f==2)
- table4[i]='8';
- write_dat('8');
- break;
- }
- i++;
- while(temp!=0xf0)
- {
- temp=key;
- temp=temp&0xf0;
- }
- }
- }
- }
- void keyscan3()
- {
- key=0xfb;
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:
- if(f==0)
- {
- if(e==0)
- table[i]='9';
- if(e==1)
- table2[i]='9';
- }
- if(f==1)
- table3[i]='9';
- if(f==2)
- table4[i]='9';
- i++;
- write_dat('9');
- break;
- case 0xd0:
- if(f==0)
- {
- if(e==0)
- table[i]='0';
- if(e==1)
- table2[i]='0';
- }
- if(f==1)
- table3[i]='0';
- if(f==2)
- table4[i]='0';
- i++;
- write_dat('0');
- break;
- case 0xb0:
- f++;
- g++;
- if(g==2)
- f++;
- i=0;
- write_dat('.');
- break;
- case 0x70:
- write_dat('=');
- num=atol(table);
- num1=atol(table2);
- num2=atol(table3);
- num3=atol(table4);
- if(a==1)
- count_add();
- if(b==1)
- count_sub();
- if(c==1)
- count_mul();
- if(d==1)
- count_div();
- break;
- }
- while(temp!=0xf0)
- {
- temp=key;
- temp=temp&0xf0;
- }
- }
- }
- }
- void keyscan4()
- {
- key=0xf7;
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=key;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- switch(temp)
- {
- case 0xe0:
- write_dat('+');
- a++;
- break;
- case 0xd0:
- write_dat('-');
- b++;
- break;
- case 0xb0:
- write_dat('*');
- c++;
- break;
- case 0x70:
- write_dat('/');
- d++;
- break;
- }
- i=0;
- f=0;
- e++;
- while(temp!=0xf0)
- {
- temp=key;
- temp=temp&0xf0;
- }
- }
- }
- }
- void Init_lcd()
- {
- write_com(0x38);
- write_com(0x0e);
- write_com(0x06);
- write_com(0x01);
- write_com(0x80);
- }
- void write_com(uchar com)
- {
- RS=0;
- RW=0;
- E=1;
- lcd=com;
- delay(10);
- E=0;
- }
- void write_dat(uchar dat)
- {
- RS=1;
- RW=0;
- E=1;
-
- lcd=dat;
- delay(10);
- E=0;
- }
- void delay(uchar z)
- {
- uchar x,y;
- for(x=z;x>0;x--)
- for(y=112;y>0;y--);
- }
- void count_add()
- {
- value=num+num1;
- value1=num2+num3;
- if(value1>=10)
- {
- value++;
- value1=value1-10;
- }
- write_com(0x80+0x49);
- show_int();
- show_float();
- while(1);
- }
- void count_sub()
- {
- value=num-num1;
- value1=num2-num3;
- if(value1<0)
- {
- value--;
- value1=num2-num3+10;
- }
- write_com(0x80+0x49);
- show_int();
- show_float();
- while(1);
- }
- void count_mul()
- {
- value=num*num1;
- write_com(0x80+0x49);
- show_int();
- while(1);
- }
- void count_div()
- {
- value=num/num1;
- write_com(0x80+0x49);
- show_int();
- while(1);
- }
- void show_int()
- {
- uchar one,two,three,four,five;
- one=value/10000;
- two=value%10000/1000;
- three=value%10000%1000/100;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
計算器.rar
(202.51 KB, 下載次數: 253)
2017-6-16 02:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|