这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 岭南EE码农港 » C语言课程设计--计算器

共6条 1/1 1 跳转至

C语言课程设计--计算器

菜鸟
2014-11-12 22:01:36     打赏
运行PCB图学号

#include#include
#include"1602.h"
#include"delay.h"
#include"keyboard.h"


main()
{
 unsigned char num,i,sign;                 
 unsigned char temp[16];        /*最大输入16个*/
 bit firstflag;
 float a=0,b=0;
 unsigned char s;

 
 LCD_Init();          /*初始化液晶屏 */
 DelayMs(10);         /*延时用于稳定,可以去掉* /
 LCD_Clear();         /*清屏* /
 LCD_Write_String(0,0,"www.doflye.net");    

 LCD_Write_String(0,1,"www.findbest.net");    
 for(s=0;s<25;s++) /*延时5s* /
    DelayMs(200);
 LCD_Clear();
 LCD_Write_String(0,0," LCD calculator");   

 LCD_Write_String(0,1," Fun: + - x / ");   

while (1)        
  {


 num=KeyPro();  /*扫描键盘* /
 if(num!=0xff)   /*如果扫描是按键有效值则进行处理* /
   {
    if(i==0)     /*输入是第一个字符的时候需要把改行清空,方便观看 */
   LCD_Clear();

 if(('+'==num)|| (i==16) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num)) /*输入数字最大值16,输入符号表示输入结束* /
   {
   i=0;   /*计数器复位* /

  if(firstflag==0) /*如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b*/
      {
      sscanf(temp,"%f",&a);
         firstflag=1;
   }
   else 
      sscanf(temp,"%f",&b);
   for(s=0;s<16;s++) /*赋值完成后把缓冲区清零,防止下次输入影响结果*/
      temp[s]=0;
      LCD_Write_Char(0,1,num); 
      if(num!='=')      /*判断当前符号位并做相应处理*/
      sign=num;      /*如果不是等号记下标志位*/
   else
      { 
   firstflag=0;   /*检测到输入=号,判断上次读入的符合*/
         switch(sign)
        {
      case '+':a=a+b;
   break;
   case '-':a=a-b;
   break;
   case 'x':a=a*b;
   break;
   case '/':a=a/b;
   break;
   default:break;
     }
   sprintf(temp,"%g",a);   /*输出浮点型,无用的0不输出*/
         LCD_Write_String(1,1,temp);/*显示到液晶屏*/
   sign=0;a=b=0;            /*用完后所有数据清零*/
   for(s=0;s<16;s++)
      temp[s]=0;
   }
   }

  else if(i<16)
   {
    if((1==i)&& (temp[0]=='0') )/*如果第一个字符是0,判读第二个字符*/
      {
    if(num=='.')  /*如果是小数点则正常输入,光标位置加1*/
      {
      temp[1]='.';
   LCD_Write_Char(1,0,num);/*输出数据*/
   i++;
            }           /*这里没有判断连续按小数点,如0.0.0 */
   else
    {
     temp[0]=num; /*如果是1-9数字,说明0没有用,则直接替换第一位0*/
     LCD_Write_Char(0,0,num);/*输出数据*/
     }
   }
    else
      {
         temp[i]=num;
         LCD_Write_Char(i,0,num);/*输出数据*/
      i++;   /*输入数值累加*/
   }
    }
 
    } 
  }
}运行结果学号

 /*总结:要慢慢敲,做批注方便改,慢慢调试*/


菜鸟
2014-11-13 11:10:49     打赏
2楼
??如果是硬件C语言,这个要贴硬件的实际运行效果图

院士
2014-11-16 17:51:02     打赏
3楼
这是一个什么东东啊!怎么还有上位机软件啊!

高工
2014-11-16 18:25:34     打赏
4楼
楼主这个是在什么平台上实现的啊,很实用的课设题目

专家
2014-11-17 09:32:54     打赏
5楼
难不成是仿真的?

菜鸟
2014-11-26 19:36:12     打赏
6楼
怎么这么久还没有修改?

共6条 1/1 1 跳转至

回复

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