基于单片机的计算器设计(程序)

发布者:SereneSpirit最新更新时间:2022-04-06 来源: eefocus关键字:单片机  计算器 手机看文章 扫描二维码
随时随地手机看文章

#include

#define DIG P0

#define KEY P1sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

unsigned long int count=0,

sum=1;

int a[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigned  char KeyDate;

unsigned char symbol;

void delay();   

void KeyDown();  

void DigDisplay();

void conversion();

void DigDisplayNumble();

void main(void)

while(1) 

{  KeyDown(); // 

conversion();//  

DigDisplay(); 

}    

}

void KeyDown()//

KEY=0x0f; 

if(KEY!=0x0f) 

{  

delay(); 

 if(KEY!=0x0f) 

 {    KEY=0X0F;  

       switch(KEY)   

        {   case(0X07): 

                KeyDate=1;

                break;

            case(0X0b): 

                KeyDate=2;

                break;    

            case(0X0d): 

                KeyDate=3;

                break;    

            case(0X0e): 

                KeyDate=4;

                break;   

        }     

       KEY=0XF0;   

        switch(KEY)   

        {   case(0X70): 

                KeyDate=KeyDate;

                break;    

            case(0Xb0): 

                KeyDate=KeyDate+4;

                break;    

            case(0Xd0): 

                KeyDate=KeyDate+8;

                break;    

            case(0Xe0): 

                KeyDate=KeyDate+12;

                break;   

        }   

       while(KEY!=0xf0) ;    

        delay();   

        conversion();//  

    } 

    }

}

void DigDisplay()

    { 

    unsigned int j,p=0;  

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

    {  switch(j)  

        {   case(0):    

                LSA=0;

                LSB=0;

                LSC=0;

                DIG=a[count%10]; 

                break;   

            case(1):    

                LSA=1;

                LSB=0;

                LSC=0;    

                if(count>=10)     

                    DIG=a[count%100/10];    

                else     

                    DIG=a[10];    

                break;   

            case(2):    

                LSA=0;

                LSB=1;

                LSC=0;    

                if(count>=100)     

                DIG=a[count%1000/100];    

                else     

                DIG=a[10];    

                break;   

            case(3):    

                LSA=1;

                LSB=1;

                LSC=0;    

                if(count>=1000)     

                DIG=a[count%10000/1000];    

                else     

                DIG=a[10];    

                break;   

            case(4):    

                LSA=0;

                LSB=0;

                LSC=1;    

                if(count>=10000)     

                DIG=a[count%100000/10000];    

                else     

                DIG=a[10];    

                break;   

            case(5):    

                LSA=1;

                LSB=0;

                LSC=1;    

                if(count>=100000)     

                DIG=a[count%1000000/100000];    

                else     

                DIG=a[10];    

                break;   

            case(6):    

                LSA=0;

                LSB=1;

                LSC=1;    

                if(count>=1000000)     

                DIG=a[count%10000000/1000000];    

                else     

                DIG=a[10];    

                break;   

            case(7):    

                LSA=1;

                LSB=1;

                LSC=1;    

                if(count>=10000000)     

                DIG=a[count%100000000/10000000];    

                else     

                DIG=a[10];    

                break;   

           }  

           p=10;        

           while(p--);    

           DIG=0x00; 

        }

    }

void conversion()

    { 

    unsigned keydate_count;   

    if(KeyDate%4!=0)  

        {   

        if(KeyDate!=15)//    

        {     

            switch(KeyDate)//     

            {       case 1:       

                    case 2:       

                    case 3:keydate_count=KeyDate;break;       

                    case 5:       

                    case 6:       

                    case 7:keydate_count=KeyDate-1;break;       

                    case 9:       

                    case 10:       

                    case 11: keydate_count=KeyDate-2;break;       

                    case 14 :keydate_count=0;break;               

[1] [2]
关键字:单片机  计算器 引用地址:基于单片机的计算器设计(程序)

上一篇:基于单片机的负离子空气净化系统设计
下一篇:基于单片机的简易电子琴设计

推荐阅读最新更新时间:2024-11-09 11:24

以AT89S52单片机为控制核心的数字频率计设计
在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的测量精度。因此,频率的测量就显示得尤为重要,测频方法的研究越来越受到重视。频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期,频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其他领域。随着微电子技术和计算机的迅速发展,特别是单片机的出现和发展,使传统的电子测量仪器在原理、功能、耗电、可靠性等方面都发生了重大的变化。目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。为适应实际工作的需要,本文考虑以单片机(AT89 S52)为控制平台和一个1
[单片机]
以AT89S52<font color='red'>单片机</font>为控制核心的数字频率计设计
51的单片机定时中断基本概念及简单实验
定时器相关内容 CPU时序的有关知识 ①振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。 ②状态周期:2 个振荡周期为 1 个状态周期,用 S 表示。振荡周期又称 S 周期或时钟周期。 ③机器周期:1 个机器周期含 6 个状态周期,12 个振荡周期。 即机器周期=6个状态周期=12个震荡周期。 ④指令周期:完成 1 条指令所占用的全部时间,它以机器周期为单位。 外接晶振为 12MHz 时,51 单片机相关周期的具体值为: 振荡周期=1/12us; 状态周期=1/6us; 机器周期=1us; 指令周期=1~4us; 定时器/计数器 ①51 单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器
[单片机]
51的<font color='red'>单片机</font>定时中断基本概念及简单实验
AT89S51单片机的看门狗功能设计
在ATMEL的89S51系列的89S51与89C51功能相同。指令兼容。HEX程序无需任何转换可以直接使用。89S51只比89C51增加了一个看门狗功能。89S51的其它功能可以参见89C51的资料。 看门狗具体使用方法如下: 在程序初始化中向看门狗寄存器(WDTRST地址是0A6H)中先写入01EH,再写入0E1H。即可激活看门狗。 Org 0000 Ljmp begin Begin: Mov 0A6H,#01EH ;先送1E Mov 0A6H,#0E1H ;后送E1 在程序初始化中激活看门狗。 For: Mov 0A6H,#01EH ;先送1E Mov 0A6H,#0E1H ;后送E1 喂狗指令 Ljmp for
[单片机]
AT89S51<font color='red'>单片机</font>的看门狗功能设计
MSP430F169(三) ---- 使用UART实现PC与单片机的数据收发并在1602 液晶显示
本代码需要注意的细节 每次字符串的发送时间至少间隔三秒,发送的字符的数量最好在32个以内,防止数据接收不全。 本代码波特率的设置为1200.如果波特率设置过高,会出现数据接收不全的问题。我试过9600的波特率,会出现问题。读者可以自行修改代码,实现更高的传输速率。 有关的细节会在代码中说明 代码实现 主函数 #include msp430f169.h #include Config.h #include LCD.h #include Init.h #include UART.h //#include stdlib.h 本来想用全局指针来存储接收的数据 // 结果发现自己用不来....
[单片机]
汽车电子CAN FD控制芯片MCU接口电路设计
CAN总线技术不仅涉及汽车电子和轨道交通,还涉及医疗器械、工业控制、智能家居和机器人网络互连,这些行业对CAN产品的稳定性和抗干扰能力都有很高的要求。 上篇我们讲了在汽车CAN FD上,数据出错可能导致数据位被错误地解析为填充位,或者填充位被错误地解析为数据位,使数据位和填充位的个数发生变化,CAN FD采用了差分信号传输数据,通信的可靠性很高,错误位个数达到8的概率几乎为0。 那么秉承着与其后期解决不如前期规避的设计思路,就能设计出满足行业应用,规避奇葩问题的干扰,设计出符合汽车、交通运输、医疗器械、工业控制、智能家居和机器人网络互连的高可靠性CAN产品。 拿车身域控制芯片来举例,车身域主要负责车身各种功能的控制。随
[嵌入式]
汽车电子CAN FD控制芯片<font color='red'>MCU</font>接口电路设计
紫光同芯高端旗舰级R52+内核车规MCU THA6412重磅发布
8月21日,在2024紫光同芯合作伙伴大会上, 紫光同芯正式发布第二代THA6系列高端旗舰级新品THA6412。 该芯片在安全性、可靠性、算力、实时性等方面全方位升级,是继今年7月紫光同芯发布THA6206芯片后,又一款 通过ASIL D产品认证的旗舰级R52+内核车规MCU ,备受国内车厂期待。 性能大幅提升 适配复杂的汽车应用环境 会上 , 紫光同芯汽车电子事业部副总经理杨斌表示,作为紫光同芯高端控制芯片THA6家族的又一明星产品,THA6412延续了高性能、高可靠、高安全的优势, 具备超大容量、超强外设、超多引脚,采用Arm Cortex-R52+内核 ,主频达400MHz,采用V8精简指令集,算力服务强劲
[单片机]
紫光同芯高端旗舰级R52+内核车规<font color='red'>MCU</font> THA6412重磅发布
基于51单片机的单个LED灯的设计
本设计旨在完成精确控制1个LED的亮灭状态而设计的,代码仅供参考。 代码: #include reg52.h #include intrins.h sbit LED=P1^0; void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } void main() { while(1) { LED
[单片机]
基于51<font color='red'>单片机</font>的单个LED灯的设计
洗衣机系列解决方案有哪些?凌鸥创芯MCU洗衣机解决方案详解
1855年美国人汉密尔顿·史密斯制成了世界上第一台洗衣机,从此开始,洗衣机以一种悄然且深远的方式,持续重塑着人们的生活习惯与日常图景,目前洗衣机正朝着更紧凑、可靠、美观、安静、节能且智能的方向不断进化。 MCU作为现代洗衣机驱动系统的的核心单元,凌鸥创芯使用运算性能优异、可靠性高的LKS32MC07x/08x和LKS32MC45x系列MCU,配合鲁棒性强、适应度高的洗衣机控制算法,全面支持市场上主流及前沿的洗衣机/干衣机品类,为用户提供从设计到验证的一站式解决方案。 -方案介绍- 01 目标应用 DD/Mini/壁挂滚筒洗衣机 BLDC滚筒洗衣机 波轮洗衣机 双变频干衣机 02 方案特点 高覆盖度:拥有各种类型的成熟解决方
[嵌入式]
洗衣机系列解决方案有哪些?凌鸥创芯<font color='red'>MCU</font>洗衣机解决方案详解
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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