C语言51单片机之简易计算器

main.c

/*-----------------------------------------------
  名称:液晶显示计算器
  内容:整数之间运算,没有小数所有除法得出的结果不正确,有负号运算,
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include"display.h"
#include"delay.h"
#include"keyboard.h"


/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
 unsigned char num,i,sign;                   
 unsigned char temp[8];        //最大输入8个
 bit firstflag;
 int a=0,b=0;
 unsigned char s;

 Init_Timer0();   //初始化定时器0
while (1)         //主循环
  {


 num=KeyPro();  //扫描键盘
 if(num!=0xff)  //如果扫描是按键有效值则进行处理
   { 
    if(i==0)    //输入是第一个字符的时候需要把改行清空,方便观看
	  {
	  for(s=0;s<8;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果
		  TempData[s]=0;
	  }
	if(('+'==num)|| (i==8) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//输入数字最大值8,输入符号表示输入结束
	  {
	  i=0;  //计数器复位

	 if(firstflag==0)  //如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b
	     {
	     sscanf(temp,"%d",&a);//从一个字符串输入到变量
         firstflag=1;
		 }
	  else  
	     sscanf(temp,"%d",&b);
	  for(s=0;s<8;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果
		    temp[s]=0;
      
	  ///
	  if(num!='=')      //判断当前符号位并做相应处理
	     sign=num;      //如果不是等号记下标志位
	  else
	     {  
		 firstflag=0;   //检测到输入=号,判断上次读入的符合
         switch(sign)
	       {
		    case '+':a=a+b;
			break;
			case '-':a=a-b;
			break;
			case 'x'
  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值