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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

九九乘法表判断器.docx

1、九九乘法表判断器信息与电气工程学院课程设计说明书(2010 /2011 学年第 二 学期)课程名称 :单片机原理及应用 题 目 :九九乘法表判断器 专业班级 : 学生姓名 : 学 号: 指导教师 :杨怡君、王静爽、韩昱 设计周数 : 2 设计成绩 : 2011年6月20日目录一 课程设计任务及目的-21.1课程设计任务 -21.2 课程设计目的 -2二 课程设计 -32.1 硬件设计 -3 2.1.1 硬件方案设计-3 2.1.2 单元电路设计-5 2.2.3 系统调试 -82.2 软件设计 -9 2.2.1 系统分析-9 2.2.2 系统设计-10 2.2.3 系统实施-18三 课程设计总结

2、 -18四 参考文献 -19 一. 课程设计任务及目的 1.1 课程设计任务 技术要求:以MCS-51单片机为核心,设计出一个九九乘法表判断器。2个数码管显示输入答案;一个数字加1循环按键,一个乘按键,一个输入答案按键,一个清零按键。若输入正确,蜂鸣器鸣响2秒;答案错误,则清零重新输入。 主要任务:a、确定总体设计法案;b、设计键盘输入电路;c、设计显示电路;d、编写系统程序;e、利用Protel设计硬件电路原理图和PCB 图;f、软硬件联机调试。1.2 课程设计目的(1) 通过九九乘法表判断器的设计,掌握数码管动态显示的原理;(2) 通过单片机课程设计,熟练掌握软件编程的方法,将理论知识联系

3、到实践中去,提高我们的动脑动手能力;(3) 完成系统的硬件设计、软件设计、仿真调试,学会将硬件知识和软件知识结合起来,使两者相互补充,共同实现一个系统的功能;(4) 通过课程设计加深理解课堂教学内容,掌握单片机的基本应用方法。通过实验熟悉微机基本接口芯片的外型、引脚、编程结构。掌握程序设计和单片机基本接口电路的设计、应用方法,做到理论联系实际二、课程设计2.1 硬件设计2.1.1 总体设计方案(电路原理图如下)系统组成: 该系统由单片机基本电路、数码管显示电路,按键输入电路以及蜂鸣器电路组成。其中单片机基本电路已在课程设计专用单片机基本电路给出。系统工作原理:(如图) 系统通过键盘输入模块向单

4、片机输入数据,经过单片机的计算按条件再向数码管显示模块和蜂鸣器输出指令,使之执行相应的动作。各个模块的工作原理将在下文做具体介绍。2.1.2单元电路设计(一)单片机基本系统1、电路说明课程设计配发的小电路板(ISP-MCU Basic circuit)电路原理图见下图。该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。扩展电路在万用板上制作。2、器件安装PCB板上画成熔断器的器件“W1W4”安装导线短接,最先安装。然后依次安装电阻、插孔座、DIP插座、发光二极管、瓷片电容、独石电容、

5、电解电容、按钮,最后安装接线端子和DB9插座。注意所有插座、插孔座、按钮及接线端子一定要安装牢靠。晶体谐振器处安装插孔座,以便更换晶振。3、使用说明基本电路板上的单片机使用宏晶公司支持串口下载程序(ISP)的单片机,如STC90C52AD。单片机的技术资料和用于下载程序的软件可从宏晶公司网站上下载,也可向指导老师所要。需要阅读理解单片机资料中“在系统可编程使用”,用到模数转换功能的组还要阅读“A/D转换寄存器及应用”。调试程序时建议充分利用程序下载方便的有利条件,先编一些短小的程序验证硬件电路的正确性和使用方法的正确性。完整程序复杂时建议使用单片机仿真软件帮助排除错误。也可利用下载软件自带的串

6、口工具帮助调试,通过单片机把运行状态和重要数据送到PC机。扩展电路尽量不要再使用P3.0和P3.1口,必须使用时可作为单片机的输出口使用。标识符器件名称规格型号数量标识符器件名称规格型号数量U1单片机STC90C52AD1C11 C12瓷片电容22p 或30p2U2RS232驱动MAX2321C13-C17独石电容0.22uF(224)5J1-J4, CRYLsts Hsts接线插孔座排母86针C1 C2电解电容1.0uF / 50V2C3 C4 C0电解电容10uF / 50V3CRY晶体谐振器6MHz1C5-C8电解电容47uF(22uF)4High,Low,PS发光二极管33JPS接线端

7、子电源用1R1金属膜电阻2001RST按钮小(0.20.3)1R0金属膜电阻6.8K1JDBDB9插座DB9针形座1R2 R3 R4金属膜电阻3.3K3U1DIP插座DIP401R9金属膜电阻1M1U2DIP插座DIP161(二)按键输入单元设计1、电路说明 按键输入单元的电路图如图。该单元作为系统的输入,采用了四个独立按键,分别为数字加一循环按键K1(接P1.0口)、乘按键K2(接P1.1口)、答案输入按键K3(接P1.2键)、清零按键K4按键(接P1.3口)。当按键按下,电源与地短路,使单片机端口电平被拉低,从而检测出一个输入。各个接口通过插针与单片机相连。2、器件安装 按钮顺向相对引脚为

8、一对,每个钮有两对引脚,安装的时候要注意将同极性的两个引脚接到一起,以提高可靠性。上拉电阻为10K。(三)数码管显示单元 1、电路说明 数码管显示单元的电路原理图如图。 该单元作为系统的输出显示,采用两个共阳极数码管动态显示。两数码管段选信号引脚并联通过0.33K的限流电阻接到单片机的P2口,从P2.0到P2.7一次接数码管的adp脚。由于采用了共阳极的数码管,因此不需要驱动芯片来驱动数码管显示,只需单片机引脚给出低电平相应断即可点亮。两个数码管的片选端分别接两个PNP型三级管的集电极,三级管的射极接电源,基极接单片机P1.5、P1.6端。该三极管起到了控制以及放大电流的作用,使得单片机可以通

9、过给相应端口送低电平而使数码管点亮。 2.器件安装 通过查询得到数码管的引脚排序,找出响应的引脚。在单片机端口外接0.33K的限流电阻,以防止电流过大损坏数码管。两个数码管的片选端分别接两个PNP型三级管的集电极,三级管的射极接电源,基极接单片机。注意数码管、三极管的引脚不能接错。(三)蜂鸣器输出单元 1.电路说明 蜂鸣器输出单元的电路图如图。Vcc 该单元作为系统的输出,在计算结果正确时鸣响。蜂鸣器通过一个PNP型三极管与电源和单片机P1.4口相连。三极管的放大作用避免了蜂鸣器驱动电流的不足,也使得单片机可以通过给P1.4口低电平使蜂鸣器鸣响。 2.器件安装 注意三级管的极性,以及限流电阻的

10、接法。 GND(四)附加电路器件表标识符器件名规格型号数量R4R7电阻10k4R8R17电阻033k10Q1Q3PNP型三级管90123LS0蜂鸣器12.1.3 系统调试 在焊接完毕附加电路以后,可通过肉眼做初步的观察,看是否存在虚焊、漏焊等明显缺陷,确认没有以后,可以通电对蜂鸣器单元、数码管显示单元进行调试:将蜂鸣器的使能端接到5V电源负极,正常鸣响则该单元合格。再将每个数码管的使能端和段选端接到电源负极,如果每段都正常点亮则该单元合格。若某单元不正常,则需找出错误改正后在调试,直到合格为止。对于按键单元则可以通过万用表测其通态与断态的电阻来确定其实否合格。合格时,通态电阻接近0,断态电阻接

11、近无穷。 至此,硬件电路设计完毕。2.2 软件设计2.2. 1 系统分析 该系统为一个九九乘法表判断器,故需要有乘数及答案的输入。在硬件电路中设置了4个按键,K1、K2、K3、K4分别作为数字加一循环、乘、答案输入、清零按键。两个数码管显示输入的数字。而蜂鸣器则在答案正确的时候作提示用。在按方面,由于只有一个数字循环键,所以,将乘按键和答案输入键设置为多功能按键。在第一次按下K2时再按K1则可输入第一个乘数,第二次按下K2键的时候按K1键可以输入第二个乘数。在K3第一次按下后,按K1输入答案的十位数,K3第二次按下后输入答案的个位数,K3第三次按下则判断并显示结果:正确则蜂鸣2秒,错误则清零重

12、来。这样就减少了K1键的按键次数。同时,在乘数没有输入完毕,即K2键按下少于2次时,答案输入按键是无效的;在输入答案时,K2是无效的。这样避免了误操作。在此技术要求下,程序流程图如下:2.2.2 系统设计(C语言编写) 根据系统流程图编写系统程序如下:#include #define uint unsigned int#define uchar unsigned charsbit inckey = P10; /定义按键及数码管位选信号端口sbit mulkey = P11;sbit answerkey = P12;sbit clrkey = P13;sbit buzzer = P14;sbit

13、 dsp_ten = P15;sbit dsp_one = P16;uint code seg = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,;/数码管字型码uint data_in,answer,answer_one,answer_ten,result,muler1,muler2,number;uchar answerkey_val , mulkey_val,dsp_flg,mul_end_flg = 0;/*函数名:delay_1ms() */*功能:一毫秒基准延时子函数 */*入口参数:delay_time */void dela

14、y_1ms(uint delay_time) while(delay_time -) uchar j; for(j=0;j0; i-) delay_1ms(1); /蜂鸣器震动周期为2ms频率为500Hz buzzer = !buzzer; EA = 1; /*函数名:reset() */*函数功能:复位子函数,清零所有变量,从新开始程序*/void reset() P2 = 0xff; data_in = dsp_flg = mul_end_flg = number = answerkey_val=mulkey_val = 0; result = muler1 = muler2 = answ

15、er = answer_one = answer_ten = 0; /beep_500ms(1); /按键提示,调试用 /*a函数名:LED_dap() */*中断方式动态显示子函数*/void LED_dsp() interrupt 1 TH0 = (65536 - 2000 * 2 ) 8 ; /清零定时器溢出位,重装初值 TL0 = (65536 - 2000 * 2 ) & 0x0f ;if(dsp_flg = 1) / 答案输入标志位为一,开始输入答案,动态显示两位答案 dsp_ten = 0; /十位数码管亮,个位数码管灭 dsp_one = 1; P0 = seganswer_t

16、en; /给P0口送答案十位数的段码 delay_1ms(3); /dsp_ten = 1; /个位数码管亮,十位数码管灭 dsp_one = 0; P0 = seganswer_one; /给P0口送答案个位数的段码 delay_1ms(2); /经调试,延时2ms显示效果较好 if(dsp_flg = 0) /答案输入标志位为0,未开始输入答案,显示一位乘数 dsp_ten = 1; /个位数码管亮,十位数码管灭 dsp_one = 0; P0 = segnumber; /给P0口送乘数的段码 delay_1ms(3); /*函数名:inckey_prg() */*函数功能:数字加1按键子

17、函数,按一次此键使选定数据位加一*/void inckey_prg()if(inckey = 0) EA = 0; /软件消抖,延迟10毫秒,关闭中断,防止干扰消抖时间delay_1ms(10);EA = 1;if(inckey = 0)while(!inckey); /确实按下,等待按键抬起,消抖结束data_in +; /确实按一次输入数据加一 if (data_in 9) /若数据大于9则清零,循环 data_in = 0; /*函数名:mulkey_prg() */*函数功能:乘按键子函数,使乘按键具有两种功能, */* 第一次按下mulkey_val = 1 可输入第一个乘数mule

18、r1;*/* 第二次按下mulkey_val = 2开始输入第二个乘数muler2*/void mulkey_prg() EA = 0; delay_1ms(8); EA = 1; if(mulkey = 0) while(!mulkey); data_in = 0; /清零上次输入数据输入暂存单元 mulkey_val +; /乘按键功能码加一 if ( mulkey_val 2 ) /乘按键只有两种功能,功能码大于2则置零 mulkey_val = 0; /* 函数名:answerkey_prg() */*函数功能:输入答案按键子函数,使答案输入键具有三种功能: */* 第一次按下answ

19、erkey_val = 1可输入答案十位数字;*/* 第二次按下answerkey_val = 2可输入答案个位数字;*/* 第三次按下answerkey_val = 3判断答案的正误。 */void answerkey_prg() EA = 0; delay_1ms(8); EA = 1; if (answerkey = 0) while(!answerkey); mulkey_val = 0; /清零乘按键功能码,使乘数输入功能失效 data_in = 0; /清零上次输入数据输入暂存单元 dsp_flg = 1; /答案输入状体标志位置一,说明开始输入答案 answerkey_val +

20、; /答案输入按键功能码加一 if(answerkey_val 3) /超出其功能范围,则清零功能码 answerkey_val = 0; /*函数名:clrkey_prg() */*函数功能:清零键子函数,按该键,回到初始状态*/void clrkey_prg() EA = 0; delay_1ms(8); EA = 1; if(clrkey = 0) while(!clrkey);reset(); /调用复位子程序 /*函数名: muler_in_prg() */*功能:乘数输入子函数,输入乘数 */void muler_in_prg() switch (mulkey_val) case

21、1: /乘按键功能一,输入第一个乘数 inckey_prg(); /调用数子加一子涵数 muler1 = number = data_in; /存数据 break; case 2: / 乘按键功能二,输入第二个乘数 inckey_prg(); muler2 = number = data_in;mul_end_flg = 1; /乘数输入结束状态标志位置一,说明两个乘数都已输入 break; /*函数名:answer_in_prg() */*功能:答案输入与判断子函数,输入答案并与积作比较,判断答案正误*/void answer_in_prg()switch(answerkey_val)cas

22、e 1: /答案输入键功能一,输入答案的十位数 inckey_prg(); /输入答案十位数字answer_ten = data_in; /将答案的十位存入answer_ten break;case 2: /答案输入键功能二,输入答案的个位数 inckey_prg(); /输入答案个位数字answer_one = data_in; /将答案的个位存入answer_one break;case 3: /答案输入键功能三,计算结果,并判断答案是否正确。 result = ( muler1 * muler2); /将求积的结果存入resul answer = ( answer_ten * 10 + answer_one ); /将答案存入answerif(answer = result) / 判断输入答案是否与结果相等, beep_500ms(4); / 若相等,则蜂鸣器响两秒; answerkey_val = 0; else reset(); / 否则,重新开始。 break; /*主函数*

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

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