单片机程序设计与综合实验报告.docx
《单片机程序设计与综合实验报告.docx》由会员分享,可在线阅读,更多相关《单片机程序设计与综合实验报告.docx(13页珍藏版)》请在冰点文库上搜索。
单片机程序设计与综合实验报告
单片机程序设计与综合实验
一、设计目的…………………………………………………………2
二、硬件电路设计…………………………………………………3
1、主原理图…………………………………………………………3
2、AT89C52引脚级共能说明………………………………………3
3、74LS138引脚图级功能说明……………………………………4
4、74HC573引脚图级功能说明……………………………………4
5、矩阵是键盘电路及功能说明……………………………………5
6、数码管功能说明…………………………………………………5
三、流程图……………………………………………………………7
1、主流程图…………………………………………………………7
2、判断所按键值流程图……………………………………………7
3、动态显示子程序…………………………………………………8
4、判断有无键按下……………………………………………………8
四、程序设计…………………………………………………………8
五、心得体会…………………………………………………………13
单片机课程设计报告一、设计题目:
简易计算器的设计
设计要求:
(1)设计实现两位小于100的整数加、减运算;
(2)键盘采用4*4的矩阵键盘,键盘安排如下;
1234
5678
90+-
=
(3)输入数据及运算结果采用三位数码管进行显示;
设计目的:
(1)掌握数码管一位动态扫描的编程方法;
(2)掌握矩阵扫描的编程方法;
(3)掌握简单数据运算的编程方法
二、硬件电路的设计
1、原理电路图:
图1
功能说明:
(1)如图1,AT89C52单片机的P0.0–P0.7
接74HC573的输入端,数码管的相同字段接在一起,并分别接在74HC573的输出端(PA0-–PA7)。
跳线CON3接Vcc,使74HC573处于透明状态(即不锁存),这样由单片机传送的数据即可通过573送到数码管,并显示。
另外,573也可提高驱动能力。
(2)74HC138的输入端A、B、C分别接单片机的P2.0--P2.2,
其输出~Y0--~Y7接入数码管的选通信号,这样,通过对P2口
不同的赋值,即可选择不同的数码管进行显示。
(3)键盘处的跳线CON3选通J1和J3,使用4*4的矩阵键盘。
其中P3.0–P3.3为行线,P3.4–P3.7为列线。
2、各芯片引脚及功能:
I、AT89C52
图2AT89C52引脚
各引脚功能:
(1)Vcc:
电源线,接+5v电源
GND:
接地线
(2)时钟引脚
XTAL1:
内部振荡电路的反相放大电路的输入端。
XTAL2:
内部振荡电路的反相放大电路的输出端。
(3)RET:
复位电路
(4)ALE/PROG:
地址锁存允许信号/编程脉冲输入端
(5)PSEN:
外部程序存储器读选通输入端,低电平有效。
(6)EA/VPP:
内部ROM和外部ROM选择端/编程电压输入端。
(7)三十二位的I/O口,p0~p4
II、74HC138
图374HC138引脚图
(1)、各管脚功能说明
(1)A,B,C为信号的输入端,分别由P2.0,P2.1,P2.2控制,其输出端Y0,Y1,Y2分别接数码管的选通端,输入信号与选通数码管有如下关系:
输入
输出
数码管选通情况
ABC
Y5Y6Y7
111
110
第一个
110
101
第二个
101
011
第三个
(2)EN1使能端高电平有效;EN2A和EN2B使能端均为低电平有效
74HC573
1、引脚图
2、
3、在本次设计中,要使573的使能端为低电平,这样所要显示的数据即可通过74HC573传送到数码管显示。
四、矩阵式键盘
1、电路图
2、功能说明
如图,将开发板上的矩阵出的跳线接J11即可构成4*4矩阵式键盘,其行线分别接到P3.0~P3.3,列分别接P3.4~P3.7。
单片机执行程序时,对键盘进行逐行逐列(逐列逐行)进行查询是否有键按下,并判断所按下的是那个键
3、此次设计中键盘的键值如下:
1234
5678
90+-
清零=
数码管
实验中所用数码管为共阴极数码管。
其输入端a,b,c,d,e,f,g,dp分别接573的输出端PA0到PA7。
当单片机通过P0口将数据传送到74HC573时,选通相应的数码管即可在数码管上显示相应数据。
七段数码显示内部段的排列
三、软件程序设计
I、设计需求:
Keil软件、ISP编程器
II、设计效果:
(1)单片机上电,打开开关,数码管最低位显示0,高两位处于灭的状态。
(2)按下数字键(不多于3位),原理图最左端三位数码管显示键值。
例如依次按下1—2—3,则数码管显示123,按下1—2,则数码管最低两位显示12,高一位处于灭的状态。
(3)每次按键数码管显示为灭,待键释放,显示预期结果,用以提示功能键没有虚按。
(4)实现低于两位数相加、相减并显示运算结果。
例如1+2=3。
(5)实现连加、连减功能。
例如按键12+12+12+,则数码管显示36。
(6)清零功能,按下此键,键盘回到初始状态。
III、设计思路:
(1)将要显示的数值存放在78H、79H、7AH三个单元中,
用DIR作为显示子程序,显示这三个单元的内容。
则每按一次数据键,就将这三个单元中的数据更新。
为显示两位数或三位数,这里纪录键盘连续按数字键的次数,根据次数将78H、79H、7AH单元内容改为对应值,调用动态显示程序,并将本次连续的数字转换为整数保存用以后来的计算。
初始给78H、79H、7AH赋零、灭、灭所对应的TAB表偏移量。
显示子程序
(2)动态显示连续按下的数字键,则每次给数码管送要现实的码值,再开对应的数码管公共端,延时1ms再送另一数据,开对应数码管公共端,将78H、79H、7AH三个单元内容循环显示。
直到下一次按键的到来。
(3)每次按键单片机执行判断按键位置,并等待按键释放才执行下一步,故上一步的动态显示结束,会出现每次按键数码管显示为灭,待键释放,显示预期结果的功能。
(4)首先将第一个数放在R4里,按+的时候,保持功能键,将第一个数放在40H单元里,再将第二个数放在R4,按=号时,判断出功能键+,再将R4与40H单元相加后保存到40H,再显示
(5)连加功能:
首先将第一个数放在R4里,按+的时候,保存功能键,将第一个数放在40H单元里,再将第二个数放在R4,按第二个+时,判断出第一个功能键+,将R4与40H相加后,保存到40H里,再显示。
第三个数放在R4里,当第三个+时,能判断出第二个功能键+,将R4与40H相加后,保存到40H里,再显示
(6)按下清零键,程序跳到开始,实现清零。
三、流程图
图1主流程图
说明:
4、判断当前按下的键码KEY子程序
动态显示功能说明:
R3存放循环次数,打开显示相应位的数码管,将相应位的数字代码送入显示,延时后,判断循环次数,再循环或结束子返回。
KEY子程序说明:
调用子程序判断有无键按下,若无,延时去抖动,显示上一个数。
若有键按下,判断是哪个键按下,再延时判断有无键按下,若有将键码保存在累加器A中,子程序结束返回,若无,再循环。
3.显示子程序:
5、有无键按下KS子程序:
KS子程序说明:
将F0赋值给P3,在将P3的值读给A,将A与F0异或,若有键按下,A=1,否则,A=0,结束返回。
五、心得体会
课程设计,最大的感受就是——编程不容易呀!
更羞愧的是我们设计的是市场上很普片的很廉价的计算器,我们花了好长的时间去思考查资料和讨论。
可想而知,我们现在所学的是多么浅。
通过这次做课程设计发现自己的看法有点太片面,逻辑不清晰。
使我明白了自己原来知识还很欠缺,自己要学习的东西还太多了;也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识。
因为知识必以我认为只有到真正会用的时候才是真的学会了。
但是由于我们这种实践机会太少了,所以可能加大了这次课程设计的难度。
这次课程设计让我们对课本的知识比如指令和各子程序更加理解和熟悉,还有单片机STC89C52RC、硬件电路、138译码器、573锁存器、数码管等有更多的了解。
更重要的是意识到程序设计思想逻辑的重要性,比如说在我们一开始写的一位加减计算程序上能否扩展到二位加减程序。
因为由于时间的紧缺和许多课业的繁忙,并没有做到最好,但是,最起码我们没有放弃,它是我们的骄傲!
相信以后我们会以更加积极地态度对待我们的学习、对待我们的生活。
我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。
只有不断的测试自己,挑战自己,才能拥有更多的成功和快乐!
认真对待每一个实验,珍惜每一分一秒,学到最多的知识和方法,锻炼自己的能力,激发了我们学习的热诚。
希望学校加对这门课的重视程度,多多举办这种课程或比赛,实现理论与实践相结合的教育理念。
最后我们真诚感谢课程设计指导老师王陈宁和单片机郭玉老师对我们的热情指导和谆谆教导!