找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2077|回复: 0
打印 上一主题 下一主题
收起左侧

1602液晶显示的计算器源代码

[复制链接]
跳转到指定楼层
楼主
ID:315589 发表于 2018-5-14 09:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. /*-----------------------------------------------
  2.   名称:液晶显示计算器
  3.   修改:无
  4.   内容:由于单片机浮点数限制,可以计算6位数字运算,大于这个长度,用科学计数法表示
  5.         小数位精度后6位,大于6位按四舍五入
  6. ------------------------------------------------*/
  7. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  8. #include<stdio.h>
  9. #include"1602.h"
  10. #include"delay.h"
  11. #include"keyboard.h"


  12. /*------------------------------------------------
  13.                     主程序
  14. ------------------------------------------------*/
  15. main()
  16. {
  17. unsigned char num,i,sign;                  
  18. unsigned char temp[16];        //最大输入16个
  19. bit firstflag;
  20. float a=0,b=0;
  21. unsigned char s;


  22. LCD_Init();         //初始化液晶屏
  23. DelayMs(10);        //延时用于稳定,可以去掉
  24. LCD_Clear();        //清屏
  25. LCD_Write_String(0,0,"1111111");    //写入第一行信息,主循环中不再更改此信息,所以在while之前写入
  26. LCD_Write_String(0,1,"1111111");    //写入第二行信息,提示输入密码
  27. for(s=0;s<25;s++)//延时5s
  28.     DelayMs(200);
  29. LCD_Clear();
  30. LCD_Write_String(0,0," LCD calculator");    //写入第一行信息,主循环中不再更改此信息,所以在while之前写入
  31. LCD_Write_String(0,1," Fun: + - x / ");    //写入第二行信息,提示输入密码
  32. while (1)         //主循环
  33.   {


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

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

  42.          if(firstflag==0)  //如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b
  43.              {
  44.              sscanf(temp,"%f",&a);
  45.          firstflag=1;
  46.                  }
  47.           else  
  48.              sscanf(temp,"%f",&b);
  49.           for(s=0;s<16;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果
  50.                     temp[s]=0;
  51.       LCD_Write_Char(0,1,num);
  52.           ///////////////////////
  53.           if(num!='=')      //判断当前符号位并做相应处理
  54.              sign=num;      //如果不是等号记下标志位
  55.           else
  56.              {  
  57.                  firstflag=0;   //检测到输入=号,判断上次读入的符合
  58.          switch(sign)
  59.                {
  60.                     case '+':a=a+b;
  61.                         break;
  62.                         case '-':a=a-b;
  63.                         break;
  64.                         case 'x':a=a*b;
  65.                         break;
  66.                         case '/':a=a/b;
  67.                         break;
  68.                         default:break;
  69.                    }
  70.                  sprintf(temp,"%g",a);    //输出浮点型,无用的0不输出
  71.          LCD_Write_String(1,1,temp);//显示到液晶屏
  72.                  sign=0;a=b=0;            //用完后所有数据清零
  73.                  for(s=0;s<16;s++)
  74.                     temp[s]=0;
  75.                  }
  76.           }

  77.   else        if(i<16)
  78.           {
  79.            if((1==i)&& (temp[0]=='0') )//如果第一个字符是0,判读第二个字符
  80.              {
  81.                   if(num=='.')  //如果是小数点则正常输入,光标位置加1
  82.                     {
  83.                     temp[1]='.';
  84.                         LCD_Write_Char(1,0,num);//输出数据
  85.                         i++;
  86.             }           //这里没有判断连续按小数点,如0.0.0
  87.                  else
  88.                   {
  89.                    temp[0]=num; //如果是1-9数字,说明0没有用,则直接替换第一位0
  90.                    LCD_Write_Char(0,0,num);//输出数据
  91.                    }
  92.                  }
  93.            else
  94.              {
  95.          temp[i]=num;
  96.          LCD_Write_Char(i,0,num);//输出数据
  97.              i++;   //输入数值累加
  98.                  }
  99.            }
  100.   
  101.     }        
  102.   }
  103. }

复制代码

所有资料51hei提供下载:
144-1602液晶显示的计算器.7z (27.19 KB, 下载次数: 10)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表