源码公开
#include"reg52.h"
#include"stdio.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define DATA P0
sbit num1 = P2^0;
sbit num2 = P2^1;
sbit num3 = P2^2;
sbit num4 = P2^3;
sbit num5 = P2^4;
sbit num6 = P2^5;
sbit num7 = P2^6;
sbit num8 = P2^7;
sbit num9 = P3^0;
sbit num0 = P3^1;
sbit key1 = P3^2;
sbit key2 = P3^3;
sbit key3 = P3^4;
sbit key4 = P3^5;
sbit key5 = P3^6;
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P1^2;
int jisuan_num1=0,jisuan_num2=0,end_num=0,yunsuanfu=0,end=0;
//uint R,R0,R1,R2,R3,R4;
void delay(int z) //????
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_cmd(char cmd)//命令
{
rs=0;
rw=0;
DATA=cmd;
delay(5);
en=1;
delay(5);
en=0;
}
void xianshi(char dat)//显示
{
rs=1;
rw=0;
DATA=dat;
delay(5);
en=1;
delay(5);
en=0;
}
void init (void)//初始化
{
write_cmd(0x02);
write_cmd(0x06);
write_cmd(0x0d);
write_cmd(0x38);
write_cmd(0x01);
}
/*void xianshijieguo (int R)//显示结果
{
if(R-(int)R>0){
if((int)R==0)
{
write_cmd(0xc0);
xianshi('0');
write_cmd(0xc0+1);
xianshi(0x30-2);
R0=R*1000;
R1=R0/100;
R2=R0/10%10;
R3=R%100;
write_cmd(0xc0+2);xianshi(0x30+R1);
write_cmd(0xc0+3);xianshi(0x30+R2);
write_cmd(0xc0+4);xianshi(0x30+R3);
}
else
{
R0=R*1000;
R1=R/1000;
R2=R/100%10;
R3=R/10%10;
R4=R%1000;
write_cmd(0xc0); xianshi(0x30+R1);
write_cmd(0xc0+1);xianshi(0x30+R2);
write_cmd(0xc0+2);xianshi(0x30+R3);
write_cmd(0xc0+3);xianshi(0x30+R4);
}
}
if(R>9&&R<100)
{
R1=R/10;
R2=R%10;
write_cmd(0xc0); xianshi(0x30+R1);
write_cmd(0xc0+1);xianshi(0x30+R2);
}
if(R>100)
{
R1=R/100;
R2=R/10%10;
R3=R%100;
write_cmd(0xc0); xianshi(0x30+R1);
write_cmd(0xc0+1);xianshi(0x30+R2);
write_cmd(0xc0+2);xianshi(0x30+R3);
}
if(R>1000)
{
R0=R*1000;
R1=R/1000;
R2=R/100%10;
R3=R/10%10;
R4=R%1000;
write_cmd(0xc0); xianshi(0x30+R1);
write_cmd(0xc0+1);xianshi(0x30+R2);
write_cmd(0xc0+2);xianshi(0x30+R3);
write_cmd(0xc0+3);xianshi(0x30+R4);
}
if(R<10&&R>=0)
{
write_cmd(0xc0); xianshi(0x30+R1);
}
if(R<-9)
{
write_cmd(0xc0); xianshi(0x2d);
R=(-R)/10;
R=(-R)%10;
write_cmd(0xc0+1);xianshi(0x30+R1);
write_cmd(0xc0+2);xianshi(0x30+R2);
}
if(R<0&&R>-10)
{
write_cmd(0xc0); xianshi(0x2d);
write_cmd(0xc0+1);xianshi(0x30-R);
}
}*/
void delay1s(void) //1s延时
{
unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void yunsuan (int shuzi1,int shuzi2,int fuhao)//????
{
int shuchu=0,shuchuzu[5]={0},a=0;
switch(fuhao)
{
case 1:end_num=shuzi1+shuzi2;break;
case 2:end_num=shuzi1-shuzi2;break;
case 3:end_num=shuzi1*shuzi2;break;
case 4:end_num=shuzi1/shuzi2;break;
default :end_num=0;break;
}
if(end==1){
if(end_num=0) xianshi(0x30+0);
while(end_num>0){
shuchuzu[a]=end_num%10;
end_num/=10;}
for(;--a>=0;)
xianshi(0x30+shuchuzu[a]);
end=0;
a=0;
}
}
int shuzishuru ()
{
int get_num;
//if(panduan==0){//???????
//jisuan_num1*=10;
if(num1==0){
get_num=1;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num2==0){
get_num=2;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num3==0){
get_num=3;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num4==0){
get_num=4;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num5==0){
get_num=5;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num6==0){
get_num=6;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num7==0){
get_num=7;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num8==0){
get_num=8;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num9==0){
get_num=9;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
if(num0==0){
get_num=0;jisuan_num1*=10;xianshi(0x30+get_num);delay1s();}
jisuan_num1+=get_num;
//}
if(key1==0) {//?????
yunsuanfu=1;jisuan_num2+=jisuan_num1;jisuan_num1=0;xianshi(0x2b);delay1s();}
if(key2==0) {
yunsuanfu=2;if(jisuan_num2!=0)jisuan_num2-=jisuan_num1;else jisuan_num2=jisuan_num1;jisuan_num1=0;xianshi(0x2d);delay1s();}
if(key3==0) {
yunsuanfu=3;if(jisuan_num2!=0)jisuan_num2*=jisuan_num1;else jisuan_num2=jisuan_num1;jisuan_num1=0;xianshi(0x2a);delay1s();}
if(key4==0) {
yunsuanfu=4;if(jisuan_num2!=0)jisuan_num2/=jisuan_num1;else jisuan_num2=jisuan_num1;jisuan_num1=0;xianshi(0x2f);delay1s();}
if(key5==0) {
end=1;xianshi(0x2a);yunsuan(jisuan_num2,jisuan_num1,yunsuanfu);delay1s();}
return 0;
}
main ()
{
init ();
while(1){
shuzishuru();
}
}
ps可能有bug,其中的显示结果没用。注释掉了