创新课程设计曹斌_第1页
创新课程设计曹斌_第2页
创新课程设计曹斌_第3页
创新课程设计曹斌_第4页
创新课程设计曹斌_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、创新课程设计曹斌作者:日期:十进制加减乘除法计算器院系:电子与电气工程学院专业:电子信息工程班级:094 1姓名:曹斌学号:94109006指导老师:薛晓一、设计要求 ?以 52 系列单片机为核心实现一个简易计算器,设计十进制加减乘除法计算器。要求能(不同时)显示3 位输入和 4 位输出。二、设计目的要求计算器能实现加减乘除四种运算,具体如下:1、加法 : 整数加法2、减法 : 整数减法3、乘法 : 多位整数乘法4、除法 : 整数除法 5?、有清除功能、在原有要求上 展多位 入和 出,超出 示乱 三、设计方案论证按照系 的功能的要求, 初步确定 系 由主控模 、 模 、 示模 、 描接口 路共

2、四个模 成, 主控芯片使用 5系列 STC8952 片机,采用高性能的静 80C5 , 由先 工 制造 , 并 有非易失性 lash 程序存 器。它是一种高性能、低功耗的 8 位 COMS微 理芯片,市 用最多。 ?监测模 采用三极管和蜂 器 成 路。 ? 路采用 4*4 矩 路。 示模 采用 4 枚共阴极数 管和7l 1、74 S4芯片构成等器件构成。整个 片机的接口 路 :P0(30)用于数 管段 示 出; 2 用于 描 入; ?P0(6.4 )用于数 管位 控制;P(7) 用于 模 ; 片机最小系 片机最小系 就是支持主芯片正常工作的最小 路部分,包括主控芯片、 复位 路和晶振 路。主控

3、芯片 取 TC89C52RC芯片,因其具有良好的性能及 定性, 价格便宜 用方便。晶振 取 11059 MHz,晶振旁 容 取20F。采用按 复位 路 , 阻分 取 100和 1 K, 容 取 0F。以下 片机最小系 硬件 路 。单片机最小系统硬件电路键盘接口电路采用 P口对键盘进行控制 , 行列式键盘这里主要用反转扫描法进行检测。原理图如下 :数码管显示电路采用8 位数码管对计算数据和结果的显示(实验时只用到了4 位) , 这里选取共阴数码管 , 利用 L1和 74 47 对数码管进行驱动。P0.6P0用来作为位选端, 控制哪几位数码管进行显示。P0.3P0. 控制数码管数字进行显示。以下为

4、数码显示电路的硬件电路图监视电路监视电路就是在按键时,发出声音提醒 , 以确保输入数字有效。这里就采用 5蜂鸣器作为示音设备。用 0. 口输出信号。以下为报警电路硬件电路图? (1) 键盘扫描函数键盘电路采用 4矩阵键盘电路。 采用扫描法对键盘进行扫描 , 对 P2 口的扫描结果和各按键的地址 , 我们就可以得到是哪个键按下 , 从而完成键盘扫描的功能。? unsig edc a key scan(void) ? ns gned c r o, ol=0, =0xff ; ? KEYIO=0xf ; ? if(KE IO&0 0) 0xf0) ? retur k; ? delay ( 1 );

5、?if( EIO& f0)= 0xf0) ? retur k; or(ro = ; row 4;r +)K YI =( ow); ? =K Y O&0 ;? if (k! =0xf0) ? while(k&(1( col ) )col+ ;k=r *4+c l; ?KE I = f0; ? P =0x7 ; ? wh le(KE I 0 f)!xf0 ) ;? b eak; ? ? return k; ? 键盘调用程序:调用键盘扫描程序 , 读取按键的值。 实现各个键的加减乘除的功能, 采用 swi ch功能进行读取。un ig ed har key_v ct( n i ned char ke

6、y alue) ? ? nsigned ch r nKey;si h( yV l e) ? cas 0:nK y= ; ? b e k;cas 1: ? nKey= ;b ; ? ase2:nKe =9;b eak; ? c se 3: Key=AD ; re k; ? cas : nK y= ;brea ;? se 5:Key=5;re ;? case 6:nKey=6;bre k; ? c se :? nKe =SUB;? b eak;a e 8:? n ;? ak;case 9 : ? nK y=2;? r ak;ca e 0: Ke =3; eak; ase 11:n ey=MUL ;

7、b eak;? ca1 : Key=0; reak ; ? case 1 :nKey= LR; e;? case 14:nKey=EQU;br a ;? c s 15:n y=D V;brea ;? e ault:nKey=ERROR; t r nKey; ? ? ()数码管显示函数采用 4 位数码管对计算数据和结果的显示, 这里选取共阴数码管,利用74S47和 7 8 芯片对数码管进行驱动。P0. P3.4 用来作为位选端,控制哪几位数码管进行显示。比如当06P.为时,其他位全给1。此时就将扫描的数据送给指定数码管显示。vi Led_d sp y(uns n d car i,un ine c

8、r duan) ? dua =0x0f; ? we =0x ;P0= ((7-wei )0;t p1- )tmp* 1 ; /高位乘1 ?fstValu+=keyVau FormatLoo-1 tm;/ 高位乘后相加4、如果除法有余数时怎么处理-任小丽回答:这是硬件的一个缺点, 因为数码管不能够显示小数点位, 所以在处理计算小数点的过程时,舍弃掉了小数点位,只保留整数。 ase EQU: mberForm t ( 1) ; ?swtch(MathWa) ? ?c se : ?resVau=st a ue+secValue;break ;?c: ?r Va ue f tValue- ecValu

9、 ; ?b eak; ? ase3:?eVl e=f tValue secVal e; ? e k;cae : ?resV lu = Value/s cVau; /除法 re k; ?如果要处理余数的话,可在后面求余除法esalue=fstValue seVaue;5、计算 处理子 程序的设计思路- - 朱阿松回答: voidumberomat( nsigne har b ec)if(bS ) ? ?sec lue 0;FomatLoo nValid Led;?for( ; Fom op0;FormtLoo -)?unsi longmp=1;?ign c artm1=F rma oop;for

10、( ;(tmp1-1) 0;tmp1 ) p=0; ecVa u +=eyVal eFo m tLoop- *tm ; ? se ?f t alue=0 ; orma Loop=nVa de d; / 获取按键获取的次数 r (;Forma op0; o maLoo -)unsigned long = ;sign chat p For Lo ; ?for (;(tm 1-1)0;tmp - )/ 按键次数进行循环 *1 的次数 ?tmp*=10;f tVa ue =keyVlu F m t o p 1*tm ; /将获取的值进行组合相加 ?首先从按键获取第一个数值显示 , 然后当输入第二个数值

11、时,将第一个数值存入一个数组缓存起来 , 存入 keyVal e 里面,然后乘于 0 在加上获取的第二个数值 , 然后组合起来送入 fstV lu ,最后得到最后的数值。最后再将获取的第一个输入的数值和第二个输入数值进行加、减、乘、除运算。c eEU: umb Foma(1); witch( thWay)? ?case 1:re Vl efst aue+s alue;加法运算bre k; ase 2:re Value f t alue-secVa e; /减法运算b ak;cse 3: ?resVal e stValue* eValu ; /乘法运算 ?bek;case : ?res alu

12、fst lu /se V u ; /除法运算br k; ?resForma ( ) ;bre k;然后主程序调用 ? id main(void)?sys_init();f r(;) ?Cal ul e( ); ?DisplayLoop=nVa id Led;if(Displa Loop=0) d_disp ay(0 ,0); ? l e? ?for(;Disp ayLop0;D splayL p- )? ?Le d s ay(Di p ayLop-1,keyValue DisplayL op- ) ;/ 将缓存的数值赋给数码管的段选d ay(5) ; ?、请问你们的设计计算器的优缺点是什么?-

13、 王坡回答:优点是可以实现任意位的计算输入和输出。缺点是不能算小数。7、如果我要计算的是 00*100 得到的结果怎么显示? - - 董艳波回答:按照原先题目要求和设计发现, 结果超值 , 显示错误。这如果要设计计算器的话太不方便。经改过之后, 可以显示其 100*10 的值,。为 0 0.、如果输入的数字是负数怎么处理- -周丹阳回答 : 按要求是没有负数的 , 但如果想要用到负数的话, 可以用按键进行判断。可以在u signed c rke vect( i ned char keyValue)函数加个cas语句 , 然后在voiC lclte(voi) 函数里加个I 语句进行判断,如 :I

14、F (/ 所按的键 )/ 加个符号 ;, 但由于硬件限制,数码管不能显示符号,所以不能用到。、程序能不能实现两个数相加之后数值直接显示 , 然后自动保存,再乘或除运算之后显示结果? - - 袁一方回答:我们设计的程序不可以实现, 程序只可进行一步运算, 但可以把结果作为第一个输入的值继续进行运算 , 也就是说多步运算只能一步一步来。1、是否可以实现两个整数相减而得到负数? - 黄文淑回答:不可以实现 , 本程序会显示乱码。程序代码:unsigne ch y_sca( vo) ;unsigned har ey_vect(u sig ed cha ey l e); voi sy_init( );

15、nclude omon. #nclude y_i it hvoid ys_init()P0 0x80; i clude r g5 .h#dfine ADD21#def ne S B #define M L 23#efine IV 2 deineC R 25 d fine E 26 #dfin ERRO 2 oid dela (u s gned c ar );#nclu com on.h id de (unsign d cha z ) nsi ned char x,y; for(x=50;x ; x-) for (y=z;y0;y- );vid ed_isplay(unsigned hr we

16、, unsigned ar duan); #in lude c mo. #includ displa .h oi L _disp y( signed ch r i,unsi nedchar dua )?d an&00 ;?we&0x0;?P0=(7-wei)4)| an|0x 0;void Calc ate (vid);voi mbe r at(u igned c ar bSec); oidr sF t(v d); #incl de com .h i clude k y.h efine K YI P2u ign d charkey_sca ( o )?u signed c ar row,col

17、, k 0xff ;KE =0x0;if(KE IO0x )=0x 0)re ur ;d ay( 0);?if(KEY 0xf )=0xf0)?r tur k;f r ( r =0;row; r w +)?EYIO(1row);?k=KEYIO&x0;?if ( k!=0xf0 )? ? hile(k&(1; oma Lop- )?un gned ng t =1;?signed c ar tmp1=Form tLoop;? for(;(tmp1- )0;tmp1 -) ?tmp*=10;?scValue+= Value For tLoop 1* p;?els ?fstV u = ; ?For

18、tLoo nV id Led;?for (;FormaLo 0;For atLo -)?uni ned l ng m =;?sgne hart =Formato;? for(;( mp1-1)0; tmp-)?t p 10;? ?fstV lue+=keyVa ueF rm op-1* m;? voidr sFormat( od)?igned cha eschr 7;?or (; schar -1; scha - )?unig l n tmp= ; ig d cha t p=r sc r; f r(;tmp1 0; mp-)? p*=10;? k V ere a(uns ned ca)( es

19、Va ue/ mp);?resValu = e alu reschar*tm;?fo ( ValideLed=8;nValideLed0; Vali Led- )? if(ke al nVlide ed-1!=0) ?rea ;?void Cal ulat (vo d)?n y= e_vect(k y_cn();if(nky!=ERROR)?if (ney;nLoop -)?kyVlu n op=ke ValuenLoop-1 ; ? ?ValideL d+;? ke Value0=n ;? ?els ? ?swit h(nk y) ? ? case ADD:? NmerF rma( );?na ideLed ;? ? keyVl e0 0;? ?MathWay1;? ak; ?cse SUB:?NumberFormat(0) ;? ?na i eLd=;? ? ?kyValu 0 0;? ?Mt Way=2;? ? reak;? case MUL:? ?Num rFo t (0);? ?nVali ed0;? ?keyVal e = ;?Mat ay=3;? break ;? ?cse :? ?NumberFor t ( ) ;?nVl deLed;?keyV lu 0= ;?MathW y=;?

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论