200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > c语言单片机计算器编程 单片机做的计算器(C语言代码)

c语言单片机计算器编程 单片机做的计算器(C语言代码)

时间:2024-02-01 05:49:22

相关推荐

c语言单片机计算器编程 单片机做的计算器(C语言代码)

前段时间我自己写的一个,你看看,先是电路图,后面是代码

图是用protues画的,有什么不懂加我QQ478769652

//程序测试通过

//能使用的功能:输入K1(+,-,*,/)K2,按=得到结果,然后按on/c或0重新开始

//不能输入K1+K2+K3或者类似的输入,这种输入导致程序出错

//计算除法的时候不能显示小数,如5/3得到的结果是1

#include

unsigned char code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit P2_0=P2^0;

sbit P2_1=P2^1;

sbit P2_2=P2^2;

sbit P2_3=P2^3;

sbit P2_4=P2^4;

sbit P2_5=P2^5;

sbit P3_4=P3^4;

sbit P3_5=P3^5;

sbit P3_6=P3^6;

sbit P3_7=P3^7;

long int n=0;

unsigned int flag;

void display();

void delay();

void keyboard();

main()

{

//m1,m2分别保存第一次和第二次输入的两个数据

//当m1,m2的输入值超过999999时,此时将其情0

long int m1,m2;

P2=0xff;

while(1)

{

//检测输入的第一个数据

while(1)

{

display();

keyboard();

if(n>999999) n=0;

P3=0xf7;

if(P3_7==0) {flag=1; while(!P3_7); m1=n; n=0; break; }

P3=0xfb;

if(P3_7==0) {flag=2; while(!P3_7); m1=n; n=0; break; }

P3=0xfd;

if(P3_7==0) {flag=3; while(!P3_7); m1=n; n=0; break; }

P3=0xfe;

if(P3_7==0) {flag=4; while(!P3_7); m1=n; n=0; break; }

}

//检测输入的第二个数据

while(1)

{

display();

keyboard();

if(n>999999) n=0;

P3=0xf7;

if(P3_6==0) {m2=n; break;}

}

//计算结果,将其保存在n中然后进行显示,注意当n的值太大超过4字节时,此时显示乱码

while(1)

{

if(flag==1) n=m1+m2;

if(flag==2) n=m1-m2;

if(flag==3) n=m1*m2;

//由于类型原因,计算结果没有小数

if(flag==4) n=m1/m2;

if(n>999999) n=0;

display();

P3=0xf7;

//计算完成之后,可以用on/c或者是0进行清0,然后进行下一轮计算

if(P3_4==0||P3_5==0) {n=0;break;}

}

}

}

void keyboard()

{

//检测第一行的按键

P3=0xfe;

if(P3_4==0)

{

n=n*10+7;

while(!P3_4);

}

if(P3_5==0)

{

n=n*10+8;

while(!P3_5);

}

if(P3_6==0)

{

n=n*10+9;

while(!P3_6);

}

//检测第二行的按键

P3=0xfd;

if(P3_4==0)

{

n=n*10+4;

while(!P3_4);

}

if(P3_5==0)

{

n=n*10+5;

while(!P3_5);

}

if(P3_6==0)

{

n=n*10+6;

while(!P3_6);

}

//检测第三行的按键

P3=0xfb;

if(P3_4==0)

{

n=n*10+1;

while(!P3_4);

}

if(P3_5==0)

{

n=n*10+2;

while(!P3_5);

}

if(P3_6==0)

{

n=n*10+3;

while(!P3_6);

}

P3=0xf7;

if(P3_5==0)

{

n=n*10+0;

while(!P3_5);

}

}

//显示子程序

void display()

{

P0=tab[n%10];

P2_5=0;

delay();

P2_5=1;

P0=tab[n/10%10];

P2_4=0;

delay();

P2_4=1;

P0=tab[n/100%10];

P2_3=0;

delay();

P2_3=1;

P0=tab[n/1000%10];

P2_2=0;

delay();

P2_2=1;

P0=tab[n/10000%10];

P2_1=0;

delay();

P2_1=1;

P0=tab[n/100000];

P2_0=0;

delay();

P2_0=1;

}

void delay()

{

int i;

for(i=0;i<500;i++);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。