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

下载本文档

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

文档简介

1、引言说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好

2、的基础,成为现代社会应用广泛的计算工具。近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强。在单片机家族中,80c51系列是其中的佼佼者,加之int

3、el公司将其mcs 51系列中的80c51内核使用权以专利互换或出售形式转让给全世界许多著名ic制造厂商,如philips、 nec、atmel、amd、华邦等,这些公司都在保持与80c51单片机兼容的基础上改善了80c51的许多特性。这样,80c51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80c51系列。80c51单片机已成为单片机发展的主流。专家认为,虽然世界上的mcu品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80c51可能最终形成事实上的标准mcu芯片。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。

4、手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过pc机和其他计算的总和,甚至比人类的数量还要多。单片机内部也用和电脑功能类似的模块,比如cpu,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可.用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、vcd等等的家电里面都可以看到它的身影!.

5、它主要是作为控制部分的核心部件。设计方案及原理 1.首先赋予显示缓冲初始值00 00,并把数据存储单元清零。2.主程序调用键盘扫描子程序,判断键值,是数字第一次直接赋予23h单元,如是第二次输入数字,则把第一次值乘十后与第二次值相加,结果存储到23h单元,并r4计数2次,表示已输入两位,扫描键值时就不在赋值和显示。等待运算符号的按下,按下等于号就直接与零计算并显示,如加减乘除就r5加一 并把r4清零,表示可以输入下一操作数,与第一次相同,并等待等于键按下。清零键则不管在任何情况下都清零,相当与软复位。3.在扫描完键盘后,调用数据显示转换子程序,并选择,由于本任务是两位四则运算,只有乘法中结果会

6、超出ffh的范围,在此就是选择处理方式,超出范围则跳过数据显示转换子程序,未超出则调用数据显示转换子程序,两种选择都是要把值转换为七段码。4.调用数码管动态显示子程序,显示数值,重新循环。硬件系统设计1、led接口电路简易计算器需要2位8段码led显示电路。用8031单片机经8255a扩展2位8段码led显示器,用8255a的a口作为段码(字形代码)数据口,pb0和pb1作为位控制端口。在位控制口加集电极开路的反相高压驱动器74ls06以提供驱动led显示器所需的足够大的电流,然后接至各数码显示器的共阴极端。同理,在段码数据口集电极开路的正相高压驱动器74ls07提供足够大的电流,然后接到数码

7、显示器的各段。逻辑电路结构如下: 2、键盘接口电路简易计算器需要4*4的行列式键盘。用8031单片机经8255a扩展4*4行列式键盘,8255a的b口和c口用于扩展键盘接口,b口高4位作为输出口,c口低4位作为输入口。逻辑电路结构如下:3、计算器逻辑电路图将led接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图,如下:三、软件设计1、led显示程序设计led显示器由七段发光二极管组成,排列成8字形状,因此也成为七段led显示器,器排列形状如下图所示:为了显示数字或符号,要为led显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一

8、个字节。简易计算器用到的数字09的共阴极字形代码如下表:09七段数码管共阴级字形代码显示字型gfedcba段码001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fh2位led显示的程序框图如下:2、读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如下:3、主程序设计 (1)数值送显示缓冲程序设计简易计算器所显示的

9、数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,若为0则返回,若不为0,则将商除以10,将余数送显高位。程序框图如下: (2)运算主程序设计 首先初始化参数,送led低位显示“0”,高位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是功能键(“+”“-”“*”“/”“=” ),是数值键则送led显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送led显示,若是运算键则保存相对运算程序的首地址。运算主程序框图如下所示:4、简易计算器

10、源程序outbit equ 07ffdh ; 位控制口outseg equ 07ffch ; 段控制口in equ 07ffeh ; 键盘读入口data1 equ 70hdata2 equ 71hdizhi1 equ 72hdizhi2 equ 73hledbuf equ 60h ; 显示缓冲 ljmp startledmap: ; 八段管显示码 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hdelay: ; 延时子程序 mov r7, #0delayloop: djnz r

11、7, delayloop djnz r6, delayloop retdisplayled: mov r0, #ledbuf mov r1, #2 ; 共2个八段管 mov r2, #00000010b ; 从左边开始显示loop: mov dptr, #outbit mov a, #0 movx dptr, a ; 关所有八段管 mov a, r0 mov dptr, #outseg movx dptr, a mov dptr, #outbit mov a, r2 movx dptr, a ; 显示一位八段管 mov r6, #1 call delay mov a, r2 ; 显示下一位 r

12、r a mov r2, a inc r0 djnz r1, loop rettestkey: mov dptr, #outbit mov a, #0 movx dptr, a ; 输出线置为0 mov dptr, #in movx a, dptr ; 读入键状态 cpl a anl a, #0fh ; 高四位不用 retkeytable: ; 键码定义 db 0dh, 0ch, 0bh, 0ah db 0eh, 03h, 06h, 09h db 0fh, 02h, 05h, 08h db 00h, 01h, 04h, 07hgetkey: mov dptr, #outbit mov p2, d

13、ph mov r0, #low(in) mov r1, #00100000b mov r2, #4kloop: mov a, r1 ; 找出键所在列 cpl a movx dptr, a cpl a rr a mov r1, a ; 下一列 movx a, r0 cpl a anl a, #0fh jnz goon1 ; 该列有键入 djnz r2, kloop mov r2, #0ffh ; 没有键按下, 返回 0ffh sjmp exitgoon1: mov r1, a ; 键值 = 列 x 4 + 行 mov a, r2 dec a rl a rl a mov r2, a ; r2 =

14、(r2-1)*4 mov a, r1 ; r1中为读入的行值 mov r1, #4loopc: rrc a ; 移位找出所在行 jc exit inc r2 ; r2 = r2+ 行值 djnz r1, loopcexit: mov a, r2 ; 取出键码 mov dptr, #keytable movc a, a+dptr mov r2, awaitrelease: mov dptr, #outbit ; 等键释放 clr a movx dptr, a mov r6, #10 call delay call testkey jnz waitrelease mov a, r2 retstar

15、t: mov sp, #40h mov ledbuf+0, #0 mov ledbuf+1, #03fh mov dptr, #7fffh mov a, #89h movx dptr, amloop: call displayled ; 显示 call testkey ; 有键入? jz mloop ; 无键入, 继续显示 call getkey ; 读入键码jisuan: mov r3, a cjne r3, #0fh, qita ;判断是否为清零键? mov r3, #00h ;清零 mov r4, #00h mov r5, #00h mov data1, #00h mov data2,

16、#00h mov dizhi1, #00h mov dizhi2, #00h mov ledbuf+0, #0 mov ledbuf+1, #03fh ljmp mloopqita: clr c cjne r3, #0ah ,follow ;判断是数字键还是功能键?follow: jc shuzi ljmp gnshuzi: mov a, r4 ;判断是否已有运算符输入,没有就将数值存在jnz shuzi2 data1,有就将数值存在data2 mov a, r3 mov data1, a ljmp xs ;显示第一次输入的数值shuzi2: mov a, r3 mov data2, a lj

17、mp xs ;显示第二次输入的数值gn: mov r4, #01h ;将01h给r4,说明已有运算符输入 cjne r3, #0eh, ja ;判断键值是否为“=”? mov r4, #00h ;将r4清零 mov a, dizhi1 ;执行“=” mov dph, a mov a, dizhi2 mov dpl, a mov a, #00h jmp a+dptr ;转到本次输入的算法程序ja: cjne r3, #0ah, jn ;若键值为“+”则将“+”的程序首地址存在mov dptr, #jia dizhi1和dizhi2中 mov a, dph mov dizhi1, a mov a,

18、 dpl mov dizhi2, a ljmp mloop jn: cjne r3, #0bh, ce ;若键值为“-”则将“-”的程序首地址存mov dptr, #jian dizhi1和dizhi2中 mov a, dph mov dizhi1, a mov a, dpl mov dizhi2, a ljmp mloop ce: cjne r3, #0ch, cu ;若键值为“*”则将“*”的程序首地址存在mov dptr, #cheng dizhi1和dizhi2中 mov a, dph mov dizhi1, a mov a, dpl mov dizhi2, a ljmp mloop

19、cu: cjne r3, #0dh, zhuan ;若键值为“/”则将“/”的程序首地址存在mov dptr, #chu dizhi1和dizhi2中 mov a, dph mov dizhi1, a mov a, dpl mov dizhi2, azhuan: ljmp mloop jia: mov a, data1 ;加法程序 add a, data2 ljmp xsjian: mov a, data1 ;减法程序 subb a, data2 ljmp xscheng: mov a, data1 ;乘法程序 mov b, data2 mul ab ljmp xschu: mov a, da

20、ta1 ;除法程序 mov b, data2 div abxs: mov b, #10 ;显示个位数字 div ab mov r5, a mov a, b mov dptr,#ledmap movc a, a+dptr mov ledbuf+1,a mov a, r5first: cjne a,#0,next ljmp mloop ;运算完后继续扫描键盘next: mov b,#10 ;显示十位数字 div ab mov r5, a mov a, b mov dptr, #ledmap movc a, a+dptr mov ledbuf+0, a mov a, r5 ljmp first end硬件连线图 总结 课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,

温馨提示

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

评论

0/150

提交评论