文档库 最新最全的文档下载
当前位置:文档库 › 计算器算法原理

计算器算法原理

计算器算法原理
计算器算法原理

计算器算法原理

除法也用类似竖式的方法,从高位到低位逐一得出结果。大概过程如下:(注意,是二进制运算)

1、先左移除数,直到除数不小于被除数,同时记录移动的位数;

2、开始循环,循环次数为前一步移动的位数加1;

3、比较被除数与除数的大小,如果被除数不小于除数,则该位结果为1,否则为0;

4、除数右移一位,继续循环。

这种方法同样可以进行小数运算,根据需要的有效数字位数确定循环次数。

漏了一点,修改一下:

3、比较被除数与除数的大小,如果被除数不小于除数,则该位结果为1,并把被除数减去除数,否则为0

加减乘除求余:

#include

#include

#include

#include

#define DEF_32

#ifdef DEF_32

typedef unsigned int uint;

const uint low_mask = 0xffff;

const uint hig_mask = 0xffff0000;

#else

typedef unsigned long long uint;

const uint low_mask = 0xffffffff;

const uint hig_mask = 0xffffffff00000000;

#endif

const uint alignment = 8;

struct _DATA_

...{

size_t capacity;//容量

size_t len;//使用的存储单元

uint *p;//内容

};

typedef struct _DATA_ BigNumber;

typedef BigNumber* BigNumberPtr;

BigNumberPtr NewBigNumber(size_t len );

BigNumberPtr CopyNewBigNumber(BigNumberPtr p);

void CopyBigNumber(BigNumberPtr o,BigNumberPtr n);

BigNumberPtr ResizeBigNumber(BigNumberPtr p, size_t len );

void DestoryBigNumber(BigNumberPtr p);

void printBigNum( BigNumberPtr p );

void printBinBigNum( BigNumberPtr p );

int Borrow( uint* p , size_t len );//借位

BigNumberPtr Carry(BigNumberPtr p);//处理进位

BigNumberPtr RightShiftBigNumber(BigNumberPtr p, size_t pos );//右移BigNumberPtr LeftShiftBigNumber(BigNumberPtr p, size_t pos );//左移

BigNumberPtr Multiply(BigNumberPtr ap,BigNumberPtr bp);//乘法

BigNumberPtr Add(BigNumberPtr l,BigNumberPtr r);//大数加法

BigNumberPtr AddNumber(BigNumberPtr l,uint n);//加法2

BigNumberPtr Sub(BigNumberPtr l,BigNumberPtr r);//大数减法

BigNumberPtr SubThis(BigNumberPtr l,BigNumberPtr r);//

BigNumberPtr SubNumber(BigNumberPtr l,uint n);//减法

BigNumberPtr DivideAndRemainder(BigNumberPtr l,BigNumberPtr r,BigNumberPtr

Remainder);//除法,最后参数为余数,返回值为结果size_t GetBitNum(uint n);

int main()

...{

int i=0;

const int test_len = 127;

BigNumberPtr l = NewBigNumber( test_len+1 );

BigNumberPtr r = NewBigNumber( test_len );

BigNumberPtr pRemainder = NewBigNumber( test_len );

BigNumberPtr pRet = NULL;

srand( (unsigned int)time(NULL) );

for(i=0;i

l->p[i] = (rand()*rand())&low_mask;

r->p[i] = (rand()*rand())&low_mask;

}

l->p[i] = (rand()*rand())&low_mask;

printBigNum( l );

printBigNum( r );

pRet = DivideAndRemainder( l , r , pRemainder);

if( pRet )...{

printf("商");printBigNum( pRet );

printf("余数");printBigNum( pRemainder );

DestoryBigNumber(pRet);

pRet = NULL;

}

DestoryBigNumber(pRemainder);

pRet = Multiply( l , r );

printf("积");printBigNum( pRet );

DestoryBigNumber(pRet);

pRet = NULL;

pRet = Sub( l , r );

if( pRet )...{

printf("差");printBigNum( pRet );

DestoryBigNumber(pRet);

pRet = NULL;

}

pRet = Add( l , r );

printf("和");printBigNum( pRet );

DestoryBigNumber(pRet);

pRet = NULL;

DestoryBigNumber(l);

DestoryBigNumber(r);

return 0;

}

BigNumberPtr NewBigNumber(size_t len )

...{

BigNumberPtr pRet = (BigNumberPtr)malloc( sizeof(BigNumber) );

pRet->len = len;

pRet->capacity = (len/alignment+1)*alignment;

pRet->p = (uint*)malloc( (size_t)(pRet->capacity*sizeof(uint)) );

memset( pRet->p , 0 , (size_t)(sizeof(uint)*(pRet->capacity) ) );

return pRet;

}

BigNumberPtr CopyNewBigNumber(BigNumberPtr p)

...{

BigNumberPtr pRet = (BigNumberPtr)malloc( sizeof(BigNumber) );

pRet->len = p->len;

pRet->capacity = p->capacity ;

pRet->p = (uint*)malloc( (size_t)(p->capacity*sizeof(uint)) );

memcpy( pRet->p , p->p , (size_t)(sizeof(uint)*pRet->capacity) );

return pRet;

}

BigNumberPtr ResizeBigNumber(BigNumberPtr p,size_t len )

...{

if( len > p->len )...{

if( p->capacity >=len )...{

memset( &(p->p[p->len]) , 0 ,(size_t)(sizeof(uint)*(p->capacity - p->len)) );

p->len = len ;

}else...{

BigNumberPtr pRet = NewBigNumber( len );

memcpy( pRet->p , p->p ,(size_t)(p->len*(sizeof(uint))) );

DestoryBigNumber( p );

return pRet;

}

}else if(len == p->len )

;

else

p->len = len ;

return p;

}

void CopyBigNumber(BigNumberPtr o,BigNumberPtr n)

...{

if( n->capacity >= o->len )...{

memcpy( n->p , o->p , (size_t)(o->len*sizeof(uint)) );

n->len = o->len;

}else...{

free( n->p );

n->p = (uint*)malloc( (size_t)(o->capacity*sizeof(uint)) );

n->capacity = o->capacity;

n->len = o->len;

memcpy( n->p , o->p , (size_t)(o->len*sizeof(uint)) );

}

}

void DestoryBigNumber(BigNumberPtr p)

...{

if( p )...{

if(p->p)

free( p->p );

free( p );

}

}

BigNumberPtr RemoveHigZero(BigNumberPtr p)

...{

while(0 == p->p[p->len-1])

p->len--;

if( 0 == p->len)

p->len=1;

return p;

}

BigNumberPtr Multiply(BigNumberPtr l,BigNumberPtr r)

...{

BigNumberPtr pRet = NewBigNumber( l->len + r->len );

BigNumberPtr pTemp = NewBigNumber( 1 + r->len );

uint i=0,j=0;

for( i=0 ; ilen ; i++)...{

for( j=0 ; jlen ; j++)

pTemp->p[j] = l->p[i]*r->p[j];

Carry( pTemp );

for( j=0 ; j< r->len+1 ; j++ )

pRet->p[i+j] += pTemp->p[j];

memset( pTemp->p , 0 , (size_t)(pTemp->len*sizeof(uint)) );

Carry( pRet );

}

DestoryBigNumber(pTemp);

return RemoveHigZero( pRet );

}

BigNumberPtr RightShiftBigNumber(BigNumberPtr p, size_t pos ) ...{

size_t n = pos/(sizeof(uint)*4);

uint temp = 0 ;

size_t j=0;

pos %= (sizeof(uint)*4);

if( n >0 )...{

p->len -= n ;

memcpy( p->p , p->p+n , (size_t)(sizeof(uint)*(p->len)) );

}

if( 0 == pos )

return RemoveHigZero( p );

if( 1 == p->len )...{

p->p[0]>>=pos;

}else...{

for( j=0 ; j< p->len -1 ; j++)...{

temp = p->p[j+1] & low_mask ;

p->p[j] |= temp<<( sizeof(uint)*4 );

p->p[j]>>=pos;

p->p[j] &= low_mask;

}

p->p[j]>>=pos;

}

return RemoveHigZero( p );

}

BigNumberPtr LeftShiftBigNumber(BigNumberPtr p, size_t pos ) ...{

const size_t n = pos/(sizeof(uint)*4);

const size_t org_len = p->len;

int temp = 0;

p = ResizeBigNumber( p , p->len + n + 1 );

pos %= (sizeof(uint)*4);

if( n > 0 )...{

for(temp=(int)org_len-1; temp>=0 ; temp-- )

p->p[temp+n] = p->p[temp];

memset( p->p , 0 , sizeof(uint)*n) ;

}

if( pos > 0 )...{

for(temp = 0 ; temp < (int)p->len ; temp++ )

p->p[temp]<<=pos;

Carry( p );

}

return RemoveHigZero( p );

}

BigNumberPtr Add(BigNumberPtr l,BigNumberPtr r) ...{

BigNumberPtr pRet = NULL;

uint i=0;

size_t len=0;

if( l->len > r->len )

len = l->len;

else

len = r->len;

pRet = NewBigNumber( len + 1 );

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

pRet->p[i] = l->p[i] + r->p[i];

Carry( pRet );

return RemoveHigZero( pRet );

}

BigNumberPtr AddNumber(BigNumberPtr l,uint n) ...{

l->p[0] += n;

return Carry( l );

}

BigNumberPtr Sub(BigNumberPtr l,BigNumberPtr r) ...{

BigNumberPtr pRet = CopyNewBigNumber( l );

size_t i = 0;

for( i =0 ; i < pRet->len ; i++)...{

if( pRet->p[i] >= r->p[i] )

pRet->p[i] = pRet->p[i] - r->p[i];

else

if( Borrow( &(pRet->p[i]) , pRet->len-i ) )

pRet->p[i] = pRet->p[i] - r->p[i];

else...{

DestoryBigNumber( pRet );

return 0;

}

}

Carry( pRet );

return pRet;

}

BigNumberPtr SubThis(BigNumberPtr l,BigNumberPtr r) ...{

BigNumberPtr pRet = CopyNewBigNumber(l);

uint i = 0;

for( i =0 ; i < pRet->len ; i++)...{

if( pRet->p[i] >= r->p[i] )...{

pRet->p[i] = pRet->p[i] - r->p[i];

}else

if( Borrow( &(pRet->p[i]) , pRet->len-i ) )

pRet->p[i] = pRet->p[i] - r->p[i];

else...{

DestoryBigNumber( pRet );

return 0;

}

}

Carry( pRet );

CopyBigNumber( pRet , l );

DestoryBigNumber( pRet );

return l;

}

int Borrow( uint* p , size_t len )

...{

if( 1 == len )

return 0;

if( p[1] > 0 )...{

p[1]--;

p[0] += low_mask + 1;

return 1;

}else...{

if( Borrow( p+1 , len-1 ) )...{

p[1]--;

p[0] += low_mask + 1;

return 1;

}

}

return 0;

}

BigNumberPtr SubNumber(BigNumberPtr l,uint n) ...{

if(l->p[0]>=n)

l->p[0] -= n;

else

if( Borrow( l->p , l->len ) )

l->p[0] -= n;

else

return 0;

return l;

}

BigNumberPtr Carry(BigNumberPtr p)//处理进位

...{

size_t i;

for(i=0;ilen-1; i ++)...{

p->p[i+1] += (p->p[i]&hig_mask)>>(sizeof(uint)*4);

p->p[i]&=low_mask;

}

if( p->p[i] > low_mask )...{

p = ResizeBigNumber( p , p->len + 1 );

p->p[i+1] += (p->p[i]&hig_mask)>>(sizeof(uint)*4);

p->p[i]&=low_mask;

}

return p;

}

size_t GetBitNum(uint n)

...{

int i=0;

const uint temp = 1;

uint t;

for( i = sizeof(uint)*4 ; i >=0 ; i-- )...{

t= temp<

if( n&t )

break;

}

return i;

}

BigNumberPtr DivideAndRemainder(BigNumberPtr l,BigNumberPtr r,BigNumberPtr

Remainder)

...{

BigNumberPtr pRet = CopyNewBigNumber( l );

BigNumberPtr pTemp = CopyNewBigNumber( r );

BigNumberPtr p = NULL;

BigNumberPtr pResult = NewBigNumber( 1 );

size_t n = GetBitNum( pRet->p[pRet->len-1] ) + (size_t)(sizeof(uint)*4*(pRet- >len-1)) ;

const size_t n2 = GetBitNum( r->p[r->len-1] ) + (size_t)(sizeof(uint)*4*(r->len-1)) ;

size_t i=0;

pTemp = LeftShiftBigNumber( pTemp , n-n2 );

for( i=0 ; i

p = SubThis( pRet , pTemp );

if( p )

AddNumber( pResult , 1 );

pResult = LeftShiftBigNumber( pResult , 1 );

pTemp = RightShiftBigNumber( pTemp , 1 );

}

p = SubThis( pRet , pTemp );

if( p )

AddNumber( pResult , 1 );

if( Remainder )

CopyBigNumber( pRet , Remainder );

DestoryBigNumber( pRet );

DestoryBigNumber( pTemp );

RemoveHigZero( Remainder );

return pResult;

};

void printBigNum( BigNumberPtr p )

...{

size_t i=0;

for( i=0 ; ilen ; i++ )...{

#ifdef DEF_32

printf("%04X",p->p[ p->len-i-1 ] );

#else

printf("%08X",p->p[ p->len-i-1 ] );

#endif

}

printf(" ");

}

void printBinBigNum( BigNumberPtr p )

...{

uint i=0,j=0;

const uint k=1;

for( i=0 ; ilen ; i++ )...{

printf(" %08X " ,p->p[p->len-i-1] );

for( j=0;j

printf("%c" , (p->p[p->len-i-1]&(k<<(sizeof(uint)*4-j-1)) )?'1':'0' );

if( 7==j%8 )printf(" ");

}

}

printf(" ");

}

/**********************多位数的除法*******************/ //此函数可改进为直接存储9个试商的值,无须多次调用

char* TestQuotient(char *p, int n, BOOL bAddZero)

{

ASSERT( NULL != p );

char *pTemp = NULL;

char result[MAX_BUFFER], chTemp[MAX_BUFFER];

strcpy(chTemp, p);

memset(result, 0, MAX_BUFFER);

char *pResult = &result[MAX_BUFFER - 2];

int len = strlen(chTemp);

ASSERT( len > 0 );

int subAdd = 0;;

int nResultIndex = MAX_BUFFER - 1;

int m;

for( int i = len - 1; i >= 0; i-- )

{

nResultIndex--;

m = (chTemp[i] - '0') * n + subAdd;

subAdd = m / 10;

result[nResultIndex] = m % 10 + '0' ;

}

if( subAdd != 0 )

{

nResultIndex--;

result[nResultIndex] = subAdd + '0';

}

else if( bAddZero )

{

nResultIndex--;

result[nResultIndex] = '0';

}

return &result[nResultIndex];

}

char* StringSub( char *pDes, char *pSub, char *pResult)

{

char ch1[MAX_BUFFER], ch2[MAX_BUFFER], result[MAX_BUFFER]; strcpy(ch1, pDes);

strcpy(ch2, pSub);

strcpy(result, pDes);

int index = MAX_BUFFER - 1;

int temp;

int sub;

int j = strlen(pSub) - 1;

int i;

BOOL bCmpLess = strcmp(pDes, pSub ) < 0;

if(bCmpLess )

i = j + 1;

else

i = j;

while( j >= 0 )

{

temp = ch1[i] - ch2[j];

if( temp < 0 )

{

ch1[i] = temp + '0' + 10;

for( int k= i - 1; k >= 0; k--)

{

sub = ch1[k] - '1';

if( sub < 0 )

ch1[k] = '9';

else

{

ch1[k] = sub + '0';

break;

}

}

}

else

ch1[i] = temp + '0';

i--;

j--;

}

for( i = 0; i < MAX_BUFFER - 1 ; i++ )

{

if( ch1[i] != '0' )

break;

}

strcpy(pResult, &ch1[i]);

return pResult;

}

void Divide64(char *dividend, char *divisor)

{

ASSERT( NULL != divisor && NULL != dividend ); char shang[MAX_BUFFER];

char yushu[MAX_BUFFER];

char chDiv[MAX_BUFFER];

memset(chDiv, 0, MAX_BUFFER);

memset(shang, 0, MAX_BUFFER);

memset(yushu, 0, MAX_BUFFER);

int len1 = strlen(dividend);

int len2 = strlen(divisor);

ASSERT(len1 >= len2);

int nTest;

char pTestQuotient[MAX_BUFFER];

char *pTest;

char *p;

char ch;

int nCmpRev= strcmp(dividend, divisor);

if( len1 == len2 && nCmpRev < 0 )

shang[0] = '0';

int index = 0;

BOOL bLess = FALSE;

int count;

if( nCmpRev < 0 )

{

count = len1 - len2 - 1;

p = dividend + len2 + 1;

memcpy(chDiv,dividend, len2 + 1);

}

else

{

count = len1 - len2;

p = dividend + len2;

memcpy(chDiv,dividend, len2);

}

int testlen;

while( count >= 0 )

{

bLess = strcmp( chDiv, divisor) < 0;

if( len1 > len2 || (len1 == len2 &&!bLess) )

{

strcpy(pTestQuotient, divisor);

for( nTest = 2; nTest <= 9; nTest++ )

{

pTest = TestQuotient(divisor, nTest, bLess);

testlen = strlen(pTest);

len1 = strlen(chDiv);

if( strcmp(chDiv, pTest ) < 0 || testlen > len1 )

break;

strcpy(pTestQuotient, pTest);

}

shang[index] = '0' + nTest - 1;

StringSub(chDiv, pTestQuotient, chDiv);

}

else

shang[index] = '0';

len1 = strlen(chDiv);

chDiv[len1++] = *p;

chDiv[len1] = '\0';

len1 = strlen(chDiv);

p++;

index++;

count--;

}

strcpy(yushu, chDiv);

if( chDiv[0] == '\0' )//余数为零

yushu[0] = '0';

TRACE("余数是: %s \n", yushu);

TRACE("商是: %s\n", shang);

}

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

计算机地图制图原理与方法试题

计算机地图制图原理与 方法试题 Document serial number【KKGB-LBS98YT-BS8CB-BSUT-BST108】

中南大学现代远程教育课程考试模拟复习试题.及参考答案 计算机图形学 一、名词解释 1.图形 2.像素图 3.参数图 4.扫描线 5.构造实体几何表示法 6.投影 7.参数向量方程 8.自由曲线 9.曲线拟合 10.曲线插值 11.区域填充 12.扫描转换 二、判断正误(正确写T,错误写F) 1.存储颜色和亮度信息的相应存储器称为帧缓冲存储器,所存储的信息被称为位 图。() 2.光栅扫描显示器的屏幕分为m行扫描线,每行n个点,整个屏幕分为m╳n个点,其中每个点称为一个像 素。―――――――――――――――――――――() 3.点阵字符用一个位图来表示,位图中的0对应点亮的像素,用前景色绘制;位图中的1对应未点亮的像素,用背景色绘 制。――――――――――――――――-() 4.矢量字符表示法用(曲)线段记录字形的边缘轮廓线。―――――――――――() 5.将矢量字符旋转或放大时,显示的结果通常会变得粗糙难看,同样的变换不会改变点阵字符的显示效 果。―――――――――――――――――――――――――()

6.在光栅图形中,区域是由相连的像素组成的集合,这些像素具有相同的属性值或者它们位于某边界线的内 部。―――――――――――――――――――――――() 7.多边形的扫描变换算法不需要预先定义区域内部或边界的像素值。――――――() 8.齐次坐标表示法用n维向量表示一个n+1维向 量。―――――――――――――() 9.实体的边界由平面多边形或空间曲面片组成。―――――――――――――――() 10.平面多面体表面的平面多边形的边最多属于两个多边形,即它的表面具有二维流形的性 质。―――――――――――――――――――――――――――――――() 11.实体几何性质包括位置、长度和大小 等。―――――――――――――――――() 12.实体的拓扑关系表示实体之间的相邻、相离、方位、相交和包含等关系。―――() 13.实体的扫描表示法也称为推移表示法,该表示法用一个物体和该物体的一条移动轨迹来描述一个新的物 体。――――――――――――――――――――――――() 14.如果投影空间为平面,投影线为直线,则称该投影为平面几何投影。――――-() 15.平面几何投影分为两大类:透视投影和平行投影。――――――――――――- () 16.当投影中心到投影面的距离为有限值时,相应的投影为平行投 影。――――――() 17.当投影中心到投影面的距离为无穷大时,相应的投影即为透视投影。―――――()

微机原理课件设计简易计算器

二○一一~二○一二学年第一学期 信息科学与工程学院 自动化系 课程设计计划书 课程名称:微机原理及应用课程设计班级:自动化0901 姓名:王立 学号:200904134032 指导教师:孟志华 二○一一年十二月六日

一、课题名称 简易计算器设计 二、课题目的 利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。 三、需求分析 (1)能够实现99以内的加减乘法运算,并显示在2位LED上。 (2)对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。 四、方案选择 方案一: 该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。

方案二: 该方案则是将LED显示电路和键盘扫描电路分别接在两个不同的8255上,扫描和显示时,选中不同的8255。 方案三: 该方案则只用一片8255驱动LED显示和键盘扫描电路。 方案评估: 方案一:LED显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃! 方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃! 方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255即可实现要求!) 综上所述:采用方案三!

五、程序流程图 程序总流程图:

简单计算器c++课程设计

简单计算器 1 基本功能描述 简单计算器包括双目运算符和单目运算符。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图1,是输入数据子函数的流程图。打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。 如图2,是整个计算器的流程图。对于输入的算式,判断运算符是双目运算符还是单目运算符。如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。结束程序。

输入一个数字 在之前输入的数字字符后面加上现在的数字字符。 Eg :m_str+=”9”。 直接使编辑框显示所输入的数字字符。 Eg :m_str=”9”。 pass3=1表示已有数字输入 开始 之前是否有数字输入? pass3==1? 继续键入数字? 用UpdateData(FALSE)刷新显示 图1 输入数据子函数流程图 Y N Y N

输入开始 双目运算符 是否每一个操作数都存入a[]数组? 把操作数存入a[z+2],把运算符存入b[z+1]。 单目运算符 将字符串转换 为可计算的数进行运算 运算是否合法? 将结果存入a[0] 弹出对话框提示错误 结束Y Y N N 图2 简单计算器总流程图

数字测图原理与方法

数字测图原理与方法 一、比例尺的概念及比例尺的分类。 比例尺:图上长度与相应的实地水平长度之比,称为该图的比例尺。 比例尺的分类 ①小比例尺:1:25万、1:50万、1:100万 ②中比例尺:1:2.5万、1:5万、1:10万 ③大比例尺:1:500、1:1000、1:2000、1:5000、1:1万 二、白纸测图与数字测图的基本概念。 (1)白纸测图:传统的地形测量是利用测量仪器对地球表面局部区域内的各种地物、地 貌(总称地形)的空间位置和几何形状进行测定,以一定的比例尺并按图式符号绘 制在图纸上,即通常所称的白纸测图。 (2)数字测图:广义地讲,生产数字地图的方法和过程就是数字测图。数字测图实质上 是一种全解析机助测图方法。它以计算机为核心,在相关输入输出设备的支持下,对地形空间数据进行采集、存贮、处理、输出和管理。 三、什么是大比例尺数字地图? 贮存在数据载体(磁带、磁盘或光盘)上的数字形式的大比例尺地图。 四、大比例尺数字地图的特点。 (1)以数字形式表示地图的内容。 (2)具有良好的现势性。 (3)以数字形式贮存的1:1的数字地图,不受比例尺和图幅的限制。 (4)具有较高的位置精度且精度均匀。 (5)为与空间位置有关的信息系统提供基础数据。 (6)地图的建立需要较大的费用和较长的时间。 (7)读写需要相应的软硬件的支持。 五、数字测图技术特点。 (1)精度高 (2)自动化程度高、劳动强度小 (3)更新方便、快捷 (4)便于保存与管理 (5)便于应用 (6)易于发布和实现远程传输 六、数字测图系统的工作过程及作业模式。 数字测图(digital surveying and mapping,简称DSM)系统是以计算机为核心,在外连输入输出设备硬、软件的支持下,对地形空间数据进行采集、输入、成图、绘图、输出、管理的测绘系统。 大比例尺数字测图分为三个阶段:数据采集、数据处理和地图数据的输出。 广义地理解数字测图系统:采集地形数据输入计算机,由机内的成图软件进行处理、成图、显示,经过编辑修改,生成符合国标的地形图,并控制数控绘图仪出图。 七、数字测图的数据采集方式有哪几种? ①地面数字测图法 ②地图数字化法 ③数字摄影测量法

数据结构课程设计计算器

数据结构课程设计报告 实验一:计算器 设计要求 1、问题描述:设计一个计算器,可以实现计算器的简单运算,输出并检验结果的正确性,以及检验运算表达式的正确性。 2、输入:不含变量的数学表达式的中缀形式,可以接受的操作符包括+、-、*、/、%、(、)。 具体事例如下: 3、输出:如果表达式正确,则输出表达式的正确结果;如果表达式非法,则输出错误信息。 具体事例如下: 知识点:堆栈、队列 实际输入输出情况: 正确的表达式

对负数的处理 表达式括号不匹配 表达式出现非法字符 表达式中操作符位置错误 求余操作符左右出现非整数 其他输入错误 数据结构与算法描述 解决问题的整体思路: 将用户输入的中缀表达式转换成后缀表达式,再利用转换后的后缀表达式进行计算得出结果。 解决本问题所需要的数据结构与算法: 用到的数据结构是堆栈。主要算法描述如下: A.将中缀表达式转换为后缀表达式: 1. 将中缀表达式从头逐个字符扫描,在此过程中,遇到的字符有以下几种情况: 1)数字 2)小数点 3)合法操作符+ - * / %

4)左括号 5)右括号 6)非法字符 2. 首先为操作符初始化一个map priority,用于保存各个操作符的优先级,其中+ -为0,* / %为1 3. 对于输入的字符串from和输出的字符串to,采用以下过程: 初始化遍历器std::string::iterator it=infix.begin() 在当it!=from.end(),执行如下操作 4. 遇到数字或小数点时将其加入到后缀表达式: case'1':case'2':case'3':case'4':case'5':case'6':case'7':case '8':case'9':case'0':case'.': { to=to+*it; break; } 5. 遇到操作符(+,-,*,/,%)时,如果此时栈顶操作符的优先级比此时的操作符优先级低,则将其入栈,否则将栈中的操作符从栈顶逐个加入到后缀表达式,直到栈空或者遇到左括号,并将此时的操作符加入到栈中,在此过程中需判断表达式中是否出现输入错误: case'+':case'-':case'*':case'/':case'%': { if((it+1)==from.end()) { cout<<"输入错误:运算符号右边缺少运算数"<

2014年微机原理课程设计题目-汇总 (1)

1.根据键盘输入的一个数字显示相应的数据螺旋方阵。如输入4,则显示。 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 共需要显示4^2=16个数字。 要求:①根据键盘输入的数字(3-20),显示相应的数据方阵。 ② 画出设计思路流程图,编写相应程序。 2.显示日期或时间。要求:有提示信息,输入字母“r”,可显示系统当前日期;输入字母“s”,可 显示系统当前时间;输入字母“q”,退出程序。 3.字符游戏 随机显示字符ch,等待用户输入 如果输入字符与ch一致,则随机显示下一个字符ch2;否则显示“输入错误”; 如此循环; 输入Enter结束 点击Enter程序退出; 4.从键盘上输入7名裁判的评分(0-10,整数),扣除一个最高分,扣除一个最低分,计算出其它五 个分数的平均值(保留一位小数),并在显示其上输出 “The final score is:”和最终结果。 5.为短跑比赛设计一个确定成绩次序的程序,要求能够输入8个队员编号,成绩;输出最终的排名 次序编号及成绩。(成绩时间格式--秒数:百分秒数,如12:15) 6.为评委设计一个显示选手通过的指示器,以电脑显示屏作为指示屏。当从键盘输入0时,显示屏 上呈现“×”图形,表示选手被淘汰;当从键盘输入1时,显示屏上呈现“√”图形,表示选手通过。 7.试设计一个道路收费系统,将车型分为大型车、中型车、小型车,每种车型分别有各自的单公里 收费标准,如下表所示,在收费时,将车型和公里数输入系统,就可自动生成收费额,(公里数取整。收费额以元为单位,保留一位小数)。 序号 车型 单公里收费(单位:0.1元) 1 大型车 5 2 中型车 3 3 小型车 1 8.通过实验箱TDN实现8个LED灯循环闪烁。 要求:首先是1、3、5、7号LED灯以此亮1秒钟,当第7号LED灯亮后,这四个灯同时闪烁5下; 然后,2、4、6、8号灯依次亮1秒钟,当第8号灯亮后,这四个灯同时闪烁5下。 9.为男子25米手枪速射决赛设计一个排名程序。决赛有6名运动员参加,每人每轮次打5枪,每枪 打中靶子的中心区就计一分,打不中就记0分。四轮比赛之后,先将成绩最低的选手淘汰(即为

MFC课程设计报告-一个简单的计算器应用程序

设计一个简单的计算器应用程序 一、设计目标与内容 1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。 5.在程序中注意处理数据和运算符的输入,计算结果的显示。 二,设计要求 1.用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释; 2.提交设计报告一份(课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

一个简单的计算器应用程序 总体设计 能够利用所学的基本知识,设计一个简单的计算器应用程序,实现基本的加、减、乘、除、求平方根,求倒数等基本运算(必须实现的功能),实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常用对数等基本运算(这部分功能选做)。在程序中注意处理数据和运算符的输入,计算结果的显示。 详细设计 ◆新建工程Counter 新建工程,选择对话框应用程序。 ◆程序运行主界面

图2-1 在对话框内添加相应的控件,分别给编辑框添加三个变量m_N1,m_N2和m_Result。 然后添加一个组合框,在里面添加十二个单选按钮设置第一个单选按钮为组,如图 图2-2 然后给对话框类添加一个int变量Operator用来作相应运算时的标记。 给控件添加相应的函数 1、给单选按钮添加相应的函数 void CCounterDlg::OnRadio1() { Operator=1; } void CCounterDlg::OnRadio2()

电气原理图的绘制方法

电气原理图の绘制方法 为了表达生产机械电气控制系统の结构、原理等设计意图,便于电气系统の安装、调试、使用和维修,将电气控制系统中各电器元件及其连接线路用一定の图形表达出来,这就是电气控制系统图。用导线将电机、电器、仪表等元器件按一定の要求连接起来,并实现某种特定控制要求の电路。 画电气原理图の一般规律如下: 画主电路 绘制主电路时,应依规定の电气图形符号用粗实线画出主要控制、保护等用电设备,如断路器、熔断器、变频器、热继电器、电动机等,并依次标明相关の文字符号。 画控制电路 控制电路一般是由开关、按钮、信号指示、接触器、继电器の线圈和各种辅助触点构成,无论简单或复杂の控制电路,一般均是由各种典型电路(如延时电路、联锁电路、顺控电路等)组合而成,用以控制主电路中受控设备の“起动”、“运行”、“停止”使主电路中の设备按设计工艺の要求正常工作。对于简单の控制电路:只要依据主电路要实现の功能,结合生产工艺要求及设备动作の先、后顺序依次分析,仔细绘制。对于复杂の控制电路,要按各部分所完成の功能,分割成若干个局部控制电路,然后与典型电路相对照,找出相同之处,本着先简后繁、先易后难の原则逐个画出每个局部环节,再找到各环节の相互关系。 电气安装接线图规范 一般情况下,电气安装图和原理图需配合起来使用。 绘制电气安装图应遵循の主要原则如下: 1、必须遵循相关国家标准绘制电气安装接线图。 2、各电器元器件の位置、文字符号必须和电气原理图中の标注一致,同一个电器元件の各部件(如同一个接触器の触点、线圈等)必须画在一起,各电器元件の位置应与实际安装位置一致。 3、不在同一安装板或电气柜上の电器元件或信号の电气连接一般应通过端子排连接,并按照电气原理图中の接线编号连接。 4、走向相同、功能相同の多根导线可用单线或线束表示。画连接线时,应标明导线の规格、型号、颜色、根数和穿线管の尺寸。 电器元件布置图规范

简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于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 程序清单..................................

微机原理课程设计_简易计算器的设计

目录 一前言 (1) 二总体设计 (2) 三硬件设计 (2) 3.1微处理器8086芯片 (2) 3.2可编程并行接口芯片8255A (3) 3.3LED数码管 (4) 3.44 X 4矩阵按键 (4) 3.5硬件原理图 (6) 四软件设计 (7) 4.1程序流程图 (7) 4.2源代码 (9) ■ ■?I 五仿真 (18) 六课程设计体会 (18) - I 七参考文献 (19) \ 吏\ 一刖言 1.1课程设计的目的和任务 课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教 :第丸卜\\\\ 学环节。 、、、 | r-—__ i 通过课程设计,要求学生熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,使学生得 到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练掌握微机系统与接口扩展电路的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。 通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能

力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。 1.2课程设计指导及要求 在课程设计时,2~3名同学组成1个设计小组,分别完成项目的功能设计、电路编辑及调试、编码及调试和课程设计报告编写工作。同批次同学中选择同一题的不超过3组。在教师指导下,可以相互讨论。每设计小组提交1份设计报告,设计报告由设计小组同学独立完成,不得互相抄袭。教师的主导作用主要在于指明设计思路,启发学生独立设计的思路,解答疑难问题和按设计进度进行阶段审查。学生必须发挥自身学习的主动性和能动性,主动思考问题、分析问题和解决问题,而 不应处处被动地依赖指导老师。同学应积极主动的提出问题、解决问题、讨论问题,互相帮助和启发。 学生在设计中可以引用所需的参考资料,避免重复工作,加快设计进程,但必须和题目的要求相符合,保证设计的正确。指导教师要引导学生学会掌握和使用各种已有的技术资料,不能盲目地、机械地抄袭资料,必须具体分析,使设计质量和设计能力都获得提高。学生要在老师的指导下制定 F.. I I . j 1 I I 好自己各环节的详细设计进程计划,按给定的时间计划保质保量的完成个阶段的设计任务。设计中 j. i z「3 ■■ 可边设计,边修改,软件设计与硬件设计可交替进行,问题答疑与调试和方案修改相结合,提高设计的效率,保证按时完成设计工作并交出合格的设计报告。 二总体设计 设计思路:首先利用程序不断扫描键盘是不是有输入,如果没有就一直扫描,如果有就调用子程序 进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用相应的子程序进行操作,操作 后则继续利用程序不断扫描键盘是不是有输入,从而实现4位十进制数以内的加减乘除法运算。运算完成后将运算的结果储存并显示到LED显示器上。 三硬件设计 3.1微处理器8086芯片 当引脚接高电平时,CPU工作于最小模式。此时,引脚信号24?31的含义及其功能如下: (1)10/M/ (memoryl/Oselect ):存储器、I/O端口选择控制信号。信号指明当前CPU是选择访问存储器还是访问I/O端口。为高电平时访问存储器,表示当前要进行CPU与存储器之间的数据传送。为低电平时,访问I/O端口,表示当前要进行CPU与I/O端口之间的数据传送。 (2)WR/(write ):写信号,输

C语言课程设计 简单计算器程序

课程设计名称:C语言课程设计课程设计题目:简单计算器程序

目录 第1章需求分析 (1) 1.1设计要求 (1) 1.2任务 (1) 第2章总体设计 (2) 2.1设计简介及设计方案论述 (2) 2.2功能模块层次图 (2) 第3章详细设计 (3) 3.3由(后缀)逆波兰表达式计算中缀表达式原理 (8) 3.3.1算法描述 (8) 第4章调试分析 (10) 4.1程序设计中所遇到的错误及犯错的原因 (10) 4.2错误的解决方法 (10) 第5章用户手册 (11) 总结 (15) 参考文献 (16) 附录(程序清单) (17)

第1章需求分析 1.1 设计要求 (1)用 C 语言数据结构实现程序设计; (2)利用结构体、栈、进行相关信息处理; (2)系统的各个功能模块要求用函数的形式实现; (4)界面简单,可操作性高。 1.2任务 (1)定义一个结构体类型数组,输入0~9 及+、--、*等符号的信息,将其信息存储起来; (2)输入简单的加减乘除算术计算式,并在屏幕上显示逆波兰(后缀式)表达式和计算结果; (3)编写代码; (4)程序分析与调试。 说明: 本课程设计将实现一个简单计算器。在功能上尽量模仿windows 的计算器。系统界面不做牵制要求。该程序能实现标准型中+、-、*、/、(、)、.、的混合运算表达式(一般意义上的中缀表达式),将其转换成逆序波兰表达式(后缀表达式)并计算输出结果。在进行运算后可以选择继续运算或者结束当前运算。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

第2章 总体设计 2.1设计简介及设计方案论述 逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相 关的两个运算对象之间,所以,这种表示法也称为中缀表达式。波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。按此方法,每一运算符都置 于其运算对象之后,故称为后缀表达式。 后缀表达式的优点是显而易见的, 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式,遇到运算对象直接压入堆栈,遇到运算符就从堆栈提取后进的两个对象进行计算,这个过程正好符合了计算机计算的原理。后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实 际编程的时候就会体会到它的好处了。 逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转 换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运 算级别的特殊处理。 2.2功能模块层次图 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 简单计算器 表 达 式 格 式 转 换 系统 求 值 计 算 系 统

电气原理图的绘制方法

电气原理图的绘制方法 为了表达生产机械电气控制系统的结构、原理等设计意图,便于电气系统的安装、调试、使用和维修,将电气控制系统中各电器元件及其连接线路用一定的图形表达出来,这就是电气控制系统图。用导线将电机、电器、仪表等元器件按一定的要求连接起来,并实现某种特定控制要求的电路。 画电气原理图的一般规律如下: 画主电路 绘制主电路时,应依规定的电气图形符号用粗实线画出主要控制、保护等用电设备,如断路器、熔断器、变频器、热继电器、电动机等,并依次标明相关的文字符号。 画控制电路 控制电路一般是由开关、按钮、信号指示、接触器、继电器的线圈和各种辅助触点构成,无论简单或复杂的控制电路,一般均是由各种典型电路(如延时电路、联锁电路、顺控电路等)组合而成,用以控制主电路中受控设备的“起动”、“运行”、“停止”使主电路中的设备按设计工艺的要求正常工作。对于简单的控制电路:只要依据主电路要实现的功能,结合生产工艺要求及设备动作的先、后顺序依次分析,仔细绘制。对于复杂的控制电路,要按各部分所完成的功能,分割成若干个局部控制电路,然后与典型电路相对照,找出相同之处,本着先简后繁、先易后难的原则逐个画出每个局部环节,再找到各环节的相互关系。 电气安装接线图规范 一般情况下,电气安装图和原理图需配合起来使用。 绘制电气安装图应遵循的主要原则如下: 1、必须遵循相关国家标准绘制电气安装接线图。 2、各电器元器件的位置、文字符号必须和电气原理图中的标注一致,同一个电器元件的各部件(如同一个接触器的触点、线圈等)必须画在一起,各电器元件的位置应与实际安装位置一致。 3、不在同一安装板或电气柜上的电器元件或信号的电气连接一般应通过端子排连接,并按照电气原理图中的接线编号连接。 4、走向相同、功能相同的多根导线可用单线或线束表示。画连接线时,应标明导线的

微机课设简易计算器

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

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

简易计算器的设计与实现

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

沈阳航空航天大学课程设计报告 目录 第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再读键盘的行线,如读得的数据与第一次的相同,说明真的有按键按下,程序转入确认哪一键按下的程序,该程序是依次向键盘的列线送低电平,然后读键盘的行线,如果读的值与第一次相同就停止读,此时就会的到键盘的行码与列码

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于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芯片进行运算从而

中国矿业大学计算机地图制图原理与方法

《计算机地图制图原理与方法》上机实验报告 学号:07103081 姓名:罗京辉 班级:测绘10-2班 指导教师:王中元 学院:环境与测绘学 院 环境与测绘学院

实验一、扫描矢量化 一、实验目的 1、熟悉Cass制图环境。 2、掌握在计算机制图中扫描矢量化处理。 3、掌握用南方Cass制图软件扫描矢量化的基本步骤与基本方法。 4、进一步对计算机制图课堂知识加深了解。 二、实验原理 扫描矢量化其基本原理是对各种类型的数字工作底图如纸质地图、黑图或聚酯薄膜图,使用扫描仪及相关扫描图像处理软件,把底图转化为光栅图像,对光栅图像进行诸如点处理、区处理、桢处理、几何处理等,在此基础上对光栅图像进行矢量化处理和编辑,包括图像二值化、黑白反转、线细化、噪声消除、结点断开、断线连接等。这些处理由专业扫描图像处理软件进行,其中区处理是二值图像处理(如线细化)的基础,而几何处理则是进行图像坐标纠正处理的基础,通过处理达到提高影像质量的目的。然后利用软件矢量化的功能,采用交互矢量化或自动矢量化的方式,对地图的各类要素进行矢量化,并对矢量化结果进行编辑整理,存储在计算机中,最终获得矢量化数据,即数字化地图,完成扫描矢量化的过程。 数据采集是数字化图最重要的工作,在数字化过程中各种地物的数字化均有自身特点,因而,在数字化作业时必须充分考虑各种类型地物的特点进行数据采集。 对于点状类符号(如独立地物符号),仅需采集符号的定位点数据;对折线类型的线状符号只需采集各转折点数据;曲线类型的线状符号,只对其特征点的数据进行采集,由程序自动拟合为曲线,特征点的选择同地形测图时的方法相同,曲线上明显的转弯点等均是特征点。对于斜坡、陡坎、围墙、栏杆等有方向性的线状类符号,数据的采集要结合图式符号库的具体算法进行,数据采集只在定位线上进行,采集数据的前进方向的选择要按软件图式符号库的规定进行,如规定有方向性的线状类符号的短毛线或小符号在前进方向右侧(或左侧),由此可结合图上符号的具体位置决定数据采集的前进方向;对面状类符号,则只需采集在其轮廓线上的拐点或特征点。面状符号内部有填充符号时,面状符号的轮廓线必须闭合。 三、实验数据 在本次实验中,我所用实验数据为王老师提供的Tif格式的地形图中第二幅地图,数据如下:

电气原理图的绘制方法

电气原理图的绘制方法 导语: 在技术人员眼中,运用电气原理图的方法和技巧,对于分析电气线路,排除机床电路故障是十分有益的。当然,会看电气原理图就需要会画电气原理图。本文将介绍如何绘制电气原理图。 免费获取电气原理图软件软件:https://www.wendangku.net/doc/5918387542.html,/circuit/ 电气原理图绘制软件 亿图电气原理图绘制软件是一款功能强大,绘图简单、易上手的设计软件。软件左侧是符号库,只需将所需的符号拖到设计图纸上,然后通过各种排列、组合、连接、参数设置,就可以轻松绘制出你所需要的电气原理图了。设计完成的电气原理图还可以分享给其他人、添加到邮件中、导出、打印等等。

用亿图绘制电气原理图的方法: 详细操作步骤: 1、新建“工程”,在右侧模板中选择“电路与逻辑”,双击进入编辑页面。(也可以在例子中打开相应的图例,进行快速编辑。) 2、在软件左侧的符号库中打开“基本电路符号”和“传输路径”的符号,如下图所示:

绘图前,应清楚电气元器件布置图的设计应遵循以下原则: ●必须遵循相关国家标准设计和绘制电气元件布置图。 ●相同类型的电气元件布置时,应把体积较大和较重的安装在控制柜或面板的 下方。 ●发热的元器件应该安装在控制柜或面板的上方或后方,但热继电气一般安装 在接触器的下面,以方便与电机和接触器的连接。 ●需要经常维护、整定和检修的电气元件、操作开关、监视仪器仪表,其安装 位置应高低适宜,以便工作人员操作。 ●强电、弱电应该分开走线,注意屏蔽层的连接,防止干扰的窜入。 ●电气元器件的布置应考虑安装间隙,并尽可能做到整齐、美观。 3、开始布置电气元件

基于安卓的计算器的设计与实现

安卓应用程序设计 ——简易计算器的实现院(系)名称 专业名称 学生姓名 学生学号 课程名称 2016年6月日

1.系统需求分析 Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android 的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。计算器通过算法实行简单的数学计算从而提高了数学计算的效率,实现计算器的界面优化,使界面更加友好,操作更加方便。基于android的计算器的设计,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作,即可单机按钮进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。 2.系统概要设计 2.1计算器功能概要设计 根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使用,,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有清除功能。 图2.1系统功能图 整个程序基于Android技术开发,除总体模块外主要分为输入模块、显示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算以及一些其他的功能。具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。 输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及 响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结

微机原理课件设计简易计算器

$ 二○一一~二○一二学年第一学期 信息科学与工程学院 自动化系 : 课程设计计划书 课程名称:微机原理及应用课程设计 班级:自动化 0901 姓名:王立 学号: 4032 ] 指导教师:孟志华

二○一一年十二月六日 一、课题名称 简易计算器设计 二、课题目的 利用8088和8255设计一个简易计算器,并将其结果显示在LED数码管上。熟悉系统设计的基本步骤,掌握8088与8255的接口设计,掌握通过8255设计键盘扫描技术,掌握通过8255显示七段共阴极数码管设计。加强对8088数据总线,地址总线及接口寻址的理解,加深对8255的端口控制的理解。 ! 三、需求分析 (1)能够实现99以内的加减乘法运算,并显示在2位LED上。 (2)对于减法运算产生的负数,可在LED上显示“-”号,若负量超过9,则显示“E0”。 四、方案选择 方案一: 、 该方案将LED显示电路直接接在8088的DB上,而键盘则采用8255进行扫描。

( 方案二: 该方案则是将LED 显示电路和键盘扫描电路分别接在两 个不同的8255上,扫描和显示时,选中不同的8255 。 方案三: ) 该方案则只用一片8255驱动LED 显示和键盘扫描电路。 方案评估: 方案一:LED 显示驱动电路实现起来较简单,但是很浪费系统总线资源,舍弃! 方案二:释放了系统数据总线,但是方案缺乏经济性,因为采用了两片8255,与建设资源节约型社会初衷冲突!舍弃! 方案三:此种方案较为经济,方便,具有模块化的特点(因为将计算和显示电路全部集成在了8255上,应用时,直接挂接8255

即可实现要求!) & 综上所述:采用方案三! 五、程序流程图 程序总流程图:

相关文档