51单片机的数码管计算器,为什么减乘除号实现不了

qq_42381906 2018-06-04 02:18:00
#include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 eight[8];
u16 KeyValue,addend,a=0;
double result;
void delay(u16 j)
{
while(j--);
}
void keydown()//按键扫描
{
P1=0x0f;
if(P1!=0x0f)
{
switch(P1)
{
case 0x07: KeyValue=0;break;
case 0x0b: KeyValue=1;break;
case 0x0d: KeyValue=2;break;
case 0x0e: KeyValue=3;break;
}
P1=0Xf0;
switch(P1)
{
case 0X70: KeyValue=KeyValue;break;
case 0Xb0: KeyValue=KeyValue+4;break;
case 0Xd0: KeyValue=KeyValue+8;break;
case 0Xe0: KeyValue=KeyValue+12;break;
}
}
}
void display()//数码管的动态扫描
{
u8 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:LSA=0;LSB=0;LSC=0;break;
case 1:LSA=1;LSB=0;LSC=0;break;
case 2:LSA=0;LSB=1;LSC=0;break;
case 3:LSA=1;LSB=1;LSC=0;break;
case 4:LSA=0;LSB=0;LSC=1;break;
case 5:LSA=1;LSB=0;LSC=1;break;
case 6:LSA=0;LSB=1;LSC=1;break;
case 7:LSA=1;LSB=1;LSC=1;break;
}
P0=smgduan[eight[i]];
delay(10);
P0=0x00;
}
}
void shuzu(u16 x)//将数转化为8位数组
{
u16 j;
for(j=0;j<=7;j++)
{
eight[j]=x%10;
x=x/10;
}
}
void timekai() //打开定时器中断
{
TMOD=0x01;
TL0=(65535-50000)%256;
TH0=(65535-50000)/256;
ET0=1;
TR0=1;
EA=1;
}
void main()
{
timekai();
while(1)
{

if(KeyValue<=9&&KeyValue>=0)
{
addend=KeyValue;
shuzu(addend);
}
if(KeyValue>=10&&KeyValue<=13)//????????
{
switch(KeyValue)
{
case 10: result+=addend;addend=0;a=1;break;
case 11: result-=addend;addend=0;a=2;break;
case 12: result*=addend;addend=0;a=3;break;
case 13: result/=addend;addend=0;a=4;break;
}
}
if(KeyValue==14)//????
{
if(a==1)
{
result+=addend;
shuzu(result);
addend=0;
}
if(a==2)
{
result-=addend;
shuzu(result);
addend=0;
}
if(a==3)
{
result*=addend;
shuzu(result);
addend=1;
}
if(a==4)
{
result/=addend;
shuzu(result);
addend=1;
}
}
if(KeyValue==15)//????
{
addend=0;
result=0;
shuzu(result);
}
}
}
void time0() interrupt 1
{
TL0=(65535-10)%256;
TH0=(65535-10)/256;//0.01ms
keydown();
display();
}
...全文
1306 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
https://img-blog.csdn.net/20180614172015632?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW5mYWp1c2hp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
  • 打赏
  • 举报
回复
看到这题目自己写了一个可以连续运算的代码,看我的逻辑是否清晰?
  • 打赏
  • 举报
回复
yishumei 2018-06-13
  • 打赏
  • 举报
回复
把void shuzu(u16 x)形参类型改为u32,变量result是double型转换成u16会出问题;如果还是不行,把result定义成float再试试。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧