文档库 最新最全的文档下载
当前位置:文档库 › 计算器(液晶显示)

计算器(液晶显示)

计算器(液晶显示)
计算器(液晶显示)

key.c

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

按键相关处理程序

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

#include

#include "work.h"

//========================================================= void jiahander(void);

void jianhander(void);

void chenghander(void);

void chuhander(void);

//========================================================== //键盘扫描函数返回键值1-16

//========================================================== uchar keys(void)

{

unsigned char recode,i,j;

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

{

KEY=~(0x01<

recode=KEY>>4;

if(recode<0x0f)

{

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

{if(!(recode&0x01<

return (i<<2)+(j+1); //返回键值1-16

}

delayms(5); //延时5ms

}

return 0; //无按键返回

}

//=======================================================

//给键值定义值

//======================================================= uchar scanzhi(void)

{

uchar zhi,k;

k=keys();

switch(k)

{

case 0: zhi=27;break;

case 1: zhi=7;break;

case 2: zhi=8;break;

case 3: zhi=9;break;

case 4: zhi=24;break; // /

case 5: zhi=4;break;

case 6: zhi=5;break;

case 7: zhi=6;break;

case 8: zhi=23;break; //*

case 9: zhi=1;break;

case 10: zhi=2;break;

case 11: zhi=3;break;

case 12: zhi=22;break; //-

case 13: zhi=26;break; //nc

case 14: zhi=0;break;

case 15: zhi=25;break; //=

case 16: zhi=21;break; //+

}

return(zhi);

}

//============================================================ void keyscan(void)

{

uchar key;

key=scanzhi();

if(key!=27) //------有无按键

{

if(key<=9) //-----------------------数字输入------------------

{

pflag=1;

sfflag|=0x01;

if(qflag==1)

{

k=0;

clearplay(3);

bczs=0;

qflag=0;

}

pbuffer1[k++]=0x30+key;

bczs=bczs*10+key;

} //-----------------------------------------------------------

else if(key>20)//------符号输入

{

pflag=1;

switch(key)

{

case 21: jiahander();break; //+

case 22: jianhander();break; //-

case 23: chenghander(); break; //*

case 24: chuhander(); break; // /

case 25: if(sfflag==0x01) break;

if(qflag==1) {sfflag=0; break; }

czshu=bczs;jishuan();sfflag=0x01;pbuffer1[k++]='=';break; //=

case 26: bczs=0;jguo=0;bczshu=0;czshu=0;sfflag=0;

clearplay(3);k=0;qflag=0;jsfuhao=0; break; //nc }

}

while(scanzhi()!=27);

}

}

//=======================================================

//等号处理函数

//=======================================================

void jishuan(void)

{

switch(jsfuhao)

{

case 1: jguo=bczshu+czshu;jchangep();break;

case 2: jguo=bczshu-czshu;jchangep();break;

case 3: jguo=bczshu*czshu;jchangep();break;

case 4: jguo=bczshu/czshu;jchangep();break;

}

jsfuhao=0;

qflag=1;

}

//======================================================= //加号处理函数

//======================================================= void jiahander(void)

{

if(sfflag>=0x82) return;

if((sfflag&0x80)!=0)

{

k--;

pbuffer1[k++]='+';

jsfuhao=1;

return;

}

if(qflag==1)

{

qflag=0;exchangexx();

bczshu=jguo; bczs=0;pbuffer1[k++]='+';

}

else

{

bczshu=bczs;bczs=0;pbuffer1[k++]='+';

}

sfflag|=0x80;

sfflag+=0x01;

jsfuhao=1;

}

//======================================================= //减号处理函数

//======================================================= void jianhander(void)

{

if(sfflag>=0x82) return;

if((sfflag&0x80)!=0)

{

k--;

pbuffer1[k++]='-';

jsfuhao=2;

return;

}

if(qflag==1)

{

qflag=0;exchangexx();

bczshu=jguo; bczs=0;pbuffer1[k++]='-';

}

else

{

bczshu=bczs;bczs=0;pbuffer1[k++]='-';

}

sfflag|=0x80;

sfflag+=0x01;

jsfuhao=2;

}

//======================================================= //乘号处理函数

//======================================================= void chenghander(void)

{

if(sfflag>=0x82) return;

if((sfflag&0x80)==0x80)

{

k--;

pbuffer1[k++]='*';

jsfuhao=3;

return;

}

if(qflag==1)

{

qflag=0;exchangexx();

bczshu=jguo; bczs=0;pbuffer1[k++]='*';

}

else

{

bczshu=bczs;bczs=0;pbuffer1[k++]='*';

}

sfflag|=0x80;

sfflag+=0x01;

jsfuhao=3;

}

//=========================================================

//除号处理函数

//========================================================= void chuhander(void)

{

if(sfflag>=0x82) return;

if((sfflag&0x80)!=0)

{

k--;

pbuffer1[k++]='/';

jsfuhao=4;

return;

}

if(qflag==1)

{

qflag=0;exchangexx();

bczshu=jguo; bczs=0;pbuffer1[k++]='/';

}

else

{

bczshu=bczs;bczs=0;pbuffer1[k++]='/';

}

sfflag|=0x80;

sfflag+=0x01;

jsfuhao=4;

}

Lcd1602.c

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

LCD1602的驱动程序

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

#include

#include "work.h"

#include

//=========================================================== //延时约1毫秒

//=========================================================== void delayms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=120;y>0;y--);

}

//=========================================================== //lcd读忙标志

//=========================================================== uchar lcdbusy()

{

bit result;

lcd_rs = 0;

lcd_rw = 1;

lcd_en = 1;

delayms(1);

result = (bit)(P0 &0x80);

lcd_en = 0;

return (result);

}

//============================================================ //"写数据函数"

void writedata(uchar wrdata1) //"写数据函数"

{

while(lcdbusy());

lcd_rs=1; //write data

lcd_rw=0;

lcd_en=1;

DQ=wrdata1;

delayms(5);

lcd_en=0;

}

//============================================================ //"写命令函数"

//============================================================ void writecom(uchar comd) //"写命令函数"

{

while(lcdbusy());

lcd_rs=0;

lcd_rw=0;

lcd_en=1;

DQ=comd;

delayms(5);

lcd_en=0;

}

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

"写字符串函数"

**********************************************************

void writestr(uchar *p) //"无地址,写之前要先写一个地址"

{

uchar i;

i=0;

while (p[i] != '\0')

{

writedata(p[i]);

i++;

}

} *///---------此函数没有调用过,故注释掉--------------

//*******************"初始化函数"********************************

void lcdinit(void)

{ writecom(0x38); //"5*8双行显示"

delayms(5);

writecom(0x06);

delayms(5);

writecom(0x0c);

delayms(5);

writecom(0x01); //"清屏"

writecom(0x80);

}

//================================================================ // 显示清除

//================================================================ void clearplay(uchar x)

{

uchar i;

if(x==1)

{

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

pbuffer1[i]=0;

}

else if(x==2)

{

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

pbuffer2[i]=0;

}

else if(x==3)

{

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

{

pbuffer1[i]=0;

pbuffer2[i]=0;

}

}

pbuffer2[15]=0x30;

pflag=1;

}

//================================================================= //刷全屏:进行一次全屏的刷写

//================================================================= void displayall(void)

{

uchar i;

if(pflag==1)

{

writecom(0x0c);

writecom(0x80+0x40); //第二行

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

writedata(pbuffer2[i]);

writecom(0x80);

for(i=0;i<16;i++) //第一行

writedata(pbuffer1[i]);

writecom(0x80+k);

writecom(0x0e);

// pflag=0; //清0显示标志位

}

}

//==========================================================

//flag=1,移第一行;flag=2,移第二行。

//==========================================================

void moveright(uchar flag)

{

uchar i;

if(flag==1)

{

for(i=15;i>0;i--)

pbuffer1[i]=pbuffer1[i-1];

pbuffer1[0]=0;

}

else if(flag==2)

{

for(i=15;i>0;i--)

pbuffer2[i]=pbuffer2[i-1];

pbuffer2[0]=0;

}

}

//=====================================================

//功能:结果显示传换

//说明:显示的结果小数部分是六位的,显示的只是表像结果,

// 当进行连运算时,结果就不对了,显示结果没有更改上一次的计算结果//=====================================================

void jchangep(void) //结果显示传换

{

uchar i,p,q; //i循环变量,p整数位数,q小数位数

uchar n;

long int j,m,xs; //

float xsj,jguo1;

if(jguo<0) jguo1=-jguo;

else jguo1=jguo;

j=jguo1; //取整数部分

xsj=jguo1-j; //取小数部分

p=0;

q=0;

if(j==0)//----------无整数---------------------

{

p=1;

q=9;

xs=xsj*(long int)pow(10,9);

while(xs%10==0)

{

xs=xs/10;

q--;

} //取小数个数

xs=xsj*(long int)pow(10,q);

for(i=15;i>15-q;i--)

{

pbuffer2[i]=xs%10+0x30;

xs=xs/10;

}

if(jguo<0) pbuffer2[15-q-1-1]='-';

pbuffer2[15-q-1]=0x30;

pbuffer2[15-q]='.';

if(q>6)

{

n=q-6;

for(i=0;i

moveright(2);

while(pbuffer2[15]==0x30) //小数点后的0不显示

{

moveright(2);

}

}

}

else if(xsj<0.000000002)//-----------无小数----------------

{

q=0;

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

{

m=(long int)pow(10,i); //p整数个数。q小数个数

if(j/m!=0)

p=i+1;

}

if(jguo<0) {pbuffer2[15-p]='-';} //显示负号

for(i=15;i>15-p;i--)

{

pbuffer2[i]=j%10+0x30;

j=j/10;

}

}

else //---------小数和整数部分都有---------------------------

{

p=1;

q=9;

xs=xsj*(long int)pow(10,9);

while(xs%10==0)

{

xs=xs/10;

q--;

} //取小数个数

p=0;

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

{

m=(long int)pow(10,i); //p整数个数。q小数个数

if(j/m!=0)

p=i+1;

}

xs=xsj*(long int)pow(10,q);

for(i=15;i>15-q;i--)

{

pbuffer2[i]=xs%10+0x30;

xs=xs/10;

}

pbuffer2[15-q]='.';

if(jguo<0) pbuffer2[15-q-p-1]='-';

for(i=15-q-1;i>15-q-p-1;i--)

{

pbuffer2[i]=j%10+0x30;

j=j/10;

}

if(q>6)

{

n=q-6;

for(i=0;i

moveright(2);

while(pbuffer2[15]==0x30) //小数点后的0不显示

{

moveright(2);

}

}

}

pflag=1; //刷屏标志置1

}

//====================================================== //连运算的上下两行显示转换

//====================================================== void exchangexx(void)

{

uchar i,j;

j=0;

while(pbuffer2[j]==0)

j++;

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

{

if(j<16)

pbuffer1[i]=pbuffer2[j++];

else pbuffer1[i]=0;

}

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

{

pbuffer2[i]=0;

}

pbuffer2[15]=0x30;

k=0;

while(pbuffer1[k++]!=0); //取光标位置

k--;

pflag=1; //刷屏标志置1

}

Main.c

/*-----------------------------------------------------------

51简易计算器:完成于2011_12_11 作者:小宇宙

能进行连加运算,上一次的结果可以做为下一次计算的被操作数

小数点只能精确到小数点后六位,运算中用的是float数,有一些

运算的结果不准确.

由于时间仓促,部分代码没出有做优化,甚至有烦冗,欢迎交流。

交流邮箱:zglymxs2009@https://www.wendangku.net/doc/ca5864627.html,

-------------------------------------------------------------*/

#include

#include "work.h"

//===========================================================

uchar pbuffer1[16]; //开辟一片显示缓存(全局变量)

uchar pbuffer2[16];

uchar pflag; //刷屏标志位

float bczshu,czshu,jguo,bczs; //运算用到的中间变量,被操作数,操作数,结果,读key值的数

uchar jsfuhao;

uchar k; //光标所在的位置

uchar qflag; //清显示标志位

uchar sfflag; //数字符号输入标志

//===========================================================

void main()

{

lcdinit(); //初始化

sysinit(); //系统初化

writecom(0x0e); //显示光标

while(100)

{

keyscan();

displayall();

}

}

//============================================================ void sysinit(void)

{

bczshu=0;

czshu=0;

jguo=0;

k=0;

qflag=0;

sfflag=0;

clearplay(3);

displayall();

}

Work.c

#ifndef _work_h

#define _work_h

#define uint unsigned int

#define uchar unsigned char

extern void delayms(uint z); //延时约1毫秒

extern void writecom(uchar comd); //lcd1602写命令

extern void writedata(uchar wrdata1); //lcd1602写数据

extern void lcdinit(void); //lcd1602初始化

#define DQ P0 //定义lcd数据口的控制口

sbit lcd_en=P2^0;

sbit lcd_rw=P2^1;

sbit lcd_rs=P2^2;

#define KEY P3 //定义4*4矩阵键盘接口

extern uchar keys(void); //键盘读值

extern uchar scanzhi(void); //给键值定义值

extern void keyscan(void); //键盘读值并进行相关操作

extern void jishuan(void);

extern void clearplay(uchar x); //清除显示

extern void displayall(void); //刷全屏

extern void moveright(uchar flag);//右移显示

extern void jchangep(void); //结果到显示的转换

extern void exchangexx(void); //连运算的上下两行显示转换

extern uchar pbuffer1[16]; //开辟一片显示缓存(全局变量)

extern uchar pbuffer2[16];

extern uchar pflag; //刷屏标志位

extern float bczshu,czshu,jguo,bczs; //运算用到的中间变量,被操作数,操作数,结果,读key值的数

extern uchar jsfuhao;

extern uchar k; //光标显示的位置

extern uchar qflag; //清显示标志位

extern uchar sfflag; //数字符号输入标志

void sysinit(void);

#endif

汇编语言实现十进制加减计算器

课程设计 题目十进制数加减计算器学院计算机科学与技术 专业计算机科学与技术 班级计算机0808班 姓名何爽 指导教师袁小玲 2010 年12 月31 日

课程设计任务书 学生姓名:何爽专业班级:计算机0808班 指导教师:袁小玲工作单位:计算机科学与技术学院 题目: 十进制数加减计算器的设计 初始条件: 理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。 实践:计算机学院科学系实验中心提供计算机和软件平台。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)十进制数加减计算器的设计。 (2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。 (3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。 (4)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 在正文第一行写课程设计题目; 1.需求说明(要求、功能简述)或问题描述; 2.设计说明(简要的分析与概要设计); 3.详细的算法描述; 4.源程序与执行结果(含测试方法和测试结果); 5.使用说明; 6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该 程序进一步改进扩展的设想)。 时间安排: 设计时间一周:周1:查阅相关资料。 周2:系统分析,设计。 周3~4:编程并上机调试。 周5:撰写课程设计报告。 设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。 设计报告书收取时间:20周的星期五下午5:00之前。 指导教师签名: 2010年12月31日 系主任(或责任教师)签名: 2010年12月31日

简单的四则运算计算器程序

简单的四则运算计算器程序

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

附件:程序源代码 // sizheyunsuan.cpp : Defines the entry point for the console application. #include #include const int MAX=100; class Operand{ private: double operS; public: Operand(){} Operand(double opers){ operS=opers; } void set(double opers){ operS=opers; } double get() { return operS;} }; class Operator{ private: char operF; int priority; public: Operator(){} Operator(char operf) { operF=operf; switch(operf) { case'(':priority=-1;break; case'+':priority=0;break; case'-':priority=0;break; case'*':priority=1;break; case'/':priority=1;break; case')':priority=2;break; } } void set(char operf){ operF=operf; } char get(){ return operF;} int getpriority(){ return priority; } };

java简单计算器源代码

简单计算器代码 package calcultorthree; import java.awt.BorderLayout;//导入边界布局管理器类 import java.awt.GridLayout;//导入网格布局管理器类 import java.awt.TextField;//导入文本区域类 import java.awt.event.ActionEvent;//导入事件类 import java.awt.event.ActionListener;//导入事件监听者类 import javax.swing.JButton;//导入按钮类 import javax.swing.JFrame;//导入窗体 import javax.swing.JPanel;//导入面板 /** *本例实现了简单计算器代码,具备加减乘除和正弦功能,旨在抱砖引玉。熟悉java的同学,可以在此基础上实现更复杂的功能。 * @author Fjsh */ public class CalcultorThree { //新建对象,在构造函数中进行初始化 JFrame frame;//新建窗体对象 JButton buttonzero,buttondot,buttonequal;//新建按钮“0”“.”“=” JButton buttonplus,buttonminus,buttonmultiple,buttondevision, buttonsin,buttontozero;//新建按钮“+”“-”“*”“/”“sin”和归零按钮JButton buttonone,buttontwo,buttonthree,buttonfour,buttonfive,buttonsix, buttonseven,buttoneight,buttonnine;//新建数字按钮“0”“1”“2”“3”“4”“5”“6”“7”“8”“9” JPanel panelwest,panelcenter,paneleast;//新建三个面板 TextField tf;//新建文本区域对象 public CalcultorThree(){ //初始化对象 tf=new TextField(30);//构造空文本字段,字符宽度为30 frame =new JFrame("CalculatorThree");//构造窗体对象,名称为“CalculatorThree”

同步二进制加法计数器

同步二进制加法计数器 F0302011 5030209303 刘冉 计数器是用来累计时钟脉冲(CP脉冲)个数的时序逻辑部件。它是数字系统中用途最广泛的基本部件之一,几乎在各种数字系统中都有计数器。它不仅可以计数,还可以对CP 脉冲分频,以及构成时间分配器或时序发生器,对数字系统进行定时、程序控制操作。此外,还能用它执行数字运算。 1、计数器的特点: 在数字电路中,把记忆输入CP脉冲个数的操作叫做计数,能实现计数状态的电子电路称为计数器。特点为(1)该电路一般为Moore型电路,输入端只有CP信号。 (2)从电路组成看,其主要组成单元是时钟触发器。 2、计数器分类 1) 按CP脉冲输入方式,计数器分为同步计数器和异步计数器两种。 同步计数器:计数脉冲引到所有触发器的时钟脉冲输入端,使应翻转的触发器在外接的CP脉冲作用下同时翻转。 异步计数器:计数脉冲并不引到所有触发器的时钟脉冲输入端,有的触发器的时钟脉冲输入端是其它触发器的输出,因此,触发器不是同时动作。 2) 按计数增减趋势,计数器分为加法计数器、减法计数器和可逆计数器三种。 加法计数器:计数器在CP脉冲作用下进行累加计数(每来一个CP脉冲,计数器加1)。 3) 按数制分为二进制计数器和非二进制计数器两类。 二进制计数器:按二进制规律计数。最常用的有四位二进制计数器,计数范围从0000到1111。 异步加法的缺点是运算速度慢,但是其电路比较简单,因此对运算速度要求不高的设备中,仍不失为一种可取的全加器。同步加法优点是速度快,虽然只比异步加法快千分之一甚至几千分之一秒,但对于计数器来讲,却是十分重要的。所以在这个高科技现代社会中,同步二进制计数器应用十分广泛。 下图为三位二进制加法计数器的电路图。 图1 三位二进制计数器 图示电路为对时钟信号计数的三位二进制加法计数器或称为八进制加法计数器。 该电路的经典分析过程: 1.根据电路写出输出方程、驱动方程和状态方程 2. 求出状态图 3.检查电路能否自启动 4.文字叙述逻辑功能 解:

十进制加法计数器EDA大作业

百度文库- 让每个人平等地提升自我EDA技术实践报告 十进制加法计数器 姓名:王浩 学号: 9 专业:电气自动化 班级: 12级自动化二班日期:

目录 第1章前言 (1) 摘要 (1) 第2章设计说明 (2) 设计思路 (2) 模块介绍 (2) 真值表 (3) 第3章原理图 (5) 第4章波形仿真图 (10) 第5章管脚锁定及连线 (11) 第6章总结 (13)

第一章前言 本次课程设计介绍了一种基于数字电子技术的十进制加法器实现了如下功能: 1.用四个数码管显示加数与被加数和结果 2.设置加数和被加数。当加数和被加数超过9时显示“E”,计算结果显示为“EE” 3.分别用四个拨码开关控制加数与被加数 4.当加数、被加数超过9时,蜂鸣器报警5秒 EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为实验工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化建、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。 利用EDA技术进行电子系统的设计,具有以下几个特点:1.用软件的方式设计硬件;2.用软件方式设计的系统到硬件系统的转换是由有关的开发软件自当完成的;3.设计过程中可用有关软件进行仿真;4.系统可现场编程,在线升级;5.整个系统可集成在一个芯片上,体积小,功能低,可靠性高。因此,EDA技术是现代电子设计的发展趋势。 摘要 此次设计是十进制加法器,用74238进行加法部分,根据BCD码加法运算规则,当俩数相加的结果小于或等于9时,相加结果与二进制数相加结果一致,当相加结果大于9时,相当于按二进制数相加所得的结果再加6. 当加数或被加数超过九时,数码管显示E,结果显示EE。蜂鸣器报警5秒钟。 关键字:十进制加法器,数码管显示,蜂鸣器报警

计算器使用说明书

计算器使用说明书目录 取下和装上计算器保护壳 (1) 安全注意事项 (2) 使用注意事项 (3) 双行显示屏 (7) 使用前的准备 (7) k模式 (7) k输入限度 (8) k输入时的错误订正 (9) k重现功能 (9) k错误指示器 (9) k多语句 (10) k指数显示格式 (10) k小数点及分隔符 (11) k计算器的初始化 (11) 基本计算 (12) k算术运算 (12) k分数计算 (12) k百分比计算 (14) k度分秒计算 (15) kMODEIX, SCI, RND (15) 记忆器计算 (16) k答案记忆器 (16) k连续计算 (17) k独立记忆器 (17) k变量 (18) 科学函数计算 (18) k三角函数/反三角函数 (18) Ch。6 k双曲线函数/反双曲线函数 (19) k常用及自然对数/反对数 (19) k平方根﹑立方根﹑根﹑平方﹑立方﹑倒数﹑阶乘﹑ 随机数﹑圆周率(π)及排列/组合 (20) k角度单位转换 (21) k坐标变换(Pol(x, y)﹐Rec(r, θ)) (21) k工程符号计算 (22) 方程式计算 (22) k二次及三次方程式 (22) k联立方程式 (25) 统计计算 (27)

标准偏差 (27) 回归计算 (29) 技术数据 (33) k当遇到问题时 (33) k错误讯息 (33) k运算的顺序 (35) k堆栈 (36) k输入范围 (37) 电源(仅限MODEx。95MS) (39) 规格(仅限MODEx。95MS) (40) 取下和装上计算器保护壳 ?在开始之前 (1) 如图所示握住保护壳并将机体从保护壳抽出。 ?结束后 (2) 如图所示握住保护壳并将机体从保护壳抽出。 ?机体上键盘的一端必须先推入保护壳。切勿将显示屏的一端先推入保护壳。 使用注意事项 ?在首次使用本计算器前务请按5 键。 ?即使操作正常﹐MODEx。115MS/MODEx。570MS/MODEx。991MS 型计算器也必须至少每3 年更换一次电池。而MODEx。95MS/MODEx。100MS型计算器则须每2 年更换一次电池。电量耗尽的电池会泄漏液体﹐使计算器造成损坏及出现故障。因此切勿将电量耗尽的电池留放在计算器内。 ?本机所附带的电池在出厂后的搬运﹑保管过程中会有轻微的电源消耗。因此﹐其寿命可能会比正常的电池寿命要短。 ?如果电池的电力过低﹐记忆器的内容将会发生错误或完全消失。因此﹐对于所有重要的数据﹐请务必另作记录。 ?避免在温度极端的环境中使用及保管计算器。低温会使显示画面的反应变得缓慢迟钝或完全无法显示﹐同时亦会缩短电池的使用寿命。此外﹐应避免让计算器受到太阳的直接照射﹐亦不要将其放置在诸如窗边﹐取暖器的附近等任何会产生高温的地方。高温会使本机机壳褪色或变形及会损坏内部电路。 ?避免在湿度高及多灰尘的地方使用及存放本机。注意切勿将计算器放置在容易触水受潮的地方或高湿度及多灰尘的环境中。因如此会损坏本机的内部电路。 双行显示屏

大学计算机c语言计算器源代码

C++语言编写。。 #include #include #include using namespace std; const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000; typedef struct node//为了处理符号而建立的链表(如: 1+(-2)) { char data; node *next; }node; typedef struct stack_num//存储数的栈 { double *top; double *base; }stack_num; typedef struct stack_char//存储运算符号的栈 { char *top;

char *base; }stack_char; stack_num S_num;//定义 stack_char S_char;//定义 char fu[18] = {'\n', ')', '+', '-', '*', '/', '%', '^', 'Q', 'L', 'C', 'S', 'T', 'c', 's', 't', '('}; int compare[1000];//表现出各运算符号的优先级 double shu[1000];//存储"数"的数组 double dai_result;//运算的结果,是为了处理M运算(简介函数里有M的定义) int biao = 0;//和dia_result一样,为了处理M运算 char line[SIZE];//输入的所要计算的表达式 void init()//初始化 { compare[fu[0]] = -2;//用数字的大小表现出符号的优先级 compare[fu[1]] = -1; compare[fu[2]] = 2; compare[fu[3]] = 2; compare[fu[4]] = 4; compare[fu[5]] = 4; compare[fu[6]] = 4;

Java带计算过程的计算器课程设计报告

保存计算过程的计算器 Java程序设计课程设计报告保存计算过程的计算器 目录 1 概述.............................................. 错误!未定义书签。 1.1 课程设计目的............................... 错误!未定义书签。 1.2 课程设计内容............................... 错误!未定义书签。 2 系统需求分析.......................................... 错误!未定义书签。 2.1 系统目标................................... 错误!未定义书签。 2.2 主体功能................................... 错误!未定义书签。 2.3 开发环境................................... 错误!未定义书签。 3 系统概要设计.......................................... 错误!未定义书签。 3.1 系统的功能模块划分......................... 错误!未定义书签。 3.2 系统流程图................................. 错误!未定义书签。4系统详细设计........................................... 错误!未定义书签。 5 测试.................................................. 错误!未定义书签。 5.1 测试方案................................... 错误!未定义书签。 5.2 测试结果................................... 错误!未定义书签。 6 小结.................................................. 错误!未定义书签。参考文献................................................ 错误!未定义书签。附录................................................ 错误!未定义书签。 附录1 源程序清单...................................... 错误!未定义书签。

单片机简易计算器设计

单片机简易计算器设计 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)运算主程序设计

verilog HDL十进制加减法计数器报告

十进制加减法计数器 1.实验要求 (1)在Modelsim环境中编写十进制加减法计数器程序; (2)编译无误后编写配套的测试程序; (3)仿真后添加信号,观察输出结果。 2.设计程序如下 module decade_counter #(parameter SIZE=4) (input clock,load_n,clear_n,updown, input [SIZE-1:0]load_data, output reg [SIZE-1:0]q ); always @(negedge load_n,negedge clear_n,posedge clock) if (!load_n) q<=load_data; else if (!clear_n) q<=0; else //clock??? if(updown) q<=(q+1)%10; else begin if(q==0) q<=9; else q<=q-1; end endmodule 3.测试程序如下 `timescale 1ns/1ns module test_decade_counte; reg clock,load_n,clear_n,updown; reg [3:0]load_data; wire [3:0]q; decade_counter T1(clock,load_n,clear_n,updown,load_data,q); initial begin clock=0;clear_n=0;

#30 clear_n=1;load_n=0;load_data=7; #30 load_n=1;updown=0; #300 updown=1; #300 updown=0; #300 updown=1; #300 $stop; end always #10 clock=~clock; always @(q) $display("At time%t,q=%d",$time,q); endmodule 4.波形如下 5.测试结果如下 # At time 0,q= 0 # At time 30,q= 7 # At time 70,q= 6 # At time 90,q= 5 # At time 110,q= 4 # At time 130,q= 3 # At time 150,q= 2 # At time 170,q= 1 # At time 190,q= 0 # At time 210,q= 9 # At time 230,q= 8 # At time 250,q= 7 # At time 270,q= 6 # At time 290,q= 5 # At time 310,q= 4 # At time 330,q= 3

实用计算器程序

目录 1.基本功能描述 (1) 2.设计思路 (1) 3.软件设计 (10) 3.1设计步骤 (10) 3.2界面设计 (10) 3.3关键功能实现 (12) 4.结论与心得 (14) 5.思考题 (15) 6.附录 (17) 6.1调试报告 (17) 6.2测试结果 (18) 6.3关键代码 (21)

实用计算器程序 1.基本功能描述 (1)可以计算基本的运算:加法、减法、乘法、除法。 (2)可以进行任意加减乘除混合运算。 (3)可以进行带任意括号的任意混合运算。 (4)可以进行单目科学运算:1/x、+/-、sqrt、x^2、e^2等。 (5)可以对显示进行退格或清除操作。 (6)可以对计算结果自动进行存储,并在用户需要的时候查看,并且可在其基础上进行再运算操作。 (7)界面为科学型和普通型,可在两界面间通过按钮转换。 2.设计思路 计算器属于桌面小程序,适合使用基于对话框的MFC应用程序设计实现。首先要思考的问题是:我的程序需要实现什么样的功能?需要哪些控件?需要哪些变量?需要哪些响应? 我们知道基于对话框的MFC应用程序的执行过程是:初始化、显示对话框,然后就开始跑消息循环列表,当我们在消息循环列表中获取到一个消息后,由相应的消息响应函数执行相应的操作。根据这个流程我们制定出计算器程序的程序框架主流程图,如下页图1所示。 根据程序主流程图可以看出,我们需要一些能响应用户操作的响应函数来实现我们的计算器相应按键的功能。

图1 程序主流程图 说明:所以流程图由深圳市亿图软件有限公司的流程图绘制软件(试用版)绘制,转 存PDF后导出为图片加入到word中的,所以可能会打印效果不好,但确实为本人绘制。

java编写简单计算器源代码

import javax.swing.*; import java.awt.event.*; import java.awt.*; import https://www.wendangku.net/doc/ca5864627.html,ng.Math; class ring extends JFrame implements ActionListener { //定义成员变量: //JFrame frame;//定义一个窗口类; JTextField text;//定义一个文本框类; JLabel label;//定义一个标签类; JPanel p1,p2,p3,p4,p5,p6;//定义面板类; String s1,s,s2;//定义三个字符串变量; int count=0; JButton a1,a2,a3,a4,a5,a6,b1,b2,b3,b4,b5,b6,c1,c2,c3,c4,c5,c6,d1,d2,d3,d4 ,d5,d6; //ring的构造函数; ring() { this.setTitle("计算器"); // super("计算器"); JMenuBar menubar1=new JMenuBar();//新建菜单条; this.setJMenuBar(menubar1); JMenu menu1=new JMenu("编辑(E)"); JMenu menu2=new JMenu("查看(V)"); JMenu menu3=new JMenu("帮助(H)"); menubar1.add(menu1); menubar1.add(menu2); menubar1.add(menu3); JMenuItem item1=new JMenuItem("复制(c) ctrl+c"); JMenuItem item2=new JMenuItem("粘贴(p) ctrl+v"); JMenuItem item3=new JMenuItem("标准型(T)"); JMenuItem item4=new JMenuItem("科学型(s)"); JMenuItem item5=new JMenuItem("数字分组(I)"); JMenuItem item6=new JMenuItem("帮助主题(H)"); JMenuItem item7=new JMenuItem("关于计算机(A)"); menu1.add(item1); menu1.add(item2); menu2.add(item3); menu2.add(item4); menu2.add(item5); menu3.add(item6);

十进制4位加法计数器设计

洛阳理工学院 十 进 制 4 位 加 法 计 数 器 系别:电气工程与自动化系 姓名:李奇杰学号:B10041016

十进制4位加法计数器设计 设计要求: 设计一个十进制4位加法计数器设计 设计目的: 1.掌握EDA设计流程 2.熟练VHDL语法 3.理解层次化设计的内在含义和实现 设计原理 通过数电知识了解到十进制异步加法器的逻辑电路图如下 Q3 则可以通过对JK触发器以及与门的例化连接实现十进制异步加法器的设计 设计内容 JK JK触发器的VHDL文本描述实现: --JK触发器描述 library ieee; use ieee.std_logic_1164.all; entity jk_ff is

port( j,k,clk: in std_logic; q,qn:out std_logic ); end jk_ff; architecture one of jk_ff is signal q_s: std_logic; begin process(j,k,clk) begin if clk'event and clk='0' then if j='0' and k='0' then q_s <= q_s; elsif j='0' and k='1' then q_s <= '0'; elsif j='1' and k='0' then q_s <= '1'; elsif j='1' and k='1' then q_s <= not q_s; end if; end if; end process; q <= q_s; qn <= not q_s; end one; 元件门级电路: 与门VHDL文本描述实现: --与门描述library ieee; use ieee.std_logic_1164.all;

C编写简易计算器附源代码超详细

超详细 一、因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里 使用Windows窗体应用程序,并命名为Calc,如下图所示: 二、向窗体中拖入需要的控件,如下图所示: (完成效果图) 结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow,按键0~9为Button控件,并将其name分别修改为btn_0、btn_1、btn_2、btn_3、btn_4、btn_5、btn_6、btn_7、btn_8、btn_9;按键【负数】的name值修改为btn_sign,按键【.】的name修改为btn_dot,按键【+-*/】的name值分别修改为btn_add、btn_sub、btn_mul、btn_div,按键【=】的name值修改为btn_equ,按键【倒数】的name值修改为btn_rev,按键【平方】的name值修改为btn_sqr,按键【开方】的name值修改为btn_sqrt。右边的计算器图片空间是PictureBox,作者博客控件是LinkLabel,可以不添加,以上所有控件均可按照需求添加,只保留自己需要的按钮控件和textbox控件即可。 三、代码部分(含解释),采用switch多分支语句编写 using System; using System.Drawing; using System.Collections; using https://www.wendangku.net/doc/ca5864627.html,ponentModel; using using System.Data; namespace Calc { ///

///温柔一刀C#简易计算器的实现 /// publicclass CalcForm:Form { private Button btn_0; private Button btn_1; private Button btn_2; private Button btn_3;

实验十进制加减法计数器

实验1 十进制加减法计数器 实验地点:电子楼218 实验时间:2012年10月19日指导老师:黄秋萍、陈虞苏 实验要求:设计十进制加减法计数器,保留测试程序、设计程序、仿真结果 1.设计程序: module count(EN,CLK,DOUT,F,RST); input EN,CLK,F,RST; output [3:0]DOUT; reg [3:0]DOUT; always@(posedge CLK) begin :abc if(EN) if(!RST) if(F) begin :a DOUT=DOUT+1; if(DOUT==10) DOUT=0; end //END A else begin :b DOUT=DOUT-1; if(DOUT==15) DOUT=9; end else DOUT=0; else DOUT=DOUT; end endmodule 2.测试程序 `timescale 10ns/1ns module test_count; wire [3:0] DOUT; reg EN,F,RST,CLK; count M(EN,CLK,DOUT,F,RST); initial begin :ABC CLK=0; EN=0;

RST=1; F=1; #100 EN=1; #200 RST=0; #1500 F=0; #3000 $stop; end always #50 CLK=~CLK; initial $monitor("EN=%b,F=%b,RST=%b,DOUT%D",EN,F,RST,DOUT); endmodule 3.测试结果 # EN=0,F=1,RST=1,DOUT x # EN=1,F=1,RST=1,DOUT x # EN=1,F=1,RST=1,DOUT 0 # EN=1,F=1,RST=0,DOUT 0 # EN=1,F=1,RST=0,DOUT 1 # EN=1,F=1,RST=0,DOUT 2 # EN=1,F=1,RST=0,DOUT 3 # EN=1,F=1,RST=0,DOUT 4 # EN=1,F=1,RST=0,DOUT 5 # EN=1,F=1,RST=0,DOUT 6 # EN=1,F=1,RST=0,DOUT 7 # EN=1,F=1,RST=0,DOUT 8 # EN=1,F=1,RST=0,DOUT 9 # EN=1,F=1,RST=0,DOUT 0 # EN=1,F=1,RST=0,DOUT 1 # EN=1,F=1,RST=0,DOUT 2 # EN=1,F=1,RST=0,DOUT 3 # EN=1,F=1,RST=0,DOUT 4 # EN=1,F=1,RST=0,DOUT 5 # EN=1,F=0,RST=0,DOUT 5 # EN=1,F=0,RST=0,DOUT 4 # EN=1,F=0,RST=0,DOUT 3 # EN=1,F=0,RST=0,DOUT 2 # EN=1,F=0,RST=0,DOUT 1 # EN=1,F=0,RST=0,DOUT 0 # EN=1,F=0,RST=0,DOUT 9 # EN=1,F=0,RST=0,DOUT 8 # EN=1,F=0,RST=0,DOUT 7 # EN=1,F=0,RST=0,DOUT 6 # EN=1,F=0,RST=0,DOUT 5

十进制可逆加减计数器

时序电路逻辑设计 实验人:周铮班级:中法1202班学号:U201215676 一实验目的 1.掌握用SSI实现简单组合逻辑电路的方法。 2.掌握简单数字电路的安装与测试技术。 3.熟悉使用Verilog HDL描述组合逻辑电路的方法,以及EDA仿真技术。 二实验器件 计算机,可编程实验板 三实验内容 十进制加减可逆计数器设计 功能要求: 拨码开关键SW1为自动可逆加减功能键,当SW1为HIGH时,计数器实现自动可逆模十加减计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9—8—7—...0—1...的模十自动可逆加减计数结果;当SW1为LOW时,计数器按拨码开关键SW0的选择分别执行加减计数功能。即当SW0为HIGH时,计数器实现模十加计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9——0—1...的模十加计数结果;当SW0为LOW时,计数器实现模十减计数功能,即4个七段数码管上几乎同步显示9—8—7—...—1—0— (9) —8—7…的模十减计数结果。 四实验设计 1.原理设计 脉冲发生电路采用555定时器组成的多谐振荡器振荡产生周期为1s的矩形脉冲,从而为计数器提供触发信号。其中,可以通过R1,R2,C来控制充放电的时间。 加/减计数控制电路主要由74LS138构成。74LS138芯片是常用的3-8线译码器,常用在单片机和数字电路的译码电路中,74LS138的引脚排列及 真值表如图

计数单元电路主要由十进制计数器74LS192构成。74LS192是同步十进制可逆计数器,它具有双时钟输入,并具有清除和置数等功能,其引脚排列图如图 功能表如图 2.模拟仿真 用Verilog HDL语言设计二通道数据选择器实验程序如下: ①实验代码 module a( input clk,

10进制加法计数器课程设计

西北师范大学知行学院 数字电子实践论文 课题:74ls161组成的十进制加法计数器 (置数法) 班级:14电本 学号:14040101114 姓名:于能海

指导老师:崔用明 目录 第1章前言 (1) 1.1 摘要 (1) 1.2 设计目的 (2) 1.3 设计内容及要求 (2) 第2章设计方案 (3) ....................................................................................................................... 错误!未定义书签。 2.1主要芯片功能介绍 (3) 2.2.1 四位二进制计数器74161介绍 (3) ............................................................................................................... 错误!未定义书签。 2.2 工作原理 (4) 第3章硬件设计 (4) 3.1 单元电路设计 (4) 3.2 总硬件电路图 (5) 第4章仿真与试验 (6) 4.1 仿真结果 (6) 4.2 调试中遇到的问题 (7) 第5章结论和体会 (8)

第1章前言 1.1 摘要在数字电路技术的课程中,计数器的功能是记忆脉冲的个数,它是数字系统中应用最广泛的基本时序逻辑构件。计数器在微型计算机系统中的主要作用就是为CPU和I/O设备提供实时时钟,以实现定时中断、定时检测、定时扫描、定时显示等定时控制,或者对外部事件进行计数。一般的微机系统和微机应用系统中均配置了定时器/计数器电路,它既可当作计数器作用,又可当作定时器使用,其基本的工作原理就是"减1"计数。计数器:CLK输入脉冲是一个非周期事件计数脉冲,当计算单元为零时,OUT输出一个脉冲信号,以示计数完毕。 本十进制加法计数器是基于74161芯片而设计的, 该十进制加法计数器设计理念是用于工厂流水线上产品计数,自动计数,方便简单。 关键词:74ls161计数器 Introduction In the course of digital circuit technology, the counter memory function is the number of pulses, it is a digital system, the most widely used basic sequential logic components. The main role of the counter in the micro-computer system is to provide real-time clock for the CPU and I / O devices to achieve the timer interrupt, timing detection, scheduled scanning, the timing display timing control, or to count external events. General computer systems and computer application systems are equipped with a timer / counter circuit, it can as a counter action, but also as a timer, the basic working principle is "minus 1" count. Counter: CLK input pulse is a non-periodic event count pulses to zero when calculating unit, OUT outputs a pulse signal, to show the count is completed. The decimal addition counter is designed based on the 74161 chip, the low potential sensor senses when to rely on external signals, sensors in an object within the sensing range, otherwise it is a high potential. Within the sensing range of the sensor when an object is moved out of date, sensor potential from high to low and then high, appears on the edge. Counter is automatically incremented and displayed on a digital control. The decimal addition counters have two seven-segment LED. It can count from 0 to 99 objects, and easy to expand. The design concept of decimal addition counter is used to count on a factory assembly line products, automatic counting, convenient and simple. Keywords:74ls161counter

JAVA保存计算过程的计算器课程设计报告

JAVA保存计算过程的计算器课程设计 报告 1 2020年4月19日

保存计算过程的java计算器 目录 1 概述................................................................................. 错误!未定义书签。 1.1 课程设计目的 ............................................... 错误!未定义书签。 1.2 课程设计内容 ............................................... 错误!未定义书签。 2 系统需求分析 .................................................................... 错误!未定义书签。 2.1 系统目标 ....................................................... 错误!未定义书签。 2.2 主体功能 ....................................................... 错误!未定义书签。 2.3 开发环境 ....................................................... 错误!未定义书签。 3 系统概要设计 .................................................................... 错误!未定义书签。 3.1 系统的功能模块划分.................................... 错误!未定义书签。 3.2 系统流程图 ................................................... 错误!未定义书签。4系统详细设计 .................................................................... 错误!未定义书签。 5 测试 .................................................................................... 错误!未定义书签。 5.1 测试方案 ....................................................... 错误!未定义书签。 5.2 测试结果 ....................................................... 错误!未定义书签。 6 小结 .................................................................................... 错误!未定义书签。参考文献 ............................................................................... 错误!未定义书签。附录.................................................................................... 错误!未定义书签。

相关文档
相关文档 最新文档