ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:132.94KB ,
资源ID:9731999      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9731999.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算器程序设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算器程序设计报告.docx

1、计算器程序设计报告运城学院单片机课程设计报告课题名称 计算器设计 单 位 运城学院 所在院(系) 计算机科学与技术系 班 级 0902 班 指导教师 赵润林 学生姓名 裴立军 贺琛 王宇寒 2012年 12 月 14 日目 录1.课程设计的目的3 2.课程设计题目描述和要求38.硬件设计109.软件设计1110.程序代码1211.设计总结1812.参考文献20人员分工:序号 姓名 主要工作1 裴立军 总体设计2 贺琛 硬件设计3 王宇寒 软件设计1.课程设计目的(1) 进一步熟悉和掌握单片机的结构及工作原理。(2) 掌握单片机的接口技术及相关外围芯片的外特性,控制方法。(3) 通过课程设计,掌

2、握以单片机核心的电路设计的基本方法和技术,了解相关电路参数的计算方法。(4) 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。(5) 通过完成一个包括电路设计和程序开发的完整过程,使学生了解单片机应用系统开发及的全过程,为今后从事相应的工作打下良好的基础。2.课程设计题目描述和要求2.1设计题目要求用单片机完成四位正整数的加减乘除运算,通过键盘输入使数值与结果在七段共阴极数码管上显示,并设有清零键可随时完成计算与显示的清零。 2.2 原理图设计要求(1) 原理图设计要严格符合作图规范(布局、连线要正确,连线端子要有标号等)。(2) 图中所使用的各元器件要按标准正确标明序号及数值(

3、如,电阻:R1,100k;电容C1,30PF)。(3) 原理图要完整(电源,单片机,外围器件,扩器接口,输入/输出装置等要一应俱全)。2.3程序设计要求(1) 根据设计要求,将总体功能分解成若干个子功能模块,每个功能模块完成一个特定的功能。(2) 根据总体要求详细分解各功能模块,并确定各功能模块之间的关系,设计出完整的程序流程图(按流程图设计标准完成设计)。2.4 程序调试要求(1) 利用C语言编写程序(按C语言书写标准完成程序设计)。(2) 通过keil调试(按步骤一步一步完成程序调试、包括断点设置、内存及代码分析等)。(3) 通过PROTEUS软件完成理论性仿真。(4) 通过实验板检验及调

4、试。(5) 程序调试将设计完的程序输入,汇编,排除语法错误,生成HEX文件(执行、检查、修改程序,直到达到要求为止)。8.硬件设计8.1系统基本方案根据题目要求,系统可以划分为显示模块、键盘模块、处理程序三个模块。其中显示模块实现将CUNZHI中的值进行动态数码显示,包括:P0口送显示码,P2口为公共端扫描;键盘模块进行键盘扫描;处理程序模块实现计算器加减乘除运算。8.2 方案论证与比较方案一将显示处理程序置于定时中断程序中实现其功能,主程序为键盘扫描程序。方案二主程序为显示处理程序键盘扫描程序。取消定时中断的使用。方案比较方案一效率低,单片机的反应无法进行运行,方案二虽为能解决按键长按无显示

5、的缺点,但其运算速度快,所以我们最终选择了方案二。8.3主要电路分析1、主要元器件选择AT89S52单片机AT89S52单片机是16位微机,8KB的FLASH存储器,256个字节的内部RAM,32个可编程的I/O端口,3个16位定时器/计数器,8个中断源,一个串行口,内置看门狗。外部结构分复位部分、电源、晶振部分。七段数码管七段数码管采用共阴极接法,使用时,公共阴极接地,在阳极端输入高电平,发光二极管就导通发光。七段数码管中每个LED导通电压在1.5V左右,工作电流每段约为10mA。按键按键采用无互锁常开按键。8.4硬件设计原理通过键盘输入数字和运算符,利用单片机不断扫描键盘。图1 计算器原理

6、图8.5 硬件设计说明1、 操作显示设备显示设备采用八片七段共阴极LED显示器,共设置16 个键,其中数字键09 共十个,接下来依次是加号键(+)、减号键(-)、乘号键(*)、除号键(/)、等于号(=)、清除键。操作设备是四行四列共16键的简单键盘。第一行从左至右分别为F(清除键)、E(等号键)、D(除号键)、C(乘号键),第二行从左至右分别为B(减号键)、A(加号键)、9、8,第三行分别为7、6、5、4,第四行从左至右分别为3、2、1、0,“清除键”表示程序初始化,为下次输入准备。2、程序实现功能。(1) 十进制加减乘除法计算:输入范围为(1999),该程序输入两个定点数;A为加,B为减,C

7、为乘,D为除,E等于,输出计算结果。数据输入采用规范化输入,即输入=3个数才算完成一个运算数的输入,两个运算数之间输入运算符A、B、C或者D,输入完成按E显示计算结果;(2) 计算机复位功能:F为清零重启,任何时候按下F将重新开始3、计算器设计的PCB板图2 计算器设计的PCB板9.软件设计9.1 软件设计原理通过程序不断的扫描键盘并进行显示,当为数字键时用数码管显示,再进行输入当为功能键(+、-、*、/),再输入下一数字按下等于键显示前两个数字的运算结果。9.2 软件设计流程图图3 计算器的程序流程图10.程序代码/*程序名称: 计算器设计功能: 完成09999整数的一次加减乘除运算,减法运

8、算结果可以实现计算结果的负数显示,除法运算结果为0999并保留两位小数, 按键有”嘀”音,设有清零键,首位零不显示,其它的显示E设计人: 裴立军,贺琛,王宇寒创建时间: 2007.12.11修改时间: 2007.12.14*/#includeUnsigned char code XIANSHI=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40;Unsigned char code XIANSHIXIAOSHUDIAN=0xbf,0x86,0xdb,0xcf,0x

9、e6, 0xed,0xfd,0x87,0xff,0xef,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40;Unsigned char code XIANSHIWRONG=0x00,0x00,0x00,0x00,0x79;/错误时的显示/Unsigned char code SAOMIAO=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/共阴极扫描码表格/Unsigned char DANYUAN8=0,0,0,0,0,0,0,0;Unsigned long CUNZHI;Unsigned long SHU2=0,0;Unsign

10、ed char k,key,m,n;/*SIGN 存运算符(+、-、*、/)FLAG 用第几个数组,(出现非运算符前为0,出现运算符后为1)WRONG 输入多于4个时错误标志位 (0对、1错)COUNT 输入09数字的个数SIZE 减数大于被凑数时为1SIGNCOUNT 输入运算符的个数XIAOSHU 存一位小数的值DIVKEY 运算除法时置为1*/Unsigned char SIGN,FLAG,WRONG,COUNT,SIZE,SIGNCOUNT,XIAOSHU2,DIVKEY;/*程序名称:显示程序入口参数:无功能:实现将CUNZHI中的值进行动态数码显示局部变量:i,j,q全局变量:CU

11、NZHI,DANYUAN0,DANYUAN1,DANYUAN2,DANYUAN3所用端口功能:P0口送显示码 P2口公共端扫描返回值:无*/void disp(void) unsigned char i,j,p,q;/*错误时的显示*/ if(WRONG=1) for(i=0;i0;j-) /动态显示延时程序/ for(q=248;q0;q-); else if(DIVKEY=1) DANYUAN0=XIAOSHU1; DANYUAN1=XIAOSHU0; DANYUAN2=CUNZHI%10; DANYUAN3=CUNZHI/10%10; DANYUAN4=CUNZHI/100%10;DAN

12、YUAN5=CUNZHI/1000%10; for(p=5;p2;p-) if(DANYUANp=0) DANYUANp=16; else break;for(i=0;i0;j-) /动态显示延时程序/ for(q=248;q0;q-); else DANYUAN0=CUNZHI%10; DANYUAN1=CUNZHI/10%10; DANYUAN2=CUNZHI/100%10; DANYUAN3=CUNZHI/1000%10;/*首位为零不显示*/ for(p=3;p0;p-) /首位为零不显示/ if(DANYUANp=0)DANYUANp=16; else break;/*为负数时的显示

13、*/ if(SIZE=1) /为负数第五位数码管显示-/ DANYUAN4=17;else /第五位数码管不显示/DANYUAN4=16; for(i=0;i0;j-) /动态显示延时程序/for(q=248;q0;q-); /*程序名称:处理程序入口参数:key功能:实现加减乘除运算全局变量:key、CUNZHI、SHU0、SHU1、FLAG、SIGN返回值:无*/void CHULI(key) unsigned char i,j;/*声音“嘀”*/ TR0=1; for(i=200;i0;i-) /延时100ms/ for(j=248;j0;j-); TR0=0;/*/ if(key=15

14、) /按键为清除键/ CUNZHI=0; SHU0=0; SHU1=0; COUNT=0; WRONG=0; SIZE=0; SIGNCOUNT=0; XIAOSHU0=0; XIAOSHU1=0; DIVKEY=0; else if(key=0)&(key=10)&(keySHU1) CUNZHI=SHU0-SHU1; else SIZE=1; CUNZHI=SHU1-SHU0; Break; case 12: CUNZHI=SHU0*SHU1; break; case 13: DIVKEY=1; CUNZHI=SHU0*100/SHU1; XIAOSHU1=CUNZHI%10; XIAOS

15、HU0=CUNZHI/10%10; CUNZHI/=100; if(CUNZHI999) WRONG=1; break; if(COUNT=5)|(SIGNCOUNT1)|(CUNZHI9999) /输入数字键大于5时将WRONG置1/ WRONG=1; /*程序名称:键盘扫描入口参数:无功能:进行键盘扫描全局变量:k局部变量:i,j调用函数:CHULI(key)返回值:无*/void JIANPAN(void) unsigned char i,j; P3=0xff;P3_4=0; /扫描P3.4这条线上的四个按键/k=P3;k=k&0x0f;if(k!=0x0f) /看P3.4这条线上是否真

16、的有按键按下/ for(i=20;i0;i-) /延时一段时间/for(j=248;j0;j-);k=P3; /再判断一次/ k=k&0x0f;if(k!=0x0f)switch(k) /通过可能发生的四种可能比较看是哪个按键按下/ case 0x0e:key=0; break; case 0x0d: key=4; break; case 0x0b: key=8; break; case 0x07: key=12; break; k=P3; k=k&0x0f; while(k!=0x0f) k=P3;k=k&0x0f; CHULI(key); P3=0xff; P3_5=0; /扫描P3.5这

17、条线上的四个按键/ k=P3; k=k&0x0f; if(k!=0x0f) /看P3.5这条线上是否有按键按下/ for(i=20;i0;i-) /延时等待/for(j=248;j0;j-); k=P3; /再看一次/ k=k&0x0f;if(k!=0x0f) switch(k) /通过比较看是P3.5这条线上的哪一个按键按下/ case 0x0e:key=1;break;case 0x0d:key=5;break;case 0x0b:key=9;break;case 0x07:key=13;break;k=P3;k=k&0x0f;while(k!=0x0f) k=P3;k=k&0x0f; C

18、HULI(key); P3=0xff; /扫描P3.6这条线上的四个按键是否按下/ P3_6=0; k=P3; k=k&0x0f; if(k!=0x0f) for(i=20;i0;i-)for(j=248;j0;j-);k=P3;k=k&0x0f;if(k!=0x0f) switch(k) case 0x0e:key=2; break; case 0x0d: key=6; break; case 0x0b: key=10; break; case 0x07: key=14; break; k=P3; k=k&0x0f; while(k!=0x0f) k=P3; k=k&0x0f; CHULI(

19、key); P3=0xff; /扫描P3.7这条线上的四个按键是否按下/ P3_7=0; k=P3; k=k&0x0f; if(k!=0x0f) for(i=20;i0;i-)for(j=248;j0;j-); k=P3;k=k&0x0f;if(k!=0x0f) switch(k) case 0x0e: key=3; break; case 0x0d: key=7; break; case 0x0b: key=11; break; case 0x07: key=15; break; k=P3; k=k&0x0f; while(k!=0x0f) k=P3;k=k&0x0f; CHULI(key)

20、; /*程序名称:主程序功能:实现计算器加减乘除运算并显示全局变量:CUNZHI、FLAG、SIGN调用函数:disp()、JIANPAN()返回值:无 */void main(void) TMOD=0X02; ET0=1; EA=1; TR0=0; TH0=(256-200)%256; TL0=(256-200)/256; CUNZHI=0; FLAG=0; SIGN=0; WRONG=0; SIZE=0; XIAOSHU0=0; while(1) disp(); JIANPAN(); /* 定时中断*/ void t0(void) interrupt 1 using 1 P1_0=P1_0

21、; 11.设计总结通过本次单片机原理及应用课程设计我们充分认认到了课程设计的重要性和必要性,本次设计使们对已学过的基础知识有了更深入的理解,独立思考、独立工作以及应用所学基本理化分析和解决实际问题的能力有了很大的提高。另外,本次设计使我们的实际操作技能得到了训练, 同时也培养了我们严谨的科学作风。11.1实验方法及手段11.1.1 实验方法(1) 利用C语言编写程序(2) 通过keil调试(3) 通过PROTEUS软件仿真(4) 通过实验板实验及调试11.1.2 实验手段及环境(1) 计算机一套(2) 单片机实验板一套(3) keil调试软件及PROTEUS仿真软件各一套11.2焊接常识及其注

22、意事项新烙铁使用前,应用细砂纸将烙铁头打光亮,通电烧热,蘸上松香后用烙铁头刃面接触焊锡丝,使烙铁头上均匀地镀上一层锡。这样做,可以便于焊接和防止烙铁头表面氧化。旧的烙铁头如严重氧化而发黑,可用钢挫挫去表层氧化物,使其露出金属光泽后,重新镀锡,才能使用。电烙铁要用220V交流电源,使用时要特别注意安全。应认真做到以下几点:(1) 电烙铁插头最好使用三极插头。要使外壳妥善接地。(2) 使用前,应认真检查电源插头、电源线有无损坏。并检查烙铁头是否松动。(3) 电烙铁使用中,不能用力敲击。要防止跌落。烙铁头上焊锡过多时,可用布擦掉。不可乱甩,以防烫伤他人。(4) 焊接过程中,烙铁不能到处乱放。不焊时,

23、应放在烙铁架上。注意电源线不可搭在烙铁头上,以防烫坏绝缘层而发生事故。(5) 使用结束后,应及时切断电源,拔下电源插头。冷却后,再将电烙铁收回工具箱。焊接电路板时,一定要控制好时胡间太长,电路板将被烧焦,或造成铜箔脱落。从电路板上拆卸元件时,可将电烙铁头贴在焊点上,待焊点上的锡熔化后,将元件拔出。焊接时,要保证每个焊点焊接牢固、接触良好。要保证焊接质量。12参考文献(1) 老虎工作室.电路设计与制版:PROTEL99高级应用.北京:人民邮电出版社,2001(2)胡汉才.单片机原理及其接口技术.北京: 清华大学出版社,1996 (3) 张筑生. 微分半动力系统的不变集 D. 北京: 北京大学数学系数学研究所, 1983.(4) 冯西桥. 核反应堆压力管道与压力容器的LBB分析 R. 北京:核能技术设计研究院, 1997.(5) Keil Software-Macro Assembler and Utiliti

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1