51单片机100内的加减乘除计算器C语言程序

发布者:zhihua最新更新时间:2015-06-18 来源: 51hei关键字:51单片机  计算器  C语言程序 手机看文章 扫描二维码
随时随地手机看文章
#include //包含文件   
#define uchar unsigned char   
#define uint  unsigned int   

char b[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,   
          0xa1,0x86,0x8e,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff};    // 共阴极字符码   

//延时函数,用于实现程序中的短暂延时,表示延时cnt个毫秒   
void delay(unsigned int cnt)   
{   
    unsigned char i;   
    while(cnt--)   
    {   
        for(i=220;i>0;i--)   
        ;   
    }   
}   

//键盘扫描程序   
uchar keyboardscan(void)   
{   
      uchar sccode,recode;   
      P1=0xf0;    //P1口附初值   
      if((P1&0xf0)!=0xf0)//如果P1口电平不等于0xf0,表示有按键按下   
      {   
          delay(20);    //延时20毫秒后再判断,看是否还有按键按下,次步为软件防抖   
          if((P1&0xf0)!=0xf0)//继续判断是否有按键按下   
         {   
              sccode=0xfe;  //进行逐行判断   
              while((sccode&0x10)!=0)   
             {   
                  P1=sccode;   
                  if((P1&0xf0)!=0xf0)   
                  {   
                      recode=(P1&0xf0|0x0f);   
                      switch((~sccode)+(~recode))   
                      {   // 下面是键盘的编码识别   
                          case 0x11:    return(1);    break;   
                          case 0x21:  return(2);    break;   
                          case 0x41:    return(3);     break;   
                          case 0x81:    return(11);  break;//返回对应的键值0~15   
                          case 0x12:    return(4);    break;   
                          case 0x22:  return(5);    break;   
                          case 0x42:  return(6);    break;   
                          case 0x82:    return(12);   break;   
                          case 0x14:    return(7);    break;   
                          case 0x24:  return(8);    break;   
                          case 0x44:  return(9);   break;   
                          case 0x84:    return(13);  break;   
                          case 0x18:    return(10);   break;   
                          case 0x28:    return(15);   break;   
                          case 0x48:  return(16);   break;   
                          case 0x88:    return(14);  break;   
                          default:break;   
             }   
            }   
            else   
                sccode = (sccode<<1)|0x01;   
          }   
        }   
      }   
     return(0xff); //如果没有按键按下,则返回0xff   
}   
void output(uchar number)   
{   
P0=b[number/10];   
P2=b[number%10];   
}   
int yunsuan(uchar a,uchar b,uchar c)   
{   
    switch(c)   
    {   
        case 1:return(a/b);break;   
        case 2:return(a*b);break;   
        case 3:return(a-b);break;   
        case 4:return(a+b);break;   
    }   
}   
void main(void)                 //主函数   
{   
    unsigned char n1,n2,key,index,a;   
    n1=n2=index=0;   
    P0=P2=b[0];   
    while(1)   
    {   
        key = keyboardscan();//键盘扫描,看是否有按键按下   
        if(key != 0xff)//如果有按键按下,则key不再是0xff了,显示该按键键值   
        {   
            if(key<10)   
            {   
                if(!index) n1=key%10;   
                else n2=key%10;   
                output(key%10);   
            }   
            else if(key==15)   
            {   
                n1=n2=index=0;   
                output(0);   
            }   
            else if(key==16)   
            {   
                if(!index) output(n1);   
                else   
                {   
                    a=yunsuan(n1,n2,index);   
                    a=a%100;   
                    output(a);   
                    n1=a;   
                    n2=index=0;   
                }   
            }   
            else   
            {         
                if(index==0||n2==0) index=key-10;   
                else   
                {   
                    a=yunsuan(n1,n2,index);   
                    a=a%100;   
                    output(a);   
                    n1=a;   
                    n2=0;   
                    index=key-10;   
                }   
            }   
        }   
    }   
}   
关键字:51单片机  计算器  C语言程序 引用地址:51单片机100内的加减乘除计算器C语言程序

上一篇:51单片机驱动超声波测距模块C51程序
下一篇:51单片机驱动1602液晶的C程序

推荐阅读最新更新时间:2024-03-16 14:04

51单片机课程设计:基于DHT11的温湿度报警器
本程序适用于51系列单片机,主要用于读取DHT11温湿度模块数值,显示在数码管上,同时还具备温湿度报警功能,当超出预设值,蜂鸣器报警,可在吉林农业大学单片机开发板上完美运行,其他朋友可以修改部分代码移植的其他型号的开发板上。工程文件以及开发板电路图可到附件下载,同时DHT11部分资料在附件也可以下载。 关于粘贴复制乱码的问题:如果程序复制到Keil编译器上出现注释乱码,可以先建一个.c文件,也就是说不在keil里面编辑,然后用记事本打开.c文件,将源码复制进去,再在keil中添加文件即可。 /************************************说明****************************
[单片机]
51单片机汇编语言实例2
简介:上面的单片机系统和汇编语言控制指令,很容易被更改为多口、多位的单键控制系统。图5为多个LED灯-单个按键的运行结果与汇编语言。图6中对P2.0口改用双掷开关,实现P2.0口的两种电平状态。 a)单个按键与多个LED灯(位操作—输入与字节操作—输出)—判断与子程序 此处只是将输出指令由位指令换成了字节指令,而输入判断仍然是位判断指令。 ORG 0000H MAIN: ;CLR C MOV C,P2.0 ;获取P2.0位状态送位累加器;位与字节转换需要判断指令 JNC ZIJIE;JC位累加器—进位位为1转移到ZIJIE , JNC位累加器为0转移到ZIJIE
[单片机]
<font color='red'>51单片机</font>汇编语言实例2
基于51单片机对电子储物柜系统的设计
电路描述: 安全是我们日常的生活中最关心的问题。 每个人都觉得安全问题是非常至关重要的,在家里的门和安全,可以尽可能多的安全。 为了对于门访问安全 因此,我们打算通过引进一个电子密码锁系统,该系统包括一个人得到一个访问某些项目之前要输入密码的安全性,以及在家里,一个房间密码锁系统,不只是普通的单用户密码锁系统,需要用户插入已编程的代码来访问一个房间; 它是一个密码锁系统,有密码而且可以启用多个用户访问。 在基于51单片机的门储物柜,只允许授权人员进入限制区域的门禁系统。 该系统由8位微控制器AT89C2051具有ROM的2K字节的程序存储器完全控制。 该系统具有通过该密码,可以通过它来输入键盘。 当输入的密码与存储在存储器
[单片机]
基于<font color='red'>51单片机</font>对电子储物柜系统的设计
51单片机程序进行软件加密和硬件解密的方法
 由于固化在片外EPROM 里的单片机程序容易复制,所以,如不在技术上采取保护措施,则程序中所采用的处理方法易被他人分析仿制。对单片机程序进行加密是一种有效的保护措施,也是一项实用的技术。虽然本身带有EPROM 的单片机可做到程序保密,但由于价格和存储容量方面的原因,用户仍常常采用外接EPROM 的单片机来开发产品。 本文以MCS - 51 单片机为例介绍一种对片外E2PROM 里的程序进行软件加密和硬件解密的方法。这种方法不增加用户应用程序开销。 1  基本原理 我们知道,异或运算有这样的特点: A Ý B Ý B =A ,亦即当用变量B 对变量A 作偶数次异或运算后,其结果恢复为变量A。例如A = 32H , B = 5EH ,
[单片机]
<font color='red'>51单片机</font>程序进行软件加密和硬件解密的方法
51单片机学习——8.2--定时计数器
定时计数器原理 CPU时序 振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期) 状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。 机器周期:1个机器周期含6个状态周期,12个振荡周期。 指令周期:完成1条指令所占用的全部时间,它以机器周期为单位。 例如:外接晶振为12MHz时,51单片机相关周期的具体值为: 振荡周期=1/12us; 状态周期=1/6us; 机器周期=1us; 指令周期=1~4us; 定时计数器介绍 基本特点 51单片机有两组定时器/计数器,因为既可以定时, 又可以计数,故称之为定时器/计数器。 定时器/计数器和单片机的CPU是相互独立的。定时器/
[单片机]
<font color='red'>51单片机</font>学习——8.2--定时计数器
51单片机 汇编语言电子琴
以前写过一个 C 语言的: http://hi.baidu.com/do_sermon/item/c5e55bc1fc2dc30ec710b2f9 应网友要求,再写个汇编的。另外,还增加了显示按键号码的功能。 题目链接:http://zhidao.baidu.com/question/1818901024900190348.html 电路十分简单: P0 外接一个共阳数码管; P1 外接八个独立按键; P3.7 外接扬声器。 汇编语言程序如下: ORG 0000H SJMP START ORG 000BH CPL P3.7 MOV TH0, 30H
[单片机]
基于STC89C51单片机的数字电压表设计
0 引言 数字电压表的设计和开发已有很多类型和款式,传统的数字电压表有自己的特点,它们适合在现场做手工测量,而要完成远程测量并对测量的数据做进一步处理,运用传统的数字电压表是无法完成的。为此,本文设计了基于PC通信的数字电压表,该表既可以完成测量数据的传递,又可借助PC进行测量数据的处理。所以,这种类型的数字电压表无论在功能和实际应用上,都具有传统数字电压表无法比拟的优点,这使得它的开发和应用都具有良好的前景。 1 系统构成 本系统主要由硬件和软件两部分构成,硬件主要包括数据采集电路,单片机最小数据采集系统,单片机与PC机的接口电路等。软件主要有单片机数据采集程序,单片机与上位机通信程序,以及上位机数据处理程序。
[单片机]
80C51单片机程序(1)
//80C51程序 单片机的点亮 #include reg52.h //包含reg52.h头文件 #define uint unsigned int //宏定义uint的数据类型为unsigned int型 sbit D1=P1^2; //定义P1^2位 void main() { uint num=50000; //定义num数据类型,并附初值 D1=0; //点亮发光二极管 while(num--); //延时 } ------------------------------------------------------------------- #inc
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved