这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ATmega16简单计算器主程序

共1条 1/1 1 跳转至

ATmega16简单计算器主程序

助工
2014-10-08 20:36:05     打赏

能实现加减乘除运算,不带小数点,最大能计算到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;   //将新的键盘码存到老的键盘码中
}


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]