单片机简易计算器课程设计_第1页
单片机简易计算器课程设计_第2页
单片机简易计算器课程设计_第3页
单片机简易计算器课程设计_第4页
单片机简易计算器课程设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计简易计算器设计单片机原理及应用2018年 6 月20日目录设计目得?错误!未定义书签。总体设计及功能介绍 错误!未定义书签。硬件仿真图?错误!未定义书签。四 主程序流程图?错误!未定义书签。五程序源代码?错误!未定义书签。六课程设计体会错误!未定义书签。设计目得本设计就是基于51系列单片机来进行得简单数字计算器设计, 入,进行加、减、乘、除六位整数数范围内得基本四则运算,并在 软件方面使用C语言编程,并用 P ROTUE仿真。可以完成计算器得键盘输LED上显示相应得结果。总体设计及功能介绍根据功能与指标要求,本系统选用MCS 51系列单片机为主控机,实现对计 算器得设计。具体设计及功能

2、如下:由于要设计得就是简单得计算器,可以进行四则运算,为了得到较好得显示效果,采用LED显示数据与结果;另外键盘包括数字键(09)、符号键(+、-、X、+)、清除键与等号键,故只需要16个按键即可,设计中采用集成得计算键盘 ;执行过程:开机显示零,等待键入数值,当键入数字,通过L ED显示出来,当键入+、 、*、/运算符,计算器在内部执行数值转换与存储 ,并等待再次键入数值,当再键入数值后 将显示键入得数值,按等号就会在L ED上输出运算结果。ClJ丄丄刃p硬件仿真图JI-V Al ,1111Pi unXHL 1 厚CH M -琨PD WT PCVi P£ *PftMEt 卩D沁rf

3、l书I Iff!3Di_iFTm flitpj屮亦 P;JJWT 冲晰* 肥齐A00-t 匸 力XIP忙 til rr?- r-WIKBtFT-PIPP1I.1M2円卫PUS Hr Ph 7印n雪;P?PlifPT Pl jnrr n伸 n VTi PTflffli rajjfli一P阴咛一硬件部分比较简单,当键盘按键按下时它得那一行、 那一列得端口为低电平。 因此, 只要扫描行、列端口就是否都为低电平就可以确定就是哪个键被按下.四主程序流程图I'处理是车号廊迟餐作數1站*-I计耳纬釆显示程序得主要思想就是:将按键抽象为字符,然后就就是对字符得处理.将操作数分别转化为字符串存储,操作符

4、存储为字符形式。然后调用P ut e ()函数进行计算并返回结果。体程序及瞧注释还有流程图程序源代码# includ e reg51、h > ?#inc 1u d e< in trins、 h? # inclu de ctyph>/*isdigit ()函数* /?#i nelude< std 1 i b、/*atoi()函数*/? # d e fin euchar unsigne#d e fine uint unsi g ned int?ucha r op era n d1 9 perand2 9 ;/*操作数 * / ?uc h ar o perator ;/* 操

5、作符*/ ?vo i d de 1 ay(uint );u char keyscan( ) ;V oid disp( V oid); ?voidbuf (u int value); ? u inpute ( uint va,uint va2,ucharoptor);u c h ar code t a=OxcO , 0xf9, 0 xa4 , 0xb0,0x 9 9,0 x92 ,0x 8 2 , 0 x f 8,0x80 , 0 x 9 0, 0xff;/*字符码表 */ ?uchard bu f810 ,10,10 , 10,1 0, 1 0 ,10,10 ;/*显示缓存 * /* 延时函数

6、*/voi dd e la y(u i n t z)u int x,y;?for (x= z;x0;xfor(y=1 10;y0;y- );/ * * * * * * * * * * * * * * * * * * * * * *键盘扫描程序 ?将按键转化为字符并作为输出 $ ' , ' #'分别表示清零键与没有键按下* /? uc h ar k* * * * * * * * * * *eyscan()uchar sk/*按键值标记变量*/* * * *扫描键盘第1行?* * * */按下e 0xd e0xf e ;?wh il e(P1 & 0xf0 )!=0

7、 xfO)/*有按键*/d elay( 3);/*去抖动延时X 7e : s kewhile ( (P1 0xf0 )!=0 Xf 0)/*仍有键按下/swisk eyy = ''tc h(P1)case='8 'c aseb re ae(P1/*识别按键并赋值*/0 X ee :skey = ' 7'breacak;0X be : sk ey='9b r eak ;?case 0k;?& 0xf0 ) != 0 Xf0) /*de f aul t :等待按键松开skey =''*/ * * * *扫描键盘第2行*

8、 * * * * /?0 xfd;w h ile (P1 &0 X fO)!=0xf0)(P1)?whilcase Odd :d elay( 3);e (P1 &0 xf 0 ) != Ox f0)?caseOxeds ke y=';4b re a k ;?ske y = ';5'b re ak;c a secasedeOxb d : s kOx 7f au 1d : skeyt:? * y = ' ;6' 'breskey =' 'rea kk;?wh i 1 e (P1* * *扫描键盘第 3行P 1 = 0

9、xfb;* * *w hile ( P1 OxfO )!=whi 1e (P1 & OX fO)0 xfO )! =0 xfO) ?* * * * *OxfO ) ?Oxf O)?delay( 3);s w i tch (P1)?cas e 0xeb : skey = '1 ; b re ak ;?c a se 0 x d b: ske2; b r eak ;0 X bb : ske y'3'ca s e 0x7b :eybreak;?Jdefault : skey #;'w h ile (P1& 0xf0)0xf 0 )?/* * *扫描键盘第

10、 4 行?* * * /?P1 =0xf7 ; ?whilef0)=0x f 0)?de la y(3);while (p1 &0xf0)!=0xf0wi tchp1 )se 0xd7 : sk eycase0xe7 :skey='$' ; break ;?ca= ' 0'brea kc ase 0 xb7 :sk e ybre a k;c a sedefa uwh i1e (0x77lt :P1sk eyske y0 X fO)!='; brea'?Ox fO) ?return skey;?vomain ()u intV aluel,

11、value2.value ;/*数值1,数值2,结果/har ckey, c ut1=0, c u t2 = 0;/*key 键盘输入字符*/ini t*/ ?u c har o p e r atoru char ibuf( O);di spva 1 ue =/运算符,boo 10; ?/got o语句定位标签*初始化*/();O;cut 1 = cut20;bool = O;f or (i = 0; i 9; i + )/*o per a n d 1:1 = 'O'?ope ra nd 2: i = ' 0'?初始化/?wh 1 le (1 )?ke y =

12、k eyscan ( );/*读取键盘 ?if ( ck e y= ') ?1sdigit函数,字符就是阿拉伯数字返回非0值,否则返回0*/i f ( 1 s d igit(ckey)swi t chbo ol)case0:operan d 1 cu t1 = ck e y; ?op er and1 c u t1 + 1 =;0'V alu e1=a to i (o p e rand 1);toi 函数,将字符串转化为, int 整数 /?cu+b uf(Va lue 1);r ea kc ase 1:?dis p ();?op eracut2 = cke y;?op er a

13、nd2 cut2 +1='0' ; ?value2 = a to i(o per a ndcu t2+ ;2);di sp();elseop erat o r =); ?buf(value2); ?b rea k ;?default : break ;?if (ckey = '+ '?ckey ;?u f ( 0 );db?d is p();el sdis/* 计算结束等待清零键按下ckey = k e ys c an (); ?果有清零键按下跳转到开始elseue ) ;I ckey = ' I I c k ey = ' * | ckey =

14、= ' /丫b o ol =1 ;0;e if (ckey ='=u f(val u*/?);?/?d ispv al ue = pu te(va 1 ue 1 ,va 1 ue2, oper a to);if(ckey =whil e (1)?'') 如go to in it; ?buf(v a1?else if(ckey ='$ )'?got o ini t ;di s p() ;? ? * * * * * * * * * * * * * * *? * * * * 运算函数 ?输入:操作数与操作符输出:计算结果* * * * * * * *

15、* * * * * * * * uint puteuint Va 1, uint va2, u ch a r opt or )?nt value;?s wi t ch (optor)1?cas e '+'V al u e=va1 +vab r eak ; ?ca sVa lue= va 1 va2;b r eak ;?cas e ' :* ' val uevava 2 ;bre ak ;ca s eV al u eV a1/va2;b reak ;d efault e ak ; ?return value; ?*/ * * * * * * * * * *更新显示

16、缓存输入 :无符号整数输出 :将输入送入显示缓存* * * * */VOid buf(n t V al)? ?chari;?if (va l0 ) ?dbu70;?6;*?else ?(i = 7; Val 0;i)fo* * * *uc had bufi* * *bsel = 0x0 1 ; = val 10 ; ?Va/=10;?i-)?d b uf i 0;?/* * * *bsel ,* * *n;for (n=0;n 8;n+)?P2= bse 1;P 0 = t able d b uf na y(3);P 0 = 0xff;* * * * * /?v Oi d disp(;?bse

17、l =显示函vO id )o1 _(bse 1, 1 ); ?课程设计体会接到这个课题以后,我先就是学习了 PROT町S软件得使用,按照题目所要求来进行分析设计,连接电路图,调试 ,最终完成计算器得仿真。接到题目后 , 我先就是分析了题目中所涉及到得知识以及器件,然后按照分析 , 到图书馆与互联网上搜索了相关得内容 , 按照自己得构想与图书资料得提示, 我初步设计了计算器得原理结构,然后进行反复验证实验 , 完善了设计,然后通过学习PROr EUS软件,让我很轻松得就掌握了如何在软件中建立原件 ,连线,并进行编程 ,调试,仿真等工作。软件得强大功能使得在连接电路图时很顺利 , 程序编译阶段 , 通过提示得错误,我也进行了修改 , 听取同学得建议,最终无错误,并对所设计得计算器电路进行了仿真. 最终顺利得实现了任务要求得所有功能,并且电路设计简单易读 ,构造巧妙 ,计算速度快。本次课程设计中, 另我最难忘得就是编程环节, 真得就是很难, 开始得时候感觉自己啥 也不会 , 然后决定重新学习课本,但就是编程不像课本习题那样简单得几行来实现简单得功 能,本次任务就是实现一个简易功能得计算器 , 虽然只有加减乘除四则运算

温馨提示

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

评论

0/150

提交评论