单片机设计的带余数的简易计算器

发布者:EternalSmile最新更新时间:2016-09-28 来源: eefocus关键字:单片机  带余数  简易计算器 手机看文章 扫描二维码
随时随地手机看文章
原理图:
单片机设计的带余数的简易计算器 - 赵明 - Alexander
单片机设计的带余数的简易计算器 - 赵明 - Alexander
  
单片机设计的带余数的简易计算器 - 赵明 - Alexander
 

 

程序设计:

#include

        #include

              #include

          #define uchar unsigned char

              #define uint  unsigned int

 

sbit BEEP = P3^6;                  //蜂鸣器驱动线

 unsigned char code disp_code[]={

              0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

              0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};//数码管显示

 

uchar  key;    //键盘值

uchar num;      //扫描位数

int temp1=0;   //结果整数部分

uint temp2=0;  //结果余数部分

int m=0;    //

uchar ss[8];   //

uchar flag;       //运算标志位

bit c_flag=0;  //辅助标志位

unsigned char code key_code[]={

              0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,

              0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 }; //键盘编码

 

unsigned char code num_code[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //显示位数

/**********************************************************

 

  延时子函数

 

**********************************************************/

void delayms(uint ms)

{

   uchar t;

   while(ms--)

   {

     for(t = 0; t < 120; t++);

   }

}

 

/**********************************************************

 

  x*0.14MS 延时子函数

 

**********************************************************/

void delay0(uchar x)   

{

   uchar i;

   while(x--)

   {

     for (i = 0; i<13; i++);

   }

}

/**********************************************************

 

  蜂鸣器驱动子函数

 

**********************************************************/

void beep()

{

  uchar i;

  for (i=0;i<180;i++)

  {

    delay0(5);

    BEEP=!BEEP;       //BEEP取反

  }

   BEEP=1;            //关闭蜂鸣器

   delayms(250);      //延时    

}

 

 

 

/**********************************************************

 

键盘扫描子函数

 

**********************************************************/

uchar  keyscan()

{

   uchar  scan1,scan2,keycode,j;

 

   P1=0xf0;

   scan1=P1;

   if((scan1&0xf0)!=0xf0)           //判键是否按下

   {

     delayms(10);                   //延时30ms

     scan1=P1;

     if((scan1&0xf0)!=0xf0)         //二次判键是否按下

     {

        P1=0x0f;

        scan2=P1;

        keycode=scan1|scan2;         //组合成键编码

 

        for(j=0;j<=15;j++)

        {

           if(keycode== key_code[j])  //查表得键值

           {

              key=j;

                      

              return(key);

           }

        }

     }

   }

   else  P1=0xff;

 

   return (16);

}

/***************************************************** 

 

显示数据子程序

 

********************************************************/

  void display(int xx,uint yy)

  {  uchar   tt=0;

        uint x1;

        uint y1=yy;

               while(yy!=0)             //显示余数

         {ss[tt]=yy%10;

           yy=yy/10;

           tt++ ;

              num=tt;

         }

         if(y1!=0)                        //显示——

           {ss[tt]=16;

             tt++;

                ss[tt]=16;

             tt++;

      

                }

     x1=abs(xx);                 //显示整数

           while(x1!=0)

         {ss[tt]=x1%10;

           x1=x1/10;

           tt++ ;

              num=tt;

         }

         if(xx<0)                          //显示符号

        { ss[tt]=16;

             tt++;

              num=tt;}

        

      

 

 

           

  

         for(tt=0;tt

       {

           P0=disp_code[ss[tt]];

         delayms(5);  

               if(P2==num_code[num-1])

               P2=      0x7f;

       else P2=_cror_(P2,1);

        

      

       }     

        

 

  }

 

/**********************************************************

 

  判键是否按下子函数

 

**********************************************************/

void  keydown()

{       

   uchar tt=0;

   P1=0xf0;

   if((P1&0xf0)!=0xf0)

   {

     keyscan();

         beep();

         if(key>9&&c_flag==0)

   {switch(key)

        {case 10:flag=1;temp1=m;c_flag=1;m=0;break;

         case 11:flag=2;temp1=m;c_flag=1;m=0;break;

         case 12:flag=3;temp1=m;c_flag=1;m=0;break;

         case 13:flag=4;temp1=m;c_flag=1;m=0;break;

         case 14:m=-m;break;

         case 15:break;

          }

    }

       if(key==14&&c_flag==1)

           m=-m;

       if(key<=9)

       {if(m>=0) m=m*10+key;

         if(m<0) m=m*10-key; }

       if(key<=9&&flag==5)

       {

       flag=0;

       c_flag=0;

       temp1=temp2=0;

        } 

 

        

        }

   

         if(key==15)

         {switch(flag)

        {case 1:temp1=temp1+m;break;

         case 2:temp1=temp1-m;break;

         case 3:temp1=temp1*m;break;

         case 4:temp2=abs(temp1)%m;temp1=temp1/m;break;

         default:;

         }

         flag=5;

         m=0;

         }

        

 

}

 

 

 

void main()

{

     P0 = 0xc0;

     P2 = 0x7f;            //数码管显示"0"

     P1 = 0xff;

        while(1)

   {

     keydown();

        if(flag==5)

        display(temp1,temp2);

        else display(m,0);

 

   }

}

实物照片:

单片机设计的带余数的简易计算器 - 赵明 - Alexander
关键字:单片机  带余数  简易计算器 引用地址:单片机设计的带余数的简易计算器

上一篇:【C51】源码 1 -- LED 脉冲宽度调制(PWM)调光
下一篇:DA转换-15~15v电压源设计

推荐阅读最新更新时间:2024-03-16 15:12

AVR单片机在生活中具体的应用
本文就单片机在生活中具体的应用,娓娓道来单片机的发展历程跟特性,并对单片机的前景进行了展望。 随着城市公交事业的不断发展,无人售票公共汽车已经越来越多地出现在各大城市的公交系统中,在这种情况下,传统的依靠售票员共报站的方式不再适用,取而代之的是高自动化、高集成度、高智能化得语音报站系统。 公交车语音报站系统的使用,为乘客提供了更加人性化的服务,它不但能够播报当前的到站站名,还能预报下一站的站名,有的报音系统还增加了许多附加功能,如转乘提示、安全提示等等,使乘客能够方便、安全地到达目的地。语音报站系统采用标准普通话报站,语音清晰流畅,并将相关信息通过屏显示出来,满足了不同类型乘客的需要。 模拟人声进行报站和预报站
[单片机]
STC89C52单片机 蜂鸣器
蜂鸣器 蜂鸣器工作原理 蜂鸣器 区别: 这里的“源”不是指电源。 而是震荡源。 也就是说,有源蜂鸣器内部带振荡源,所以只要一通电就会叫。 而无缘内部不带振荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。有源蜂鸣器往往比无缘的贵,就是因为里面多个振荡电路。 三极管工作原理 蜂鸣器原理图: 单片机它不是功率器件,它适合做控制用,不适合驱动功率器件 #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit beep = P2^3; // 定义寄存器的
[单片机]
STC89C52<font color='red'>单片机</font> 蜂鸣器
单片机PIC16C7X在低功耗识别抄表的应用
    摘要: 介绍一种低功耗的自动识别抄表系统。详细介绍其结构和工作原理、设计思相,并给出两种信息钮的操作方法。     关键词: 低功耗 识读器 通信座 接触型iButton1990A 感应型TK5550 目前,许多行业的抄表系统,一般都停留在手工抄写然后人工汇总的水平上。随着经济改革的深入发展,人们要求信息及时、准确、全面;显然,手工抄写不能满足经济生活的要求。本文介绍了一种用单片机控制的抄表系统,可以记录多项信息,具有低功耗、低成本、便于携带、易于操作等特点,非常适合电厂、化工厂等相关行业的抄表系统。 1 系统的总体结构及工作原理 该系统由信息讯、识读器、通信座、计算机组成。将一个包含特定标识
[测试测量]
STM32单片机-操作访问内部Flash
目录: 1、STM32 FLASH操作流程 2、Flash基本知识点 3、OK,上干货,上代码 ------------------------------------------------------------------------------------------------- STM32中存储区分为:随机存取存储器RAM和只读存储器ROM。 其中: RAM为常说的内存,比如手机的2G内存4G内存等,就是程序跑起来的时候所占用的存储空间,特点是掉电数据丢失。 ROM为常说的硬盘,比如手机的64G和128G等,可以简单的理解为硬盘的存储空间,特点是掉电数据不丢失,所以又叫“非易失性存储器件”。 ROM又包含:
[单片机]
STM32<font color='red'>单片机</font>-操作访问内部Flash
51单片机LED流星雨拖尾灯程序
流星雨就是几个亮度不同的灯一起滚动,亮度依次更暗,像流星雨拖着尾巴。 控制全彩(三色)led也可以用同样的概念编程。 用的是51的单片机pwm实现的拖尾效果 程序的解说以及视频演示请打开http://www.51hei.com/bbs/dpj-22524-1.html 里面有详细的说明. 程序源码: #include reg52.h #define uint unsigned int #define uchar unsigned char uchar abit=16; //流到哪位 uchar atimer0_n; uchar code abit8 ={1,2,4,8,16,32,64,128,0}; uchar nn; c
[单片机]
51<font color='red'>单片机</font>LED流星雨拖尾灯程序
基于单片机的Internet连接技术与方法
0引言   目前,Internet已成为当今信息社会的重要组成部分,Internet技术将日益深入到生活和各种智能设备中。单片机应用领域,以往那种由一块单片机组成的系统已无法满足现代工业、生活等各方面的需求,人们开始利用各种局部总线,如CAN、RS232、RS485等,将多块单片机连接起来形成局域网,这种方案在一定程度上解决了信息交换的问题。为了获得更大程度的信息交换,如果能将单片机系统连上Internet网,则可以真正实现远程监控,系统维护人员可随时随地通过互联网直接读取系统当前状态参数,了解系统运行状况。当系统出现故障时,可及时采取正确的补救措施。现在,各种工业智能电器、智能仪表和智能家电内部都嵌有微处理器,但是由于各种微处
[单片机]
基于<font color='red'>单片机</font>的Internet连接技术与方法
单片机控制的数字触发器
摘要 介绍了8051单片机在晶阐管触发电路中的应用,同时有单片机与上位机进行串口通讯的软件设计。由软件控制可产生不同顺序的6组触发脉冲。 关键词 单片机 VB 晶阐管 数字触发器 电力电子技术研究的内容包括三个方面:电力电子器件、变流电路和控制电路。电力电子变流技术在工业化领域有着广泛的应用。家用电器节能灯、电子拖动、电炉控制系统中已采用相控整流技术。但多数触发装置普遍是模拟的,调节十分的不便,触发精度差、故障率高。采用单片机来控制晶阐管的触发,是晶阐管应用的发展趋势。本文介绍了一种由8051单片机组成的触发控制系统,可实现高分辨率的数字触发器。 1 系统硬件组成及其原理 系统硬件组成如图1,被控对象是三相全
[单片机]
基于C8051F000的多通道数据采集范围控制系统
1 引 言      在实际应用中,对被控对象的物理参数(温度、湿度、位移、电流、电压等)在一定的范围内进行控制,是单片机的典型应用之一。很多宏观要求精确控制的场合,其微观控制过程,仍可归结为是对某些参数变化范围的控制。如,传统的三相异步电机从启动到正常运行,其电流、电压和温度的变化;抽水塔水位的变化;机床刀具的行程变化及数字电表的自动量程变换等。这些控制过程最显著的特点是:被控物理量都是一个变化范围,而非某一个精确的“点”。有效控制物理量变化范围的方法很多,本文重点介绍利用C8051F000单片机片内8路高性能的12位ADC数据采集系统和可编程窗口检测器,实现对多路参数变化范围控制的硬件组成和软件设计方法。 2 C805
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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