ATmega16 单片机科学计算器程序(带有加减乘除功能)初步收尾了

发布者:MysticalGlow最新更新时间:2014-12-04 来源: 21ic关键字:ATmega16  单片机  科学计算器程序 手机看文章 扫描二维码
随时随地手机看文章

支持最大八位的无符号长整型数值计算,后期会添加带符号运算及其它计算功能。

#include
#include
//#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define EA SREG|=BIT(7)
uchar temp,old,key_turn,flag=0;
ulong datA=0,datB=0;
const uchar wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
const uchar tab[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
extern uchar dat[8]={0,0,0,0,0,0,0,0};
extern uchar dat_right[]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};
void delay(uint z)
{
while(z--);
}
void display(uchar z)
{
uchar i;
while(z--)
for(i=0;i<8;i++)
{
PORTB=wela[i];
PORTD=tab[dat_right[i]];
delay(30);
PORTB=0XFF;
}
}

void clean_junk()
{
uchar i,p=0;
for(i=0;i<8;i++)
{
dat_right[i]=0x0a;
}
for(i=0;i<8;i++)
{
if(dat[i]>0)p=1;
if(p)dat_right[i]=dat[i];
}
}
void delete()
{
uchar i;
for(i=0;i<8;i++)
{
dat[i]=0;
}
clean_junk();
}
void disan_he()
{
ulong i;
     i=dat[0]*1e7+dat[1]*1e6+dat[2]*1e5+dat[3]*1e4+dat[4]*1e3+dat[5]*1e2+dat[6]*1e1+dat[7];
if(flag)datB=i;
else datA=i;
flag=1;
delete();
}
void disan_fen()
{
dat[0]=datA/1e7;
dat[1]=datA%10000000/1000000;
dat[2]=datA%1000000/100000;
dat[3]=datA%100000/10000;
dat[4]=datA%10000/1000;
dat[5]=datA%1000/100;
dat[6]=datA%100/10;
dat[7]=datA%10;
flag=0;

}
void move()
{
uchar i;
if(temp>0&temp<0x0b)
{
for(i=0;i<8;i++)
{
dat[i]=dat[i+1];
}
if(temp==0x0a){dat[0]=0;temp=0;}
dat[7]=temp;temp=0;
}
}
void clean()
{
uchar i;
flag=0;
for(i=0;i<8;i++)
{
dat[i]=0;
}
temp=0;
old=0;
datA=0;
datB=0;
}
void disan()
{
if(temp>0&temp<0x11)switch(temp)
{
case 0x0e:clean();break;
case 0x0b:old=temp;temp=0;disan_he();break;
case 0x0c:old=temp;temp=0;disan_he();break;
case 0x0d:old=temp;temp=0;disan_he();break;
case 0x10:old=temp;temp=0;disan_he();break;
case 0x0f:switch(old)
{
case 0x0b:if(flag)disan_he();datA=datA/datB;old=0;temp=0;disan_fen();break;
case 0x0c:if(flag)disan_he();datA=datA*datB;old=0;temp=0;disan_fen();break;
case 0x0d:if(flag)disan_he();datA=datA-datB;old=0;temp=0;disan_fen();break;
case 0x10:if(flag)disan_he();datA=datA+datB;old=0;temp=0;disan_fen();break;
default:temp=0;old=0;break;
}break;
default:move();temp=0;break;
}

// disan_fen();delete();


}
void diskey()
{
uchar i,n;
const uchar code[]={0xFE,0xFD,0xFB,0xF7};
if(temp==0x00)for(i=0;i<4;i++)
{
PORTA=code[i];
temp=PINA;
if(~temp&0xf0)i=6;
while(~PINA&0xf0)display(1);
PORTA=0xff;
}
if(temp>0x10)switch(temp)
{
case 0xEE:temp=0x07;break;
case 0xDE:temp=0x08;break;
case 0xBE:temp=0x09;break;
case 0x7E:temp=0x0b;break;
/////////////////////////
case 0xED:temp=0x04;break;
case 0xDD:temp=0x05;break;
case 0xBD:temp=0x06;break;
case 0x7D:temp=0x0c;break;
//////////////////////////
case 0xEB:temp=0x01;break;
case 0xDB:temp=0x02;break;
case 0xBB:temp=0x03;break;
case 0x7B:temp=0x0d;break;
////////////////////////
case 0xE7:temp=0x0e;break;
case 0xD7:temp=0x0a;break;
case 0xB7:temp=0x0f;break;
case 0x77:temp=0x10;break;
/////////////////////////
default:temp=0x00;break;
}
disan();

}
void main()
{
  MCUCSR|= 1<  MCUCSR|= 1<DDRC=0XFF;
DDRB=0XFF;
DDRD=0XFF;
DDRA=0X0F;
while(1)
{
display(1);
diskey();
clean_junk();
}
}

 

关键字:ATmega16  单片机  科学计算器程序 引用地址:ATmega16 单片机科学计算器程序(带有加减乘除功能)初步收尾了

上一篇:ST7586S的AVR单片机驱动程序
下一篇:ATmega16驱动ds12c887显示于lcd1602

推荐阅读最新更新时间:2024-03-16 13:47

C8051 F12X中多bank的分区跳转处理
在8051核单片机庞大的家族中,C8051F系列作为其中的后起之秀,是目前功能最全、速度最快的8051衍生单片机之一,正得到越来越广泛的应用。它集成了嵌入式系统的许多先进技术,有丰富的模拟和数字资源.是一个完全意义上的SoC产品。 C805IFl2X作为该系列中的高端部分,具有最快100MIPS的峰值速度,集成了最多的片上资源。其128 KB的片上Flash和8 KB的片上RAM足以满足绝大多数应用的需求。使用C8051F12X,只需外加为数不多的驱动和接口,就可构成较大型的完整系统。只是其中128 KB的Flash存储器不可避免地要处理bank分区问题。 幸运的是Keil C51开发环境对C8051F系列有良好的支持,包括一般的跨
[单片机]
基于MN101EF32D单片机的电子血压计设计
引言   血压是极为重要的健康指标,血压测量的准确与否直接关系到人们的健康。国家把 血压计 列为强制检定计量器具。一般医院使用的水银 血压计 基于人工柯氏音法,这种方法存在一些固有的缺点:一是放气的快慢对读数有直接影响,国际标准放气速度为每秒3~5mmHg,而不同的医生放气有快有慢,会影响测量的准确度;二是这种方法以人的视觉、听觉和协调程度为主要依据,很难标准化。为此,本设计从血压的检测方法着手,采用日本松下公司高速、低功耗的MN101EF32D单片机,作为血压计测量、控制、数据读写、数据显示的核心,可准确地采用示波法(振荡法)测量血压。 工作原理   示波法(振荡法)是根据袖带在减压过程中,其压力振荡波的振幅变化包络
[医疗电子]
基于MN101EF32D<font color='red'>单片机</font>的电子血压计设计
单片机编程技术学习攻略
学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。   但是,许多的学习者(包括在校学生),他们总不得要领,从一开始学习时的热情高涨,到最后的沮丧放弃,使得大家对单片机产生了既爱又怕的感觉。   学习单片机并不象学习传统数字电路或模拟电路那样比较直观,原因是除了“硬件”之外还存在一个“软件”的因素。正是这个“软件”因素的存在,使得许多初学者怎么也弄不懂单片机的工作过程,他们怎么也不明白为什么将几个数送来送去,就能控
[单片机]
MSP430单片机上使用M430/OS对系统的意义解析方案
引 言 1 在MSP430上使用RTOS的意义 一般的观点认为,MSP430上使用RTOS是没有意义的这是可以理解的。因为MSP430的硬件资源有限(以MSP430F149为例,只有2KB RAM),任何商业操作系统都不可能移植到MSP430上。目前在MSP430上得到应用的RTOS,只有μC/OS-II,但使用μC/OS-II 必须有昂贵的C编译器,这严重地限制了其在MSP430上的使用。 正是基于以上情况,笔者在应用MSP430过程中,编写了一个基于MSP430F149的RTOS,暂定名为M430/OS。它占用RAM量少、代码短小,稍加改动就可适用于大多数其它MSP430单片机。 在MSP430单片机系统上使用M430
[单片机]
瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code
客户现可以在VS Code中设计和调试瑞萨嵌入式处理器的软件,与瑞萨自有e2 Studio IDE相辅相成 2023 年 8 月 1 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子今日宣布其客户现可以使用Microsoft® Visual Studio Code(VS Code)开发瑞萨全系列微控制器(MCU)和微处理器(MPU) 。瑞萨已为其所有嵌入式处理器开发了工具扩展,并将其发布在Microsoft VS Code网站上,使习惯于使用这款流行的集成开发环境(IDE)和代码编辑器的大量设计师能够在他们熟悉的开发环境中工作。 VS Code IDE简化并加速了跨多种平台和操作系统的代码编辑。 通过提供对VS
[单片机]
瑞萨电子<font color='red'>MCU</font>和MPU产品线将支持Microsoft Visual Studio Code
2012年MCU低功耗之王到底花落谁家?
低功耗,拼的到底是什么? 低功耗一直是各大芯片厂商的兵家必争之地。今年3月份以来,市场上一下子出来很多基于M0、M3内核的产品,瑞萨、飞思卡尔、德仪、Microchip这四大家族各自标榜着自家产品的低功耗技压群雄,每个厂商对于降低功耗都有不同的处理方式,然而低功耗之战,拼的到底是什么? 飞思卡尔今年8月份举办的FTF北京站上的一例功耗对比的demo演示引发了一系列的低功耗之争,在那一场比赛中Kinetis L完胜。但是,也有业内人士表示,这个实验只是通过跑一段程序就说明哪家MCU更省电,有些片面,毕竟MCU还要从外设功耗、待机功耗等综合考量。于是,MCU几大家族纷纷搬出自己的看家之作,TI的金刚狼、瑞萨的RL78家族、Micr
[单片机]
芯驰MCU成为首个荣获国密二级认证的车规芯片
近日,芯驰科技高性能高可靠车规MCU 芯片E3获得由国家密码管理局(以下简称“国密局”)商用密码检测中心认证的《商用密码产品认证证书》。芯驰科技成为国内首个获得国密二级认证的车规芯片企业。 本次认证涵盖了对安全芯片的安全等级、密码算法、安全芯片接口、密钥管理、敏感信息保护等多维度项目的综合评估,芯驰科技E3成功通过所有项目认证,获得国密二级认证。 随着智能网联汽车的逐渐成熟,人车路协同将极大增加车与车、车与人、车与路的密切沟通。此外,“软件定义汽车”趋势下未来的OTA升级会更加频繁,任何一个环节中的信息交互遭遇黑客攻击,都有可能造成严重的安全事故。芯驰车规芯片的信息安全保护可以有效降低这一风险。 根据国密局对芯片信息安
[汽车电子]
芯驰<font color='red'>MCU</font>成为首个荣获国密二级认证的车规芯片
基于单片机的16×64LED点阵显示屏的设计
  0 引言   LED点阵显示屏是一种简单的汉字显示器,具有价廉、易于控制、使用寿命长等特点,可广泛应用于各种公共场合,如车站、码头、银行、学校、火车、公共汽车显示等。本文详细介绍了一种低廉的16x64点阵LED显示屏的设计过程。   1 硬件系统设计   本系统采用AT89C52单片机作控制器,整个电路主要由单片机控制及其接口电路、驱动显示电路、电源电路等部分组成。为了简化显示屏电路,降低成本,本系统在单片机部分不加字库存储器。而在PC机上编辑汉字和字符显示信息,并将其转换为相应的点阵显示数据,然后通过串口(采用RS-232通信标准)送给单片机存储并进行显示处理。图1所示为其硬件系统原理图。   1.1 单片机控制
[单片机]
基于<font color='red'>单片机</font>的16×64LED点阵显示屏的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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