单片机计算器课程设计.docx
- 文档编号:27755206
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:17
- 大小:3.71MB
单片机计算器课程设计.docx
《单片机计算器课程设计.docx》由会员分享,可在线阅读,更多相关《单片机计算器课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
单片机计算器课程设计
《单片机应用》
课程设计报告
题目:
简易计算器的设计
院(系):
信息科学与技术
专业班级:
2012年6月11日至2012年6月15日
一、设计(调查报告/论文)题目
简易计算器的设计
二、设计(调查报告/论文)主要内容
通过对计算器的安装调试,需学习掌握完成:
(1)单片机系统的整体设计流程。
(2)单片机系统的硬件、软件调试方法及相关工具的使用。
(3)理解电路原理图与工作过程。
(4)各种常见元器件的选择及使用。
三、原始资料
(1)计算器电路原理图及元器件清单
(2)制作套装
四、要求的设计(调查/论文)成果
用80C51/52单片机小系统编程制作的简易计算器,要求:
(1)要有4位LED显示器。
(2)要有0—9个数字输入按键,和功能按键分别是“+”,“-”,“*”,“/”,“=”“CLR”,“RET”。
即“加法”,“减法”,“乘法”,“除法”,“等于”,“清除”,“修改”
(3)显示过程:
实验板通电开机后,第一位LED显示器显示“0”,按下相应数字,在按运算键“+、-、*、/”后,再按第一组数字,继续按下“=”即可显示整数运算结果。
按“清除键”,清除当前LED显示器上的全部数字,按“修改键”,清除当前LED显示器上右边的一个数字。
(4)能够正确安装和焊接硬件电路板。
拿到元器件后,用万用表对电子元器件进行参数测量、检查。
焊接时,要焊点饱满、光洁,无虚焊、漏焊、错焊。
(5)熟悉单片机系统的工作原理及调测方法。
软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课程设计报告,格式符合学校规范标准,字数不少于2000字。
五、进程安排
第一天:
讲解课题,选择课题,分发元器件,焊接、调试硬件;
第二天到第四天:
编写、调试程序;
第五天:
系统验收、评分,交课设报告。
六、主要参考资料
[1]陈青.单片机应用课程设计指导书.武汉:
华中科技大学武昌分校.
[2]姜志海.单片机原理及应用.北京:
电子工业出版社,2007.
[3]康华光.电子技术基础模拟部分,北京:
高等教育出版社,2003.
指导教师(签名):
20年月日
课程设计报告撰写内容、格式与成绩评定
一、课程设计报告的撰写内容与要求
1.课程设计总结报告应包括:
前言、基本原理或理论、设计计算书或实验报告、结论、图纸(框图、流程图)、参考资料等;或调查、访谈报告、调查问卷、调查提纲等。
2.课程设计总结报告应书写工整,文句通顺、精炼、逻辑性强,图纸和曲线的绘制应符合规范。
3.调查型课程设计应根据调查结果撰写调查报告。
调查报告内容包括:
题目、参加时间、地点、方式、过程、调查对象一般情况、调查内容、发现的问题、调查结果和调查分析及体会等。
调查报告要求语言简练、准确;叙述清楚、明白;数据、资料可靠;结论有理、有据。
4.图纸应布局合理,比例恰当,线条分明,字体工整,符合国家制图标准。
5.课程设计报告字数要求:
理工、艺术类不少于2000字,其他专业不少于3000字。
二、课程设计成绩评定
1.学生的课程设计成绩由平时成绩、业务考核成绩两部分组成,均为百分制记分,其中平时成绩占总成绩的30%,业务考核成绩占70%。
业务考核含设计报告(计算说明书、调查提纲、调查问卷等)、绘制的图纸、编制的软件、制作的模型、撰写的论文或问卷统计、调查分析等的完成及质量情况;平时成绩含设计表现、到课率等。
2.教师按学生实际成绩(百分制,含平时成绩和业务考核成绩两部分)登记并录入教务MIS系统,由系统自动转化为“优秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分)和不及格(60分以下)”五等。
目录
1.课程设计的目的2
2.课程设计题目描述和要求2
3.课程设计报告内容2
3.1课题设计方案及基本原理3
3.2软件设计3
3.3调试3
4.总结3
参考资料3
附录1电路原理图5
附录2硬件实物图6
附录3源程序清单6
1课程设计的目的
通过对简易计算器的安装调试,需学习掌握:
(1)单片机系统的整体设计流程。
(2)单片机系统的硬件、软件调试方法及相关工具的使用。
(3)Protel绘制电路原理图的方法。
(4)各种常见元器件的选择及使用。
2课程设计题目描述和要求
题目描述:
简易计算器的设计
制作要求:
用80C51/52单片机小系统编程制作的简易计算器。
(1)要有4位LED显示器。
(2)要有0—9个数字输入按键,和功能按键分别是“+”,“-”,“*”,“/”,“=”“CLR”,“RET”。
即“加法”,“减法”,“乘法”,“除法”,“等于”,“清除”,“修改”
(3)显示过程:
实验板通电开机后,第一位LED显示器显示“0”,按下相应数字,在按运算键“+、-、*、/”后,再按第一组数字,继续按下“=”即可显示整数运算结果。
按“清除键”,清除当前LED显示器上的全部数字,按“修改键”,清除当前LED显示器上右边的一个数字。
(4)能够正确安装和焊接硬件电路板。
拿到元器件后,用万用表对电子元器件进行参数测量、检查。
焊接时,要焊点饱满、光洁,无虚焊、漏焊、错焊。
(5)熟悉单片机系统的工作原理及调测方法。
软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课设报告。
3课程设计报告内容
3.1课题设计方案及基本原理
方案:
按照系统设计的功能的要求,初步确定设计系统由主控模块、显示模块、错误报警模块、键扫描接口电路共四个模块组成,电路系统构成框图如图1.1所示。
主控芯片使用51系列AT89C52单片机,采用高性能的静态80C51设计,由先进工艺制造,并带有非易失性Flash程序存储器。
它是一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。
由于单片机是可编程芯片,并且它可以运用C语言编写,对于一些复杂的计算功能,可以调用C语言库函数。
使编写程序变得非常简单。
数码管点亮原理:
显示模块采用4枚二位一体共阴极数码管和译码芯片4511和4028,反向驱动芯片2003。
4511辅助单片机对数码管进行段选,单片机的p1口的低四位用来控制4511作段选。
4028四十译码器辅助单片机对数码管进行位选,单片机的p1口的高四位用来控制4028的输入端作位选。
实验中采用的数码管是共阴极的,位选低电平表示选中,电路图中有反向驱动芯片接在数码管与4028之间,故4028输出的高电平的引脚即为被点亮的数码管。
通过给p1口赋值,位选段选结合起来便可以实现数码管的各种点亮方式。
按键检测原理:
通过p2口和p0口与按键地相连,即16个按键分别由16个端口控制。
由于按键没按下时为高电平,当有按键按下时为低电平,通过检测p2,p0口的数值便可以判断出哪个按键被按下了。
3.2软件设计
3.3调试
在焊接好器件后,先不要将芯片插在芯片座上,要先验证先板上电源是否好用,有无短路等。
接上USB电源,用万用表测量个芯片座对应电源和地之间的电压值,观察电压值是否正常。
一切正常后方可将芯片插入芯片座,以继续测试其他功能。
将芯片插上后,对各个模块进行调试,按键是否工作正常,数码管是否显示正常等。
编写相关部分的测试程序对其进行测试。
各部分硬件检测无误后,下载程序进行整体调试,一切正常后,结束调试过程。
在此过程中我的显示出现问题,分析原因后发现原来是在一维数组定义值是顺序刚好颠倒了,改正后,从新烧录程序,一切正常,可以连着运算,达到了课程设计的要求。
4总结
从大二开始进入电子爱好者协会,便开始接触有关单片机的知识,是通过汇编语言来编程,那是接触起来真的是好难,然后通过学习微机原理,尤其是这学期的单片机让自己对汇编语言有了更深一步的了解,以及对单片机的外围设施有了更深入的认识,然后由于要参加电子竞赛,慢慢的开始用C编程。
通过这些学习才让我很快的完成了这次实验报告。
这次的课程设计是设计简易的计算器,编程时确实遇到了不少的问题,首先你要有很好的逻辑思维能力,必须考虑到各种变量,在编程中通过设置标志位起到很大的作用,可以说标志位在C编程中很重要。
另外在显示子程序中,由于
电路中是用译码器作为段选的,所以显示程序必须根据电路来设计,先把段选送到P1口的低四位,然后再把位选送到P1口的高四位,然后通过P1口来控制显示,而在这里面就有一个问题,即如何将两个变量的高四位和低四位合在一起然后送P1口,最后我用的方法是设置几个一维数组,然后通过逻辑运算与,合成八位送至P1口,当然要特别注意数组里的数值顺序,因为很可能导致显示的数码管位置错误,我就出现了这种错误。
然后要特别注意对数值的定义,因为Unsignedint的数值范围为0~65535,而unsignedlongint的数值范围为0~4294967295,而我们的数码管是八位的,显然是定义unsignedlongint。
当然在键盘扫描子程序中要特别注意防抖动,这主要通过延时再判断,对延时也有很高的要求,不能太短也不能太长。
时间长了会导致按键反应太慢,而太短就起不到防抖的作用。
参考文献
[1]姜志海.单片机原理及应用.北京:
电子工业出版社,2007.
[2]康华光.电子技术基础模拟部分,北京:
高等教育出版社,2003.
[3]陈青.单片机应用课程设计指导书.武汉:
华中科技大学武昌分校.
[4]谭浩强《C程序设计》清华大学出版社
[5]郭天祥《51单片机C语言教程》电子工业出版社
附录1电路原理图
附录2硬件实物图
附录3源程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
#definekey0P0
#definekey2P2//键盘接口定义
unsignedlongintshu1,shu2;//进行运算的两个变量数
ucharnum;//键盘扫描返回值
charflag_shu,flag_fuhao,fuhao,newkey,update;//newkey新按键标志,fuhao运算符,update表示等于号之后紧接着输入的是数的话则清零shu1
charkey_shu;//按键值
unsignedcharcodeWela[]={0x70,0x60,0x50,0x40,0x30,0x20,0x10,0x00};
unsignedcharcodeDuan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
ucharkeyscan();//键盘扫描函数
voiddisplay(unsignedlongint);//数码管显示函数
voiddelay(uinti)//延时函数
{
while(i--);
}
/***********************************************
主函数
************************************************/
voidmain()
{
while
(1)
{
if(keyscan()==15)//开机检测
{
shu1=shu2=fuhao=flag_shu=newkey=0;//初始化变量
while
(1)
{if(!
flag_fuhao)
display(shu1);
elsedisplay(shu2);
key_shu=keyscan();
if(newkey==1)//有新键值
{if(key_shu==15)//按下ON/C键,清零
{flag_fuhao=0;update=0;
shu1=shu2=fuhao=flag_shu=newkey=0;
}
elseif(key_shu==14&&flag_shu==1&&fuhao)//按下"="
{switch(fuhao)
{
case10:
shu1=shu2+shu1;break;
case11:
shu1=shu2-shu1;break;
case12:
shu1=shu2*shu1;break;
case13:
shu1=shu2/shu1;break;
}
fuhao=0;flag_fuhao=0;update=1;
}
elseif((key_shu>=0)&&(key_shu<=9))//按下数字键
{flag_fuhao=0;
if(update)
shu1=0;
if(shu1<100000000)
{shu1=key_shu+shu1*10;
flag_shu=1;
}
update=0;
}
elseif((key_shu>=10)&&(key_shu<=13))//按下运算符
{
flag_fuhao=1;update=0;
if(flag_shu==1)
{
if(fuhao==0)
{
shu2=shu1;shu1=0;
fuhao=key_shu;flag_shu=2;
}
else
{
switch(fuhao)
{
case10:
shu2=shu2+shu1;break;
case11:
shu2=shu2-shu1;break;
case12:
shu2=shu2*shu1;break;
case13:
shu2=shu2/shu1;break;
}
shu1=0;fuhao=key_shu;
}
}
elseif(flag_shu==2)
fuhao=key_shu;//按键值
}
newkey=0;
}}}}}
///////////////键盘扫描/////////////////
ucharkeyscan()
{
key0=0xff;
if(key0!
=0xff)
{
delay(500);
if(key0!
=0xff)
{
switch(key0)
{
case0xfe:
num=7;break;
case0xfd:
num=8;break;
case0xfb:
num=9;break;
case0xf7:
num=13;break;///
case0xef:
num=4;break;
case0xdf:
num=5;break;
case0xbf:
num=6;break;
case0x7f:
num=12;break;//*
}
newkey=1;
delay(500);
while(key0!
=0xff)
{
if(!
shu1&&num>=0&&num<=9)
display(num);
else
display(shu1);
}
returnnum;
}
}
key2=0xff;
if(key2!
=0xff)
{
delay(500);
if(key2!
=0xff)
{
switch(key2)
{
case0xfe:
num=10;break;
case0xfd:
num=14;break;//=
case0xfb:
num=0;break;
case0xf7:
num=15;break;//ON/C
case0xef:
num=11;break;//-
case0xdf:
num=3;break;
case0xbf:
num=2;break;//=
case0x7f:
num=1;break;//+
}
newkey=1;
delay(500);
while(key2!
=0xff)
{
if(!
shu1&&num>=0&&num<=9)
display(num);
else
display(shu1);
}
returnnum;
}
}
return100;
}
//////////////////显示函数////////////////
voiddisplay(unsignedlongintdis_shu)
{uchardis_flag,dis_aa;
uchardis_data[10]={0,0,0,0,0,0,0,0,0,0};
if(dis_shu>9999999)dis_flag=8;
elseif(dis_shu>999999)dis_flag=7;
elseif(dis_shu>99999)dis_flag=6;
elseif(dis_shu>9999)dis_flag=5;
elseif(dis_shu>999)dis_flag=4;
elseif(dis_shu>99)dis_flag=3;
elseif(dis_shu>9)dis_flag=2;
elsedis_flag=1;
for(dis_aa=0;dis_aa { dis_data[dis_aa]=dis_shu%10; dis_shu=dis_shu/10; } for(dis_aa=0;dis_aa { P1=Duan[dis_data[dis_aa]]|Wela[dis_aa]; delay(100); } } 课程设计成绩评定表 成 绩 评 定 项目 比例 得分 平时成绩(百分制记分) 30% 业务考核成绩(百分制记分) 70% 总评成绩(百分制记分) 100% 评定等级 优良中及格不及格 指导教师(签名): 20年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 计算器 课程设计