简易计算器

简易计算器
简易计算器

单片机课程设计题目:简易计算器的设计

专业:06电子信息科学与技术

姓名:倪耀兴

学号:060303008

指导老师:蔡植善

理工学院电信系

设计日期:2009年5月 12日

简易计算器的设计

1.引言------------------------------------------------2

2. 设计任务和要求-------------------------------------2 2.1设计要求-------------------------------------------0 2.2设计方案的确定-------------------------------------2

2.3主要元器件介绍--------------------------------------------------------3

3.简易计算器的硬件设计--------------------------------4 3.1键盘电路的设计----------------------------------4

3.2显示电路的设计---------------------------------4

4.简易计算器的软件设计-------------------------------6 4.1简易计算器的软件规则--------------------------------6 4.2中断查键的按键程序设计-------------------------------7 4.3显示模块程序的设计----------------------------7

4.4主程序的设计---------------------------------------7

5.调试及性能分析--------------------------------------7 5.1硬件调试--------------------------------------------7 5.2软件调试--------------------------------------------7 5.3相关可靠性软件设计----------------------------------7

5.4完整的源程序---------------------------------------------------------8-

6.关键程序的流程图-------------------------------------17

7.设计心得------------------------------------------19

8. 参考文献-----------------------------------------19

1.引言

单片机实用接口技术是电子信息工程专业本科生的必修课程。在完成理论学习和必要的实验后,本科学生掌握了单片机的基本原理和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。单片机实用接口技术既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,同时学习查阅资料、参考资料的方法。单片机实用接口技术主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对单片机的认识,充分发挥学生的个体创新能力。

2. 设计任务和要求

2.1设计要求

功能要求:

①可以对1000以内的正负数进行加减乘除的运算,有效位数取6位。

②用1602LCD作显示器。

③键盘为4×5,包括0~9 十个数字键以及+、-、×、÷、enter、clear、负号、光标左移、光标右移和小数点等20个键。

键盘扫描可选用非编码按键,也可用元件CH451(编码按键)。

2.2设计方案的确定

在日常生活中,绝大部分的计算器都是由按键控制模块、LCD液晶显示模块两个模块组成。按照2.1的设计要求,本课题需要使用LCD1602液晶显示和CH451键盘扫描4*5键盘.4*5键盘定义十个数字键,十个功能键,使用串行静态显示显示运算结果。主程序进行初始化,采用中断扫描查键,每次按键后调用显示子程序。

设计总框图如下:

2.3主要元器件介绍

1、LCD液晶显示模块:现在的字符型液晶模块已经是单片机应用设计中最常用的信息显示器件了。专门用于显示字母、数字、符号等点阵式LCD。1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。1602型LCD可以显示2行16个字符,有8位数据总线D0~D7和RS,R/W,EN三个控制端口,采用A T89C51单片机控制。

2、按键控制模块:CH451 是一个的整合了数码管显示驱动和键盘扫描控制及μP 监控的多功能外围芯片。CH451 内置RC振荡电路,可以动态驱动8位数码管或者64位LED,具有BCD译码、闪烁、移位等功能;同时还可以进行64 键的键盘扫描;CH451 通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。另外,其内置64 键键盘控制器,键盘中断,低电平有效输出。还提供按键释放标志位,可供查询按键按下与释放。

上图是在未启用键盘扫描功能时时序

下图为单片机从CH451获得

按键代码的过程是:

①输出一位数据,即向DIN输出读取按键代码命令的最低位数据B0,并向DCLK输出低电平脉

冲;

②以同样的方式,输出读取按键代码命令的位数据B1~B11;

③向LOAD 输出低电平脉冲,其中包括一个上升沿使CH451 加载串行数据,CH451 分析出是读取按键代码命令,立即在DOUT 输出按键代码的最高位数据K6;

④读取一位数据,即从DOUT 输入按键代码的最高位数据K6,并向DCLK 输出低电平脉冲;

⑤以同样的方式,输入按键代码的位数据K5~K0。

3.简易计算器的硬件设计

简易计算器主要包括:键盘电路,显示电路。

3.1键盘电路的设计

键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。在单片机设计中,使用CH451芯片可以组成编码键盘,同时还可以兼顾LCD的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。本课题需要的是20个按键,故选择用编码键盘,分别由SEG0-7、DIG0-7端口控制,低电平有效。在键盘扫描期间,DIG7~DIG0 引脚用于列

扫描输出,SEG7~SEG0 引脚都带有内部下拉电阻,用于行扫描输入;当启用键盘扫描功能后,DOUT引脚的功能由串行接口的数据输出变为键盘中断以及数据输出。CH451 定期在显示驱动扫描过程中插入键盘扫描,并实行两次扫描,只有当两次键盘扫描的结果相同时,按键才会被确认有效。

3.2显示电路的设计

根据任务的要求,采用LCD数码管进行显示是一种经济实用的方法,1602型LCD的显示由单片机的P0口驱动,由于是P0口驱动,需加一个排阻增大其驱动电流。P1口控制LCD的数据/命令、读/写和使能信号。

最终电路如下图所示:

设计的PCB图:

4.简易计算器的软件设计

4.1简易计算器的软件规则

简易计算器的程序主要包括以下功能模块:

1、中断查键模块,分为读键程序、判键程序段、运算操作子程序等部分;

2、基于LCD的静态显示模块;

3、主模块,为系统的初始化。

4.2中断查键的按键程序设计

进入外部中断0的中断程序后,首先重新付初值,然后调用读键程序,如果有键按下,则判断按键是否与上次按键相同,如果相同则判断按键相应位是否为1,如果不为1,说明这不是持续按键导致的按键相应,并且进行相应的程序。如果不是则退出中断程序。

数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。

首先对数字键的程序段进行相应的设计,如果运算键(+、-,×,÷)响应标志不为1,则将输入的数字送入第一个操作数缓存区,并且清空所有的响应位。否则送入第二个操作数缓存区。

其次对功能键的程序段进行相应的设计。

如果运算键(+、-,×,÷)第一次被按下,则置相应的标志位为1,并且将运算键响应标志位置1,清空第二个操作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执行上次按下的运算键的运算,置相应的标志位为1,并且将运算键响应标志位置1,清空第二个操作数的缓存区,为输入操作数做准备。

如果是’=’键按下,则调用运算操作子程序。

从上面的设计中我们可以看到,本程序段需要八个输入缓存区,其中四个为第一个操作数BCD码缓存区,另外四个为第二个操作数BCD码缓存区,需要五个标志位,一个为运算键响应标志位,另外四个为运算符号标志位,分别为加法响应标志位、减法响应标志位、乘法响应标志位和除法响应标志位。并且调用了一个运算操作子程序,对此我们进行如下的子程序设计。

首先将第二个操作数的BCD码进行转换,得到相应的二进制数,并且放入相应的缓存区,判断结果响应位是否为1,如果不为1,则将第一个操作数的BCD码进行转换,得到相应的二进制数,并且放入相应的缓存区,按照运算符号响应标志位执行相应的程序,并将运算结果放入相应的缓存区,并且将结果响应标志位置1,将其它响应标志位置0;如果结果响应位为1,则将上次的运算结果存入第一个操作数缓存区,再执行相应的操作,最后将得到的运算结果放入相应的缓存区,并且将其它响应标志位置0。

运算操作子程序需要十个缓存区,两个为第一个操作数的二进制数,两个为第二个操作数的二进制数,两个为结果的二进制数,四个为结果的BCD码缓存区,一个标志位,为结果响应标志位。

如果要支持负运算,只要在定义一个标志位:负数标志位,并将运算操作子程序作一定的修改,首先考虑到负数是运算减法时产生的(键盘上没有负数输入键),所以运算减法时,

如果负数标志为0时,当第一个操作数比第二个操作数小时,则将两个操作数互换相减,并置负数标志位为1;如果为1,则将两个操作数相加,并置负数标志位为1。运算加法时,如果负数标志位为1,则先比较两个操作数大小,如果第一个操作数大,则将第一个操作数减去第二个操作数,并置负数标志位为1,否则将第二个操作数减去第一个操作数,并将负数标志位置0。乘法与除法运算是不需要考虑负数的影响的,故不需要更改。

4.3显示模块程序的设计

由于使用的是静态显示,故先要对SCON进行相关设置,让串口工作在方式0下,设置1602为8位的数据接口,两行显示,5、10点阵字符,显示打开,光标开并不闪烁。

4.4主程序的设计

主程序主要是用来进行初始化的,调用自检程序,清空各个标志位,清空缓存区,给定外部中断0工作方式。在等待外部中断0中断时主程序在相关程序段内循环,这样可以降低功耗。

5.调试及性能分析

5.1硬件调试

在本次实验中首次采用单面板,但本实验要求有CH451D的贴片,所以在画PCB是要特别注意,而且在做板的过程中需要注意的细节很多,由于之前有做过相应的实验,所以难度降低了很多。硬件调试时首先要检查5V电源是否有短路,再插上电源检查各个芯片是否会发热。然后要检查晶振是否会正常起振,看AT89S51的18脚是否有约12MHZ的频率,看30是否有1/6的晶振频率;再检查CH451的的使能端是否正常工作,,最后看LCD是否有显示。当检查没问题了就可以进行软件调试了。

5.2软件调试

因为CH451和LCD没有直接的联系,所以他们可以独立调试。

首先,可察看LCD是否可以显示字符、字符串。然后在看是否可以显示自行定义的内容和控制显示的位置。

然后,调试CH451扫描的按键,看按下按键时是否会进入中断,各个键子的值是否对应正确,扫描按键的调试。主要利用那个扫描,设一个中断函数,每次有键按下,单片机的外部中断被激活,然后进入中断,在中断函数里读一组数据,然后再LCD里输出,编写就是要编读数据那部分就行,编写加载数据那部分,按照时序图来编啊。

再则,把前面两个程序合在一起,直接下载到芯片上来调试看按下按键时LCD是否会显示该按键的值。

最后,把加减乘除运算子程序和一些功能按键的子程序加入到主程序中,进行调试,看按键的操作和功能是否已经实现计算器要求的功能。

5.3相关可靠性软件设计

1、为防止程序死循环,可以在软件中加入看门狗技术

2、由于CH451带有防抖措施,所以本身可以防止键盘抖动造成按键错误。

5.4完整的源程序

//按键对应功能//

/*1 2 3 4 5

6 7 8 9 0

+ - * / =

. clear 左移右移负号*/

#include

#include

#define uchar unsigned char

#define uint long int

//---------定义引脚--------------------

bit clr=0;

bit ok=0;

bit xiaoshu=0;

bit jiego=0;

sbit dout = P3^2;

sbit load = P2^2;

sbit din = P2^1;

sbit dclk = P2^0;

sbit LCD1602_RS=P1^0;

sbit LCD1602_RW=P1^1;

sbit LCD1602_E=P1^2;

//---------定义变量--------------------

uchar ch451_key=0xff;

uchar yun_sign;

uchar xiabiao=0;

uchar tab[32];

float opr_1=0,opr_temp=0,end=0;

uchar f_flag1=0, f_flag2=0,p_flag=0,f_wei=0;

//---------声明函数--------------------

void ch451_init(void); //CH451初始化

void ch451_write(uint command);//写命令或数据到ch451 uchar ch451_read(void); //读按键值

void delay(uint k); //延时程序

uchar get_char(void);//按键对应字符

void LCD_init(void);//LCD初始化;

void LCD_inter_command(unsigned char command);//LCD写入控制字void LCD_inter_dat(unsigned char dat);//LCD写入要显示的数据

void lcdbusy();//LCD查忙时

void display(void);//显示

void spec(void);//按键特殊功能

void get_end(void);//结果

void f_flag();//判断负号

//-------- 主函数----------------------

void main()

{

LCD_init();

ch451_init();

EA = 1;

LCD_inter_command(0x01);

while(1)

{

if(ok){

display();

ok=0;clr=1;

}

}

}

void ch451_init(void)

{

EX0 = 1;

din = 0;

din = 1;

ch451_write(0x403);

ch451_write(0x580);

ch451_write(0x800|1);

ch451_write(0x900|1);

ch451_write(0xa00|1);

}

void ch451_write(uint command) { uchar i;

EX0 = 0;

load = 0;

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

{

din = command&1;

dclk = 0;

command>>=1;

dclk = 1;

}

load = 1;

EX0 = 1;

}

uchar ch451_read(void)

{ uchar key=0x07;

uchar i;

EX0=0;

load = 0;

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

{

din = key &1;

dclk = 0;

key>>=1;

dclk =1;

}

load = 1;

key = 0;

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

{

key<<=1;

key|= dout;

dclk =0;

dclk =1;

}

EX0 =1;

return key;

}

void EX0_ISR(void)interrupt 0

{

uchar temp;

ch451_key=ch451_read();

spec();

if(clr) {LCD_inter_command(0x01);clr=0;}

temp=get_char();

if(temp){tab[xiabiao++]=temp; LCD_inter_dat(temp);} if(ok) get_end();

}

uchar get_char(void)

{

uchar dis=0;

switch(ch451_key)

{

case 0x40:dis='1';break;

case 0x41:dis='2';break;

case 0x42:dis='3';break;

case 0x43:dis='4';break;

case 0x44:dis='5';break;

case 0x48:dis='6';break;

case 0x49:dis='7';break;

case 0x4A:dis='8';break;

case 0x4B:dis='9';break;

case 0x4C:dis='0';break;

case 0x50:dis='+';f_wei=1;break;

case 0x51:dis='-';f_wei=1;break;

case 0x52:dis='x';f_wei=1;break;

case 0x53:dis=0xfd;f_wei=1;break;

case 0x54:dis='=';

ok=1;LCD_inter_command(0xc0);

break;

case 0x58:dis='.';break;

case 0x59:

LCD_inter_command(0x01);

xiabiao=0;f_flag1=0;f_flag2=0;

p_flag=0;f_wei=0;

break;

case 0x5C:{dis=0xb0;p_flag++;f_flag();}break;

default: break;

}

return dis;

}

void spec(void)

{

switch(ch451_key)

{

case 0x5A:LCD_inter_command(0x10);{if(xiabiao>0)xiabiao-=1;}break; case 0x5B:LCD_inter_command(0x14);{xiabiao+=1;}break;

default:break;

}

}

void delay(unsigned int k)

{

while (k--);

}

void LCD_inter_command(unsigned char command)

{

delay(5000);

LCD1602_RW=0;

LCD1602_E=1;

P0=command;

LCD1602_E=0;

lcdbusy();

}

void LCD_init(void)

{delay(5000);

LCD_inter_command(0x01);

delay(5000);

LCD_inter_command(0x3C);

delay(5000);

LCD_inter_command(0x0E);

delay(5000);

}

void LCD_inter_dat(unsigned char dat) {

delay(5000);

LCD1602_RS=1;

LCD1602_RW=0;

LCD1602_E=1;

P0=dat;

LCD1602_E=0;

lcdbusy();

}

void lcdbusy()

{

P0=0xFF;

LCD1602_RW=1;

LCD1602_E=1;

while((P0&0x80)==1);

}

void display(void)

{

long int temp=end;

uint xiao_temp;

uint xx;

xx=fabs(end);

xiao_temp=fabs(end)*1000-xx*1000;

if(xx>999999) LCD_inter_dat((xx/1000000)%10+'0'); if(xx>99999) LCD_inter_dat((xx/100000)%10+'0'); if(xx>9999) LCD_inter_dat((xx/10000)%10+'0');

if(xx>999) LCD_inter_dat((xx/1000)%10+'0');

if(xx>99)LCD_inter_dat((xx/100)%10+'0');

if(xx>9)LCD_inter_dat((xx/10)%10+'0');

LCD_inter_dat(xx%10+'0');

if(xiao_temp!=0)

{

LCD_inter_dat('.');

LCD_inter_dat((xiao_temp/100)%10+'0');

LCD_inter_dat((xiao_temp/10)%10+'0');

LCD_inter_dat(xiao_temp%10+'0');

}

}

void get_end(void)

{uchar f_flag=0;

float xiaoshu=1,b=0;

uchar xiao_flag=0;

uchar i=0;

while(i<=xiabiao)

{

while(tab[i]<=0x39&&tab[i]>=0x30)

{

opr_1*=10;

opr_1+=tab[i++]-0x30;

}

switch(tab[i])

{

case '.': xiao_flag=1;break;

case '+': xiaoshu=1;yun_sign='+';if(opr_temp==0){end=opr_temp=opr_1;}else {opr_t emp+=opr_1;}opr_1=0;break;

case '-': xiaoshu=1;yun_sign='-';if(opr_temp==0){end=opr_temp=opr_1;}else {opr_te mp-=opr_1;}opr_1=0;break;

case 'x': xiaoshu=1;yun_sign='x';if(opr_temp==0){end=opr_temp=opr_1;}else {opr_te mp*=opr_1;}opr_1=0;break;

case 0xfd: xiaoshu=1;yun_sign='/';if(opr_temp==0){end=opr_temp=opr_1;}else {opr_ temp/=opr_1;}opr_1=0;break;

case '=':

{if(f_flag1==1)opr_temp=b-opr_temp;

switch(yun_sign)

{

case '+': if(f_flag2==1)opr_1=b-opr_1;end=opr_temp+opr_1;if(end<0){LCD_inte r_dat('-');}break;

case '-':if(f_flag2==1)opr_1=b-opr_1;end=opr_temp-opr_1;if(end<0){LCD_inter_ dat('-');}break;

case 'x':if(f_flag2==1)opr_1=b-opr_1;end=opr_temp*opr_1;if(end<0){LCD_inter_ dat('-');}break;

case '/':if(f_flag2==1)opr_1=b-opr_1;end=opr_temp/opr_1;if(end<0){LCD_inter_d at('-');}break;

default:break;

}}

ok=1;

xiabiao=0;

break;

default:break;

}

i++;

if(xiao_flag)

{

while(tab[i]<=0x39&&tab[i]>=0x30)

{

xiaoshu*=0.1;

opr_1+=(tab[i++]-0x30)*xiaoshu;

xiao_flag=0;

}

}

}

opr_1=0;

opr_temp=0;

xiabiao=0;

xiaoshu=1;

}

void f_flag()

{if(p_flag==1&&f_wei==0){f_flag1=1;f_flag2=0;} if(p_flag==1&&f_wei==1){f_flag1=0;f_flag2=1;} if(p_flag==2&&f_wei==1){f_flag1=1;f_flag2=1;} }

总流程图:

Display():

get_end():

7.设计心得

课程设计维持了两周的时间,在五一前后,其实老师给了我们充足的时间,老师考虑到各方面的因素,给我合理的条件来完成这一次课程设计的作品。

在完成设计的过程中,遇到了许多问题,但是学到的也很多。当然更注重对是学到的东西。

从开始选题到把设计作品完成花了很长的时间,在选择这个题目以前,以为会很轻松的完成,但是事实说明,想的跟做的是不一样的。下面我说说这一次对本次课程设计的心得:一开始选择的这个题目,最难的就CH451这块芯片,以前从来没接触过,要花较长的时间来学习这块芯片的资料很用法。花了几天的时间把CH451这块芯片了解了,才开始着手话原理图,当然原理图不会很难了,主要就按键部分很LCD显示部分,由于之前做了实验板面所以花起来比较顺手,但是老师要求CH451是贴片的,所以有点疑虑是要做单面板还是双面便,由于以前做的板都是单面板,所以还是习惯做单面板,但是画PCB就要特别注意了。幸好参加了暑期的培训,所以画起来不会有很大的困难,但是在布局上还是花了很多的时间,不过贴片要布在底部,所以会比较不好看。到了做板就比较快了,以为已经有一定的基础了。很顺利,一次就把板做出来了,接下来就是最关键的调试了。自己处初初的编了一个简单的程序来测试LCD,测试通过,但不知道怎么编程序来测试按键部分,在网上找到了相应程序,有CH451的初始化、读写等程序,结合自己对芯片的了解,按键键码自己搞定了。

以上通过就是硬件可以用了,接下来就是最痛疼的软件了,虽然一些初始化的程序和读写程序都有了,但是要把整个程序编出来还是有一定难度的。

用来整整一周的时间来编写程序,遇到很多问题而且不会写流程图,编起来很艰难,都是一步一步的试着编,然后在相应的做调试,和同学讨论很多,当然的得到很多的启发。最难的就是如何处理运算部分,想了很久但是还是没有一个完整的思路,最好就参考的其他同学的程序,用相似的算法编了程序,当然做了一部分的修改很变化,最后的程序基本面满足老师所要求的功能,但是我觉得那样并不够,我想学的更多一些,所以就一遍遍的修改程序,完善程序,但是由于是第一次写长程序,所以还是没能写得很好,但是我会慢慢的,一步一步的学,打好基础。

经过这一次的课程设计,我学到了很多,对专业知识也有了更近一步的了解,我会继续的努力。

8. 参考文献

[1]孙玉才MCS-51系列单片微型计算机及其应用(第4版)东南大学出版社2004

[2] 李华孙晓民李红青徐平张新宇MCS-51系列单片机实用接口技术北京航空航天大学出版社1993.8

[3] 谭浩强C程序设计(第三版)强化大学出版社2005.7

[4] 李群芳,黄建.单片微型计算机余接口技术.北京:电子工业出版社,2001

单片机简易数字计算器汇编

基 于 单 片 机 的 简 易 计 算 器 设 计 自动化控制一班 kaoyanbaomu521

摘要: 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 关键词: 单片机计算器范围加减乘除 1 引言 1.1 计算器的历史 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 1.2 电子计算器的特殊键 在使用电子计算器进行四则运算的时候,一般要用到数字键,四则运算键和清除数据键。除了这些按键,还有一些特殊键,可以使计算更加简便迅速。 2 单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。 3 芯片简介 3.1 MSC-51芯片简介 MCS-51单片机内部结构 8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。

简易计算器的设计与实现

沈阳航空航天大学 课程设计报告 课程设计名称:单片机系统综合课程设计课程设计题目:简易计算器的设计与实现 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计内容 (1) 1.2设计原理 (1) 1.3设计思路 (2) 1.4实验环境 (2) 第2章详细设计方案 (3) 2.1硬件电路设计 (3) 2.2主程序设计 (7) 2.2功能模块的设计与实现 (8) 第3章结果测试及分析 (11) 3.1结果测试 (11) 3.2结果分析 (11) 参考文献 (12) 附录1 元件清单 (13) 附录2 总电路图 (14) 附录3 程序代码 (15)

第1章总体设计方案 1.1 设计内容 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除1位无符号数字的简单四则运算,并在6位8段数码管上显示相应的结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的8751单片机,输入采用4×4矩阵键盘。显示采用6位8段共阳极数码管动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,最终选用汇编语言进行编程,并用protel99se涉及硬件电路。 1.2 设计原理 在该课程设计中,主要用到一个8751芯片和串接的共阳数码管,和一组阵列式键盘。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 1)提出方案 以8751为核心,和数码管以及键盘用实验箱上已有的器件实现计算器的功能。 2) 总体方案实现 (1)要解决键值得读入。先向键盘的全部列线送低电平,在检测键盘的行线,如果有一行为低电平,说明可能有按键按下,则程序转入抖动检测---就是延时10ms再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

C语言简易计算器的实现

目录 一.课程设计目的 (1) 二.设计环境 (1) 三.设计内容 (1) 四.设计说明 (2) 五.设计程序流程图 (2) 六.调试 (4) (1)错误原因分析一 (4) (2)语法错误 (5) (3)逻辑错误 (5) 七. 调试结果图 (6) 八. 结论与心得体会 (7) 九.附录 (8) 具体代码实现 (8) 十.参考文献 (18)

一.课程设计目的 1.通过一个学期的学习,我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践来巩固我 们的知识,特别是学计算机专业的,我们更应该注重这一环节, 只有这样我们才能成为一个合格的计算机人才。通过这一个课程 设计,进一步来巩固所学的语句,如:循环,和分支结构的运用。还要熟悉四则运算和函数的算法。 2.通过这次课程设计扩展自己的知识面,课本上的东西是远 远不够的,可以通过上网或去图书馆查资料等方式得到一些新的 知识, 3.通过课程设计,加深对课程化设计思想的理解,能进行一 个系统功能分析,并设计一个合理的模块化结构,提高程序开发 能力。 二.设计环境 1.硬件:一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz 2.软件:安装有Microsoft visual c++6.0 三.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现

简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 (1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中; (2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果; (3)画出部分模块的流程图; (4)编写代码; (5)程序分析与调试。 四.设计说明 1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 五.设计程序流程图

AT89C51单片机简易计算器的设计

AT89C51单片机简易计算器的设计 单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数

值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

基于LabVIEW的简易计算器设计

第1章绪论 1.1 虚拟仪器简介 虚拟仪器(virtual instrument)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。上面的框图反映了常见的虚拟仪器方案。 虚拟仪器实际上是一个按照仪器需求组织的数据采集系统。虚拟仪器的研究中涉及的基础理论主要有计算机数据采集和数字信号处理。目前在这一领域内,使用较为广泛的计算机语言是国NI公司的LabVIEW。 虚拟仪器的起源可以追溯到20世纪70年代,那时计算机测控系统在国防、航天等领域已经有了相当的发展。PC机出现以后,仪器级的计算机化成为可能,甚至在 Microsof t公司的 Windows 诞生之前,NI公司已经在Macintosh计算机上推出了LabVIEW2.0 以前的版本。对虚拟仪器和 LabVIEW [2]长期、系统、有效的研究开发使得该公司成为业界公认的权威。目前LabVIEW 的最新版本为 LabVIEW2011,LabVIEW 2009 为多线程功能添加了更多特性,这种特性在1998 年的版本 5 中被初次引入。使用 LabVIEW 软件,用户可以借助于它提供的软件环境,该环境由于其数据流编程特性、LabVIEW Real-Time 工具对嵌入式平台开发的多核支持,以及自上而下的为多核而设计的软件层次,是进行并行编程的首选。 普通的 PC 有一些不可避免的弱点。用它构建的虚拟仪器或计算机测试系统性能不可能太高。目前作为计算机化仪器的一个重要发展方向是制定VXI 标准,这是一种插卡式的仪器。每一种仪器是一个插卡,为了保证仪器的性能,又采用了较多的硬件,但这些卡式仪器本身都没有面板,其面板仍然用虚拟的方式在计算机屏幕上出现。这些卡插入标准的 VXI 机箱,再与计算机相连,就组成了一个测试系统。VXI仪器价格昂贵,目前又推出了一种较为便宜PXI 标准仪器。 1.2 LabVIEW简介 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C 和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语

简单计算器设计报告

简单计算器设计报告 045 一、基本功能描述 通过文本编辑框实现基本整数的加减乘除运算 二、设计思路 如下图是整个程序进行的流程图,基本方法是在ItemText文本编辑框输入字符,程序对字符进行判断,若输入不是数字则提示错误。输入正常时,通过下拉框ComboBox_InsertString 选择相应运算符。点击等号IDC_OK,即可得出运算结果。操作简便,算法简单。 三、软件设计 1、设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定 1

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成 MFC AppWizard就建立了一个基于对话窗口的程序框架

四、主要程序分析 1、字符判定函数 BOOL IsInt(TCHAR*str) { int i=atoi(str); TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) { return FALSE; } Else { return TRUE; } } 该函数通过atoi把文本编辑框读取的字符转换为数字,再通过wsprintf把转换数字转换为字符,通过strcmp比较原字符和转换得来的字符。如相同返回true,不通则返回false. 3、运算符选择程序 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP); ComboBox_InsertString(hwndComboOP,-1,TEXT("+")); ComboBox_InsertString(hwndComboOP,-1,TEXT("-")); ComboBox_InsertString(hwndComboOP,-1,TEXT("*")); ComboBox_InsertString(hwndComboOP,-1,TEXT("/")); return TRUE; } 3

简易计算器设计-msp430-C语言

简易计算器

目录 摘要…………………………………………………………………………………P3 关键字………………………………………………………………………………P3 一、设计要求………………………………………………………………………P3 二、方案论证与选择………………………………………………………………P3 2.1 单片机选择………………………………………………………………P3 2.2 LCD显示屏选择…………………………………………………………P3 2.3 键盘选择…………………………………………………………………P4 2.4 CPU工作方式选择………………………………………………………P4 三、系统实现………………………………………………………………………P4 3.1 硬件设计…………………………………………………………………P4 3.1.1系统框图……………………………………………………………P4 3.1.2 盘的电平设计以及与单片机的连接 键……………………………P5 3.2.3单片机与显示器的连接…………………………………………… P5 3.2软件设计…………………………………………………………………… P6 四、作品性能测试与分析…………………………………………………………P10 4.1试性能概览………………………………………………………………P10 4.2误差分析…………………………………………………………………P12

五、参考文献………………………………………………………………………P12 六、附录……………………………………………………………………………P13 6.1计算器功能介绍…………………………………………………………P13 6.2仿真电路图………………………………………………………………P13 6.3元件清单…………………………………………………………………P13 6.4原程序代码………………………………………………………………P14 摘要:本设计以低功耗单片机MSP430V136T、1602字符型液晶屏和4*4简易键盘为主要器件,来实现加、减、乘、除、开根号、平方、求倒数等运算。设计中分别采用P1口低4位和P2口低4位与键盘的行列线相连,用于采集中断信号并分析键值;键盘规格为4*4,由于所需的功能键数大于16,因此需要进行按键复用;单片机的P3口连接显示器的D0~D7端,用于输出显示数据或控制命令;选用P4口中的3、4和5口用于实现显示屏的控制功能:使能、控制/数

单片机简易计算器的设计

基于AT89C51单片机简易计算器的设计 【摘要】单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除六位数范围内的基本四则运算,并在LCD上显示相应的结果。设计电路采用AT89C51单片机为主要控制电路,利用MM74C922作为计算器4*4键盘的扫描IC读取键盘上的输入。显示采用字符LCD静态显示。软件方面使用C语言编程,并用PROTUES仿真。 【关键词】简单计算器单片机 LCD 【正文】 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值

转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图: 二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

第02讲 简易计算器的设计

第02讲计算器 2.1 计算器简介 大家都知道,计算器是日常生活中不可缺少的一个工具,在Microsoft的Windows操作系统中,附带了一个计算器程序,有标准型和科学型两种模式。Windows XP下的标准型和科学型计算器程序分别如图2-1和图2-2所示。 图2-1 Windows XP下的标准型计算器 图2-2 Windows XP下的科学型计算器 Windows操作系统下附带的计算器程序功能相当的强大,本课我们将模仿Windows的计算器,使用Visual C# 2005开发平台开发一个功能相对简单的计算器应用程序,它能完成加、减、乘、除运算。 接下来详细的介绍简易计算器的设计方法和步骤。

2.2 界面设计及属性设置 用户界面设计是软件开发中非常重要的一个部分,用户界面的好坏直接影响软件的质量,本节将介绍如何设计简易计算器的用户界面以及界面上各控件的属性设置。 2.2.1 界面设计 打开Visual Studio 2005开发工具,新建一个Windows应用程序,然后在窗体上依次放置1个TextBox和17个Button控件,如图2-1所示(设置好属性后)。 图2-1 计算器用户界面 2.2.2 属性设置 窗体和各控件的属性设置如表2-1所示。 表2-1 窗体和各控件的属性

2.3 编写代码 本程序需要用到一些公共变量,例如用来接收操作数、运算结果,判断输入的是否为小数等,因此首先在代码的通用段声明以下变量: //****************************************************************** double num1, num2, result; // 操作数及运算结果 bool decimalFlag = false; // 判断输入的是否为小数 string myOperator; // 操作类型 //******************************************************************

简易计算器设计实验报告

简易计算器设计实验报告 一.设计任务及要求 1.1实验任务: 根据计算器的原理设计一个具有加减乘除功能的简易计算器。如:5+3*4/8=4。 1.2 实验基本要求: (1)实现最大输入两位十进制数字的四则运算(加减乘除)。 (2)能够实现多次连算(无优先级,从左到右计算结果)。 如:12+34*56-78/90+9=36 (3)最大长度以数码管最大个数为限,溢出报警。 二.实验设计方案 (1)用QuartusII的原理图输入来完成系统的顶层设计。 (2)用VHDL编写以及直接拖模块来各功能模块。 (3)通过2个脉冲分别实现个位数和十位数的输入。 (4)通过选择每次的输出数值,将输出值反馈到运算输入端 (4)通过除法运算实现十六进制到十进制的转换输出。 其具体实现流程图如下:

三系统硬件设计 FPGA: EP2C5T144C8目标板及相应外围硬件电路。(从略) 四系统软件设计 1.数据输入模块 原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。 2.运算模块 原理:用VHDL创建模块,四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号来时,将所得结果反馈给运算模块输入端。具体实现代码见附录二。 3.输出模块 原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。当输出结果溢出是LED0亮,同时数码管显示都为零。部分实现见附录二。 五实验调试 输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。当输出为负数时,LED0灯变亮,同时数码管显示都为零。六实验结论 本实验基本实现了计算器的加减乘法运算功能,但是存在一个突出的缺陷,就是当输出结果时,必须先按等号键导通数据反馈,再按运算键选择输出结果。这与实际应用的计算器存在很大的差距。但是,本设计可以通过等号键实现运算对象和运算结果之间的切换。

简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

单片机设计简易计算器

简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。 本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。 硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。因此需要花费大量的时间。硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是实现设计的中心环节。本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。这就要求能掌握Protues的一些基本操作。2原理分析 2.1矩阵键盘的扫描 图2.1 矩阵键盘图

如图2.1所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。 2.2 数字显示与计算 本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。 首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。

单片机简易计算器设计

单片机简易计算器设计 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

一、设计要求 1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C” 2.设计2位LED接口电路 3.实现1位数的简单运算 二、硬件系统设计 1、LED接口电路 简易计算器需要2位8段码LED显示电路。用8031单片机经8255A扩展2位8段码LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74LS06以提供驱动LED显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74LS07提供足够大的电流,然后接到数码显示器的各段。逻辑电路结构如下:

2、键盘接口电路 简易计算器需要4*4的行列式键盘。用8031单片机经8255A扩展4*4行列式键盘,8255A的B口和C口用于扩展键盘接口,B口高4位作为输出口,C口低4位作为输入口。逻辑电路结构如下: 3、计算器逻辑电路图 将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下: 三、软件设计 1、LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如下图所示:

为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字0~9的共阴极字形代码如下表: 0~9七段数码管共阴级字形代码 2位LED显示的程序框图如下: 2、读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如下: 3、主程序设计 (1)数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。程序框图如下: (2)运算主程序设计

简易计算器课程设计报告

《C++程序设计》(MFC)课程设计报告 设计题目:简易计算器 班级: 姓名: 学号: 指导教师: 时间:2010年6月30日

目录 1.设计目标…………………………………………………………… 2.设计内容…………………………………………………………… 3.设计思想…………………………………………………………… 4.设计说明…………………………………………………………… 5.设计步骤…………………………………………………………… 6.主要成员函数关系图……………………………………………… 7.程序主要代码……………………………………………………… 8. 难点分析…………………………………………………………… 9. 总结…………………………………………………………………

简易计算器(MFC) 1.设计目标 了解Windows应用程序的结构与DOS程序的不同,掌握应用MFC类库编写Windows应用程序的基本模式。 2.设计内容 以简易计算器为例,通过对简单应用软件计算器的设计,编制、调试,实现简单的加,减,乘,除等运算,以学习应用MFC库类编写对话框的原理,加深对C++类的学习及应用。 3. 设计思想 基于MFC库类对对话框界面的设计,通过创建类成员函数成员变量,编辑控件创建消息映射,调用消息函数完成数据的输入输出,实现计算功能。生成简单的应用软件。 4.设计说明 (1)包含的功能有:加、减、乘、除运算,开方、平方等功能。 (2)计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。 (3)输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。 (4)计算功能基本上是用系统内部函数。 (5)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。 (6)“CE”按钮可以清除所有已输入的数据从头计算 5. 设计步骤 (1)选择FileNewlProject命令,选择MFC AppWizard(exe)创建Project名为Caa,按确定。在弹出界面选择创建对话框,单击Finish按钮 (2)在生成的设计界面中加入控件,得到计算器应用界面。如图:

微机课设简易计算器

微机课程设计报告 题目简易计算器仿真 学院(部)信息学院 专业通信工程 班级2011240401 学生姓名张静 学号33 12 月14 日至12 月27 日共2 周 指导教师(签字)吴向东宋蓓蓓

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C52芯片、汇编语言、数码管、加减乘除

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

java课程设计报告_简单图形界面计算器的设计

Java 课程设计 简单图形界面计算器的设计 课程名称 Java程序设计 选题名称简单图形界面计算器的设计 专业 班级 姓名 学号 指导教师 简单图形界面计算器的设计

一、设计任务与目标 本次java程序设计我的设计任务是设计一个图形界面(GUI)的计算器应用程序并且能够完成简单的算术运算。本次任务的基本要求是这个计算器应用程序可以完成十进制的加、减、乘、除、求倒、取余、开方运算,且有小数点、正负号、退格和清零功能。而我要在此基础上添加一项千位符分隔符的功能,即以三位为一级,在输入的一串数字中每三位加入一个逗号,这项功能国际通用,并已经成为惯例,会计记账都用这种方法便于账目核算与管理。 GUI计算器设计的具体目标: 1.完成十进制的加、减、乘、除、求倒、取余和开方运算; 2.有小数点和正负号加入运算; 3.有退格、复位和清零的功能; 4.有千位符分隔符的功能,即在输入的一串数字中每三位加入一个逗号。 二、方案设计与论证 1.设计目标的总体分析 (1)设计目标的需求分析:计算器是现在一个普遍应用的工具,能够解决许多人工所无法计算的数据,节省大量宝贵的时间。 (2)设计目标的功能分析:实现计算器系统的功能,主要有两个功能模块:输入和输出。 (3)设计原则:基于计算器系统要具有适用性广、操作简便等特点,本系统预计要达到以下几个目标:①满足以上的基本功能要求;②能够在常见的计算机及其操作系统上运行。 2.设计的基本思路 利用GUI的界面设计,将整个大设计分为三块,分别是数据的输入,运算符

功能符的控制和数据的输入输出显示。利用Swing控件,数据的输入由0~9这10个按钮来表示,用“+”、“-”、“*”、“/”、“1/x”、“%”、“sqrt”这7个按钮来表示加、减、乘、除、求倒、取余、开方运算,用“.”和“±”这2个按钮来表示小数点和正负号,用“Back”、“CE”和“C”这3个按钮来表示退格、复位和清零的功能,数据的输入输出显示由文本字段来表示。将计算器的总体界面设计好后,再将代码分别写入不同的按钮的源程序中。 我要完成的一项改进,即添加一个拥有千位符分隔符功能的按钮,按下这个按钮能够在输入的一串数字中每三位加入一个逗号并且显示出来。我要在之前的界面设计的基础上多添加一个按钮“$”来表示千位符分隔符,并且将功能代码写入这个按钮的源程序中。 三、程序流程图,程序清单与调用关系 1. 程序流程图:

C语言制作简单计算器

C语言制作简单计算器 一、项目介绍 我们要用c语言做一个简单的计算器,进行加、减、乘、除操作。本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。我们需要检查输入,确保用户没有要求计算机完成不可能的任务。还必须允许用户一次输入一个计算式,例如:32.4+32 或者9*3.2 项目效果图 编写这个程序的步骤如下: ?获得用户要求计算机执行计算所需的输入。 ?检查输入,确保输入可以理解。 ?执行计算。 ?显示结果。 三、解决方案 1.步骤1

获得用户输入是很简单的,可以使用printf()和scanf()。下面是读取用户输入的程序代码: #includeint main(){ double number1=0.0; //定义第一个操作值 double number2=0.0; //定义第二个操作值 char operation=0; //operation必须是'+''-''*''/'或'%' printf("\nEnter the calculation\n"); scanf("%lf%c%lf",&number1,&operation,&number2); return0; } 2.步骤2 接着,检查输入是否正确。最明显的检查是要执行的操作是否有效。有效的操作有+、-、*、/和%,所以需要检查输入的操作是否是其中的一个。 还需要检查第二个数字,如果操作是/或者%,第二个数字就不能是0。如果右操作数是0,这些操作就是无效的。这些操作都可以用if语句来完成,switch语句则为此提供了一种更好的方式,因此它比一系列if语句更容易理解。 switch(operation) { case'+': printf("=%lf\n",number1+number2); break; case'-': printf("=%lf\n",number1-number2); break; case'*': printf("=%lf\n",number1*number2); break; case'/': if(number2==0) printf("\n\n\aDavision by zero error!\n"); else printf("=%lf\n",number1/number2); break;

相关文档
最新文档