关于51单片机IAP58S4的计算器程序设计,我调试的程序一直有错。可以发一下有关于这个项目的程序例子吗?
# include <reg52.h>
# include <IAP58S4.h>
# define SegData P1 //显示单元段码缓冲寄存器
# define Control P2 //控制缓冲寄存器
unsigned int Flow; //用于计算的变量
//计算器程序
void Calcu()
{
unsigned char flag; //标志位
unsigned char key; //按键判断
begin:flag = 0;
Flow = 0;
while(1)
{
key = Key_Scan();
switch(key)
{
case '+': //用户按下“+”按键
{
if(flag == 0)
{
flag = 1;
}
else if (flag == 1)
{
while(1)
{
key = Key_Scan();
if('=' == key)
{
//进行加法
Flow += Flow;
ShowDot_Data(Flow); //显示结果
//清零重新计算
Flow = 0;
goto begin;
}
else if('+' == key)
{
//进行加法
Flow += Flow;
goto filp;
}
else if('-' == key)
{
//进行减法
Flow -= Flow;
goto filp;
}
else
{
//输入数据
Flow = 10 * Flow + Digit_Scan(key);
ShowDot_Data(Flow); //显示结果
}
}
filp:ShowDot_Data(Flow); //显示结果
Flow = 0;
goto begin;
}
break;
}
case '-': //用户按下“-”按键
{
if(flag == 0)
{
flag = 2;
}
else if(flag == 2)
{
while(1)
{
key = Key_Scan();
if('=' == key)
{
//进行减法
Flow -= Flow;
ShowDot_Data(Flow); //显示结果
//清零重新计算
Flow = 0;
goto begin;
}
else if('+' == key)
{
//进行加法
Flow += Flow;
goto filp;
}
else if('-' == key)
{
//进行减法
Flow -= Flow;
goto filp;
}
else
{
//输入数据
Flow = 10 * Flow + Digit_Scan(key);
ShowDot_Data(Flow); //显示结果
}
}
filp:ShowDot_Data(Flow); //显示结果
Flow = 0;
goto begin;
}
break;
}
case '=':
{
//显示结果并使按键失效
ShowDot_Data(Flow);
goto begin;
break;
}
default:
{
//不为符号则进行数字输入累加
Flow = 10 * Flow + Digit_Scan(key);
ShowDot_Data(Flow); //显示结果
break;
}
}
}
}
void main()
{
Calcu();
}
//按键扫描程序
unsigned char Key_Scan()
{
while(1)
{
if(P0 == 0xF0) continue; // 当按键没有按下时,P0等于0xF0
delay(2); // 延时2毫秒,软件延时函数
if(P0 == 0xF0) break;
P2 = 0x0F; // 先取低四位 high-->low
switch(P0)
{
case 0xF6:return '+'; // 按键的键值,自定义
case 0xEE:return '-'; // 按键的键值,自定义
case 0xDE:return '*'; // 按键的键值,自定义
case 0xBE:return '/'; // 按键的键值,自定义
case 0x7E:return '='; // 按键的键值,自定义
case 0xF7:return '1';
case 0xEF:return '2';