整理数码管显示的简易计算器.docx
- 文档编号:25837499
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:28
- 大小:262.81KB
整理数码管显示的简易计算器.docx
《整理数码管显示的简易计算器.docx》由会员分享,可在线阅读,更多相关《整理数码管显示的简易计算器.docx(28页珍藏版)》请在冰豆网上搜索。
整理数码管显示的简易计算器
(完整)数码管显示的简易计算器
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)数码管显示的简易计算器)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)数码管显示的简易计算器的全部内容。
学号1307080113
天津城建大学
单片机原理及应用A课程设计
设计说明书
数码管显示的简易计算器设计
起止日期:
2016年1月4日至2016年1月8日
学生姓名
邬海斌
班级
13电信科1班
成绩
指导教师(签字)
计算机与信息工程学院
2016年1月8日
天津城建大学
课程设计任务书
2014—2015学年第1学期
计算机与信息工程学院电子信息工程专业班级13电信科1班学号1307080113
课程设计名称:
单片机原理及应用A课程设计
设计题目:
数码管显示的简易计算器设计
完成期限:
自2015年1月4日至2015年1月8日共1周
设计依据、要求及主要内容:
一.设计的目的
1。
进一步熟悉和掌握单片机系统设计和编程原理。
2。
掌握单片机的接口技术及相关外围芯片的外特性、控制方法.
3.通过设计,掌握以单片机核心的电路设计的基本方法和技术。
4.通过实际程序设计和调试,掌握模块化程序设计方法和调试技术.
5.通过完成一个包括电路设计和程序开发的完整过程,了解开发单片机应用系统的全过程,为今后从事相应开发打下基础。
二.设计的基本要求
1.认真认识设计的意义,掌握设计工作程序,学会使用工具书和技术参考资料,并培养科学的设计思想和良好的设计作风.
2.提高模型建立和设计能力,学会应用相关设计资料进行设计计算的方法.
3。
提高独立分析、解决问题的能力,逐步增强实际应用训练.
4。
设计的说明书要求简洁、通顺,电路图内容完整、清楚、规范.
三.设计主要内容
a)设计实现功能
STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片,设计由数码管和键盘电路组成的简易计算器。
一是扩展数码管显示电路;二是扩展按键电路,能够实现参数的输入;三是能够实现数据的加减乘除运算,并能显示运算的数据和运算结果;四是扩展时钟芯片DS12C887电路,用于不计算时的时间信息显示。
b)原理图设计
1。
原理图设计要符合项目的工作原理,连线要正确。
2。
图中所使用的元器件要合理选用,电阻、电容等器件的参数要正确标明。
3.原理图要完整,CPU、外围器件、外扩接口、输入/输出装置要一应俱全。
c)程序调计
1.根据要求,将总体功能分解成若干个子功能模块,每个功能模块完成一个特定的功能.
2。
根据总体要求及分解的功能模块,确定各功能模块之间的关系,设计出完整的程序流程图。
d)程序调试
1.编写相关程序,并进行仿真。
2。
将程序下载到单片机,进行运行调试。
e)设计说明书
1.原理图设计说明
简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。
2.程序设计说明
对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。
3.画出工作原理图,程序流程图并给出相应的程序清单。
四.设计进度安排
序号
日期
计划完成内容
1
1.4
确定设计方案,根据设计方案绘制的硬件原理电路.
2
1.5
编写软件程序流程.
3
1.6-1.7
根据设计方案编写软件程序,综合调试。
4
1。
8
编写课程设计报告,口试或答辩。
指导教师(签字):
批准日期:
20年月
第1章设计任务及要求
STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片,设计由数码管和键盘电路组成的简易计算器。
一是扩展数码管显示电路;二是扩展按键电路,能够实现参数的输入;三是能够实现数据的加减乘除运算,并能显示运算的数据和运算结果;四是扩展时钟芯片DS12C887电路,用于不计算时的时间信息显示。
通过键盘输入数据,进行相应的加减乘除运算,并在数码管显示相应的运算结果.
第2章设计原理
2.1设计原理
设计主要是利用AT89C51进行数据处理,利用4×4矩阵键盘的按键扫描,利用LED数码管的动态显示。
该设计首先是运用矩阵键盘的按键扫描,然后把扫描得到的键值进行译码,其次把译码所得的数值进行处理,最后将处理后的值进行动态显示。
矩阵键盘和数码管分别接在P1和P0,这样大大的节约了单片机的I/O端口。
图2—1设计原理图
2.2设计系统框图
数码管显示模块
时钟电路模块
键盘运算模块
电源模块
图2-2系统结构框图
第3章硬件电路设计
3。
1数码管硬件电路设计
数码管数据显示的硬件电路由单片机、4位共阳极数码管、位驱动电路、限流电阻等组成。
实验板中将跳线J7与J2(A8—A11脚)相连,即单片机P2.0-P2。
3.控制数码管4位位选.用跳线将J14与J15相连,P0口送出数码管段选码。
程序轮流选通各位,并送出段码信息,数码管从低位循环移位显示0-F的数据。
程序由P1口送出段码信息,最低位数码管循环显示0-9的数字.数码管共阳极段码表及数码管显示电路图如下:
表3-1共阳极数码管段码
显示字符共阳极段码共阴极段码
0C0H3FH
1F9H06H
2A4H5BH
3B0H4FH
499H66H
592H6DH
682H7DH
7F8H07H
880H7FH
990H6FH
图3—1数码显示电路
3.2矩阵键盘电路设计
4*4矩阵键盘行输入接单片机P1.0—P1.3,列输入接单片机P1。
4—P1。
7,通过扫描方式检测是否有键按下,并确定键值。
通过数码管显示价值。
设置跳线,连接J12与J11,P1口连接键盘行列,连接J14与J15,74LS573口送出数码管段码,连接J7至J2:
A8—A11脚(单片机P2.0-P2。
3),控制数码管位选。
键盘扫描程序的过程为:
开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。
图3-2键盘电路
3.3主要元件AT89S51
目前AT89S51多采用40个引脚的双列直插封装方式.40个引脚按其功能可分如下三类:
电源及时钟引脚—Vcc、Vss;XTAL1、XTAL2.
控制引脚-PSEN、ALE/PROG、EA/Vpp\RST(即RESET).
I/O口引脚—P0、P1、P2、P3,为4个8位I/O口的外部引脚.
主要引脚功能如下:
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流.当P1口的管脚第一次写1时,被定义为高阻输入.P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1"时,其管脚被内部上拉电阻拉高,且作为输入.并因此作为输入时,P2口的管脚被外部拉低,将输出电流.这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容.P2口在FLASH编程和校验时接收高八位地址信号和控制信号.
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
图3—3单片机
图3—4输出口扩展
第4章软件程序设计与调试
4.1程序流程图
按键译码
初始化后,程序开始进入主程序,1、进行按键判断,如果有键按下,继续往下执行,否则重新扫描;2、如果有键按下,延时5MS;3、再次按键判断,如果有键按下,继续往下执行,否则重新扫描;4、如果有键按下,确定按键位置;5、再次进行按键判断,如果有键按下,继续往下执行,否则,表示出错,重新扫面;6、如果有键按下,对按键译码;7、判断是否按键释放,如果释放,继续往下执行,否则等待;8、对送来的译码值进行数据处理;9、把处理的数据,放到LED数码管中动态显示。
详细程序源代码见附录I.
结束
数码管中显示
延时5Ms
初始化
开始
数据处理
N
Y
Y
N
确定按键位置
N
图4—1程序流程
4。
2调试结果
(1)键盘上按下123;键盘上按下运算键“+”后,按下7;
图4-2数码管显示“123”、“7”
(2)键盘上按下功能键“=”后,得出运算结果130;
图4-3数码管显示运算结果
(3)不运算时,数码管显示时间15:
12。
图4—4数码管显示时间
总结
很快一周多的时间又过去了,一个星期的课程设计对于我们初学者来说并不简单,毕竟我们对单片机这门课程花的时间很少,上课的时间和上机的时间仅仅那么多,所以我们对这门课程的知识只了解了一个大概。
对于这一个星期的成就我感到很欣慰,能够自己编出一个程序运用到实践当中。
刚开始我们都不知道如何动笔,看到那么多的课题,心中在暗暗的想,我们真的能做好一个吗,纠结了好久才把课题选好.选好课题后也不只从何处下手,我们只得到处查询资料和网上借鉴。
我们都知道这个课程设计的关键是流程图和程序的编写.我们不急不忙的看了很多相似的程序和流程图,和向老师的请教才将流程图给画出个大概来,当然万事开头难吗,第一步做好了以后.我们就得开始编写程序了,这是最关键的了,首先我们认真的看了书本上的相似程序,将这个程序看懂了解透。
我们才开始着手编写程序,当然在编写程序的这个过程是最复杂最麻烦了。
老是出现各种各样的问题,这就需要我们能静下心了,同样我们也得考验同学之间团结合作能力了。
自己编的程序自己往往很难发现错误,我们便便请教班上的高手解答。
实在不懂得就求助老师了。
在各种方法使尽后,程序终于出来了,一个程序的编写就花了我们课程设计的一大半的时间。
此后说明书的书写也是项不小的工程,要将所有的东西集合起来还真的不简单.老是发现缺这缺那的。
一个人书写后还得要几个人的审查才敢最终确定.
当然经过这次课程设计我们学会了很多,对单片机这门课程有了更好的了解,这也是一次理论知识运用到实践当中的考验,同时也为我们以后的毕业设计提供了参考.最后非常感谢老师和同学们的帮助.
参考文献
[1]张毅刚,彭喜元等。
单片机原理及应用[M].北京:
高等出版社,2010。
[2]彭伟.单片机C语言程序设计实训100例[M].北京:
高等出版社,2009.
[3]徐爱均,徐阳等.单片机原理与应用[M].机械工业出版社,2013.
附录I:
主要程序
#include”reg51。
h”
#include"absacc.h"
#include〈string。
h>
typedefunsignedcharBYTE;
typedefunsignedintWORD;
#defineled_dateXBYTE[0x6000]///*LED口地址*/
BYTEled_dm[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
voidLED_crt(BYTEval);///**led显示位置**/
voidDelay(WORDn);
voidcrt_num();
BYTEled_w,di;
WORDnum,a,b,c,d;//定义存储变量
WORDnum1;
WORDnum2,count,flage,Hourh,Hourl,Secondh,Secondl,Minuteh,Minutel;
bitfuhao;
BYTEyunsuan;
bitflag;
bitbiaozhi;
#defineDS_AXBYTE[0x100A]//寄存器A/*DS12887口地址*/
#defineDS_BXBYTE[0x100B]//寄存器B
#defineDS_CXBYTE[0x100C]//寄存器C
#defineYearsXBYTE[0x1009]//年
#defineMonthXBYTE[0x1008]//月
#defineDayXBYTE[0x1007]//日
#defineWeekXBYTE[0x1006]//星期
#defineHourXBYTE[0x1004]//时
#defineMinuteXBYTE[0x1002]//分
#defineSecondXBYTE[0x1000]//秒
voidDS_init()/************DS12887初始化程序**********************/
{
DS_A=0x20;
DS_B=0x12;
}
voidwrite_time()
{
DS_A=0x2f;//寄存器A
DS_B|=0x80;
Years=0x16;//年
Month=0x01;//月
Day=0x03;//日
Week=0x07;//星期
Hour=0x15;//时
Minute=0x12;//分
Second=0x00;//秒
DS_B&=0x7f;//寄存器A
}
voidDelay(WORDn)//延时500US
{
WORDx;
while(n-—)
{
x=500;
while(x-—);
}
}
voidcrt_num()//转换运算数据
{
Hourh=Hour/16;
Hourl=(Hour%16)+10;
Secondh=Second/16;
Secondl=Second%16;//+10;
Minuteh=Minute/16;
Minutel=Minute%16;
a=num/1000;
b=num/100%10;
c=num/10%10;
d=num%10;
if(flage==1)
{
for(count=0;count〈4;count++)
{if(di==0x09)
LED_crt(a);
elseif(di==0x08)
LED_crt(b);
elseif(di==0x07)
LED_crt(c);
elseif(di==0x06)
LED_crt(d);
di—-;
if(di==0x05)
{
di=0x09;
}
Delay
(1);
}
}
if(flage==0)
{
for(count=0;count〈4;count++)
{if(di==0x09)
LED_crt(Hourh);
elseif(di==0x08)
LED_crt(Hourl);
elseif(di==0x07)
LED_crt(Minuteh);
elseif(di==0x06)
LED_crt(Minutel);
di——;
if(di==0x05)
{
di=0x09;
}
Delay
(1);
}
}
}
unsignedcharkeypad_scan()//矩阵键盘扫描/*****行列式扫描键盘****/
{
unsignedchartemp;
unsignedcharkey=0xff;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
Delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xee:
key=7;break;
case0xde:
key=4;break;
case0xbe:
key=1;break;
case0x7e:
key=15;break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
Delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xed:
key=8;break;
case0xdd:
key=5;break;
case0xbd:
key=2;break;
case0x7d:
key=0;break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
Delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xeb:
key=9;break;
case0xdb:
key=6;break;
case0xbb:
key=3;break;
case0x7b:
key=’=’;break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
Delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xe7:
key=10;break;
case0xd7:
key=11;break;
case0xb7:
key=12;break;
case0x77:
key=13;break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
returnkey;
}
voidLED_crt(BYTEval)/*LED显示位置*/
{
led_date=led_dm[val];
P2|=0xff;
P2&=led_w;
led_w〉〉=1;
if(led_w==0x0f)
led_w=0xf7;
}
voidmain()
{
BYTEkey=0;//此次扫描的按键信息
di=0x09;
led_w=0xf7;
DS_init();
write_time();
flage=0;
while
(1)
{
key=keypad_scan();
if(key!
=0xff)//扫描键盘
{
flage=1;
if((key==13)|(key==12)|(key==11)|(key==10))
{
yunsuan=key;
fuhao=1;
}
if(key=='=’)
{
if(yunsuan==13)//定义+
{
num=num1+num2;
}
if(yunsuan==12)//定义—
{
num=num1—num2;
}
if(yunsuan==11)//定义*
{
num=num1*num2;
}
if(yunsuan==10)//定义/
{
num=(num1)/num2;
}
biaozhi=1;
}
if(key==15)
flage=0;
if(key<=9)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 数码管 显示 简易 计算器