- 2
- 0
- 约1.37万字
- 约 17页
- 2018-04-28 发布于湖北
- 举报
基于单片机的计算器推荐
PAGE
“简易计算器”设计、调试报告
2010年6月
一、设计目标陈述
计算器是人们在日常生活中很常见的电子产品。本次是基于Keil uVision调试编译软件和单片机AT89C51来设计简易计算器,实现正常的键盘扫描、LED显示、任意两个4位整数的连续加、减、乘、除运算以及计算器复位等基本功能。
二、完成情况简述
本次设计的简易计算器完成了进行正常的键盘扫描,任意两个4位整数的输入和LED循环显示,连续的加、减、乘、除四则运算,结果的正常显示,以及计算器的复位等预期目标。此外,在设计中还解决了键盘的抖动、长久按键时间所引起的键盘扫描问题、LED显示的亮度等细节问题。
三、系统总体描述及系统框图
该设计系统是基于单片机AT89C51,其中 P1口作为输入端,外接4X4的键盘,P0口为LED段选信号输出端,P2口为LED位选信号输出端,通过键盘扫描来读取运算数和运算符,再通过单片机进行相应的运算,将输出结果用LED显示。
系统框图:
键盘输入
键盘输入
驱动电路
数码显示
AT89C51
四、各模块说明
1.键盘设计
4X4的键盘(16个开关),与AT89C51芯片P1口相连,高四位作为输入,低四位作为输出。低四位逐位变低分别对各列进行扫描,一旦有键按下,则对应输入口为低电平,否则输入为高电平,通过这样可以判断按下什么键。在键按下后,要有一定的延时,防止由于键盘的抖动而引起误操作。
2.控制中心用AT89C51来实现
AT89C51单片机参数如下:
Vcc正常的运行电压是5v的电源,Vss 为地端。I/O总线,P0口,P1口,P2口,P3口。AT89C51是MCS-51产品的兼容型,ROM、128字节ROM,32根I/O引线,每根都可以独立的使用。每个的端口包含一个8位的数据锁存和一个输入缓冲器。输出时,数据可以锁存;输入时,数据可以缓冲。作为一般的I/O口使用时,在指令的控制下,可以有三种基本的方式:输入输出和读—修改—写。在AT89C51用作输入端时,将首先向引脚写“1”而使内部MOS管截止以便引脚处于悬浮状态,从而可获得高阻抗输入。
3. 驱动电路部分是用三极管和电阻来实现。AT89C51的P0口用于数码管的段选,由NPN管和限流电阻来驱动;P2口用于数码管的位选,由PNP管来驱动。所用数码管为4个共阳LED,段选端为低电平有效,位选端为高电平有效。
4. 显示是用4个共阳的LED来完成。采用动态循环显示方式,全部数码管共用一套段选驱动电路,各位数码管的同段引脚短接后再接到对应段选的驱动线上。显示时通过位选信号采用扫描的方法逐位地循环点亮各位数码管。动态显示虽然在任一时刻只有一位数码管点亮,但是由于人眼具有的视觉残留效应,看起来与全部数码管持续点亮的效果完全一样。
五、调试流程
1.测试电源
调节直流电压源输出+5V电压,并用万用表检测无误后接入电路板。
2.LED测试
编写LED调试程序如下:
#include reg51.h
#include intrins.h
unsigned char code
showcode[]={0xB7,/*0*/0xA0,/*1*/0xD3,/*2*/0xF1,/*3*/0xE4,/*4*/0x75,/*5*/0x77,/*6*/0xA1,/*7*/0xF7/*8*/,0xF5/*9*/};
void main() // 单步调试
{
P0=0xB7;//显示0
P2=0xfe;
P2=0xfd;
P2=0xfb;
P2=0xf7;
P0=0xf7;//显示8
P2=0xfe;
P2=0xfd;
P2=0xfb;
P2=0xf7;
}
进行单步运行,LED逐位显示,显示结果正常。
3.整体调试
将主程序通过仿真器下载到电路板,检测键盘与LED的功能是否正常。
4.功能优化
根据硬件显示的结果进行程序优化,调节LED的亮度与显示的稳定性,以及提高键盘读取数据的正确性和灵敏度。
六、遇到的问题及解决方法
1.问题:上电后四个LED中第四位无法显示
解决方法:先用万用表的二极管档进行LED电路测试,发现该为LED的位选信号线虚接。重新焊接后显示正常。
2.问题:发现四位LED均显示8,改变输入码字后显示不变
解决方法:用万用表直接测试仿真器的P0口(码字输出端口),发现电平正常,但是接入电路后就显示错误。在老师的指导下,知道由于仿真器的内部结构与AT89C51的差异性和P0的特殊性,需要将外加电源接入仿真器的VCC端进行供电。进行修改后,LED能够根据输入码字的变化正常显示。
3.问题:LED的显示亮度不稳定,位数较长时显示不清晰(比较闪)
解决方法:修改LED显示程序,将原先的8位LED
原创力文档

文档评论(0)