能实现加减乘除运算,不带小数点,最大能计算到65535,溢出则出现错误。
void main(void)
{
uchar i;
CLI(); //关中断
Port_Init(); //端口初始化
Timer0_Init(); //定时器初始化
Keyboard_Init(); //键盘板初始化
SEI(); //开中断
first=0;second=0;result=0;op=0;Cnt_flag=1;Dis_flag=1;TM1721_Dis_Num(0,0);
while(1)
{
if(timer_50ms_fg==1) //50ms扫描一次键盘
{
timer_50ms_fg=0;
i=TM1721_Key_Scan();
Key_Process(i);
}
}
}
/*******************************************
*功 能:键盘处理
*入口参数:按键值
*******************************************/
void Key_Process(uchar keycode)
{
if(keycode!=keycode_old)
{
if((keycode<10)&&(Cnt_flag==1)) //数字"0~9"
{
first=(first*10+keycode);
Dis_flag=1;
TM1721_Dis_Num(first,0);
}
if(Dis_flag==1) TM1721_Dis_Num(first,0);
if((keycode>11)&&(keycode<16)) //"+","-","*","/"
{
op=keycode;
Dis_flag=2;
Cnt_flag=2;
}
if((keycode)<10&&(Cnt_flag==2)) //数字"0~9"
{
second=second*10+keycode;
Dis_flag=3;
TM1721_Dis_Num(second,0);
}
if(Dis_flag==3) TM1721_Dis_Num(second,0);
if(keycode==11) //"="
{
switch(op) //op="+","-","*","/"
{
case 12: result=first+second; break;
case 13: result=first-second; break;
case 14: result=first*second; break;
case 15: result=first/second; break;
}
TM1721_Dis_Num(result,0);
Dis_flag=4;
Cnt_flag=1;
}
if(Dis_flag==4) TM1721_Dis_Num(result,0);
if(keycode==16)
{ first=0;second=0;result=0;op=0;Cnt_flag=1;Dis_flag=1;TM1721_Dis_Num(0,0);}
}
keycode_old=keycode; //将新的键盘码存到老的键盘码中
}