找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1602液晶显示计算器源代码

[复制链接]
跳转到指定楼层
楼主
ID:309805 发表于 2018-4-17 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于液晶显示的计算器代码。

单片机源程序如下:
  1. /*-----------------------------------------------
  2.   名称:液晶显示计算器
  3.   内容:由于单片机浮点数限制,可以计算6位数字运算,大于这个长度,用科学计数法表示
  4.         小数位精度后6位,大于6位按四舍五入
  5. ------------------------------------------------*/
  6. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  7. #include<stdio.h>
  8. #include"1602.h"
  9. #include"delay.h"
  10. #include"keyboard.h"


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


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

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

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

  41.              if(firstflag==0)  //如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b
  42.              {
  43.              sscanf(temp,"%f",&a);
  44.          firstflag=1;
  45.                    }
  46.           else  
  47.              sscanf(temp,"%f",&b);
  48.           for(s=0;s<16;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果
  49.                     temp[s]=0;        
  50.       LCD_Write_Char(0,1,num);
  51.                
  52.                 if(('+'==num)|| (i==16) || ('-'==num) || ('x'==num)|| ('/'==num))
  53.                         LCD_Clear();
  54.           ///////////////////////
  55.           if(num!='=')      //判断当前符号位并做相应处理
  56.              sign=num;      //如果不是等号记下标志位
  57.           else
  58.              {  
  59.                  firstflag=0;   //检测到输入=号,判断上次读入的符合
  60.          switch(sign)
  61.                {
  62.                     case '+':a=a+b;
  63.                         break;
  64.                         case '-':a=a-b;
  65.                         break;
  66.                         case 'x':a=a*b;
  67.                         break;
  68.                         case '/':a=a/b;
  69.                         break;
  70.                         default:break;
  71.                    }
  72.                  sprintf(temp,"%g",a);    //输出浮点型,无用的0不输出
  73.          LCD_Write_String(1,1,temp);//显示到液晶屏
  74.                  sign=0;a=b=0;            //用完后所有数据清零
  75.                  for(s=0;s<16;s++)
  76.                     temp[s]=0;
  77.                  }
  78.           }
  79.    
  80.   else        if(i<16)
  81.           {
  82.            if((1==i)&& (temp[0]=='0') )//如果第一个字符是0,判读第二个字符
  83.              {
  84.                   if(num=='.')  //如果是小数点则正常输入,光标位置加1
  85.                     {
  86.                     temp[1]='.';
  87.                         LCD_Write_Char(1,0,num);//输出数据
  88.                         i++;
  89.             }           //这里没有判断连续按小数点,如0.0.0
  90.                  else
  91.                   {
  92.                    temp[0]=num; //如果是1-9数字,说明0没有用,则直接替换第一位0
  93.                    LCD_Write_Char(0,0,num);//输出数据
  94.                    }
  95.                  }
  96.            else
  97.              {
  98.          temp[i]=num;
  99.          LCD_Write_Char(i,0,num);//输出数据
  100.              i++;   //输入数值累加
  101.                  }
  102.            }

  103.     }        
  104.   }
  105. }
  106. ……………………

  107. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

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


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

使用道具 举报

沙发
ID:555968 发表于 2019-10-21 23:31 | 只看该作者
电路图呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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