現在這個程式只能進行兩個無符號十進制的加減乘除運算 怎么改成可以進行兩個有符號的十進制的運算 并且結果為負數是在最高位顯示負數
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6; //段選引腳
sbit wela=P2^7; //位選引腳
uint flag,inputnum1,inputnum2,displaynum,mathsign,outputnum,keynum;
uchar address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //6位數碼管地址陣列
uchar table[]={0x3f,0x06,0x5b,0x4f, //0-F共陰型數碼管字形碼
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40 };
void delayms(uint xms) //延時函式
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void keyscan()
{
uchar temp,temph,templ,k;
P3=0xf0;
temp=P3;
temph=temp&0xf0;
if(temph!=0xf0)
{
delayms(10);
temp=P3;
temph=temp&0xf0;
if(temph!=0xf0)
{
P3=0x0f;
temp=P3;
templ=temp&0x0f;
k=temph^templ;
switch(k)
{
case 0xee: keynum=0;break; //數字0
case 0xde: keynum=1;break; //數字1
case 0xbe: keynum=2;break; //數字2
case 0x7e: keynum=3;break; //數字3
case 0xed: keynum=4;break; //數字4
case 0xdd: keynum=5;break; //數字5
case 0xbd: keynum=6;break; //數字6
case 0x7d: keynum=7;break; //數字7
case 0xeb: keynum=8;break; //數字8
case 0xdb: keynum=9;break; //數字9
case 0xbb: keynum=10;break; // =
case 0x7b: keynum=11;break; // 清零
case 0xe7: keynum=12;break; // +
case 0xd7: keynum=13;break; // -
case 0xb7: keynum=14;break; // *
case 0x77: keynum=15;break; // /
}
while(temph!=0xf0)
{
P3=0xf0;
temp=P3;
temph=temp&0xf0;
}
}
}
}
void display()
{
if(displaynum<10) //顯示1位數,0~9
{
P0=0xff;
wela=1;
P0=address[5];
wela=0;
P0=0x00;
dula=1;
P0=table[displaynum];
dula=0;
delayms(1);
}
else if
(displaynum<100) //顯示2位數,10~99
{
P0=0xff;
wela=1;
P0=address[5];
wela=0;
P0=0x00;
dula=1;
P0=table[displaynum%10];
dula=0;
delayms(1);
P0=0xff;
wela=1;
P0=address[4];
wela=0;
P0=0x00;
dula=1;
P0=table[displaynum/10];
dula=0;
delayms(1);
}
else //顯示3位數,100~999
{
P0=0xff;
wela=1;
P0=address[5];
wela=0;
P0=0x00;
dula=1;
P0=table[displaynum%10];
dula=0;
delayms(1);
P0=0xff;
wela=1;
P0=address[4];
wela=0;
P0=0x00;
dula=1;
P0=table[displaynum%100/10];
dula=0;
delayms(1);
P0=0xff;
wela=1;
P0=address[3];
wela=0;
P0=0x00;
dula=1;
P0=table[displaynum/100];
dula=0;
wela=1;
P0=address[3];
wela=0;
P0=0x00;
dula=1;
P0=0x40;
dula=0;
delayms(1);
}
}
void main()
{
while(1)
{
keyscan();
if(keynum<10)
{
if(flag==0)
{
inputnum1=keynum;
displaynum=inputnum1;
}
if(flag==1)
{
inputnum2=keynum;
displaynum=inputnum2;
}
}
if(keynum==10)
{
switch(mathsign)
{
case 12: outputnum=inputnum1+inputnum2;break;
case 13: outputnum=inputnum1-inputnum2;break;
case 14: outputnum=inputnum1*inputnum2;break;
case 15: outputnum=inputnum1/inputnum2;break;
}
displaynum=outputnum;
}
if(keynum==11)
{
displaynum=0;
inputnum1=0;
inputnum2=0;
outputnum=0;
flag=0;
keynum=16;
mathsign=0;
}
if((keynum>=12)&&(keynum<=15))
{
flag=1;
mathsign=keynum;
displaynum=0;
}
display();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/241603.html
標籤:C++ 語言
上一篇:求1!+2!+…+100!
下一篇:求
