九九乘法表判断器Word格式.docx
- 文档编号:21315025
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:18
- 大小:164.46KB
九九乘法表判断器Word格式.docx
《九九乘法表判断器Word格式.docx》由会员分享,可在线阅读,更多相关《九九乘法表判断器Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
1.1.1技术要求:
以MCS-51单片机为核心,设计出一个九九乘法表判断器。
2个数码管显示输入答案;
一个数字加1循环按键,一个乘按键,一个输入答案按键,一个清零按键。
若输入正确,蜂鸣器鸣响2秒;
答案错误,则清零重新输入。
1.1.2原始数据及主要任务:
a、确定总体设计法案;
b、设计键盘输入电路;
c、设计显示电路;
d、编写系统程序;
e、利用Protel设计硬件电路原理图和PCB图;
f、软硬件联机调试。
1.2课程设计目的
(1)通过九九乘法表判断器的设计,掌握数码管动态显示的原理;
(2)通过单片机课程设计,熟练掌握软件编程的方法,将理论知识联系到实践中去,提高我们的动脑动手能力;
(3)完成系统的硬件设计、软件设计、仿真调试,学会将硬件知识和软件知识结合起来,使两者相互补充,共同实现一个系统的功能;
(4)通过课程设计加深理解课堂教学内容,掌握单片机的基本应用方法。
通过实验熟悉微机基本接口芯片的外型、引脚、编程结构。
掌握程序设计和单片机基本接口电路的设计、应用方法,做到理论联系实际
2、课程设计正文
2.1硬件设计
2.1.1总体设计方案(电路原理图如下)
系统组成:
该系统由单片机基本电路、数码管显示电路,按键输入电路以及蜂鸣器电路组成。
其中单片机基本电路已在课程设计专用单片机基本电路给出。
系统工作原理:
系统通过键盘输入模块向单片机输入数据,经过单片机的计算按条件再向数码管显示模块和蜂鸣器输出指令,使之执行相应的动作。
各个模块的工作原理将在下文做具体介绍。
STC90C52AD说明
STC90C52AD的引脚说明和功能说明如下:
XTAL1:
接外部晶振的一个引脚。
在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。
采用外部振荡器时,此引脚应接地。
XTAL2:
在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端。
当采用外部振荡器时,则此引脚接外部振荡信号的输入。
RST:
AT89C51的复位信号输入引脚,高电位工作,当要对芯片复位时,只要将此引脚电位提升到高电位,并持续两个机器周期以上的时间,AT89C51便能完成系统复位的各项工作,使得内部特殊功能寄存器的内容均被设成已知状态。
P0口(P0.0~P0.7)是一个8位漏极开路双向输入输出端口,当访问外部数据时,它是地址总线(低8位)和数据总线复用。
外部不扩展而单片应用时,则作一般双向I/O口
用。
P0口每一个引脚可以推动8个LSTTL负载。
P2口(P2.0~P2.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),当访问外部程序存储器时,它是高8位地址。
外部不扩展而单片应用时,则作一般双向I/O口用。
每一个引脚可以推动4个LSTL负载。
P1口(P1.0~P1.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),其输出可以推动4个LSTTL负载。
仅供用户作为输入输出用的端口。
P3口(P3.0~P3.7)口是具有内部提升电路的双向I/0端口(准双向并行I/O口),它还提供特殊功能,包括串行通信、外部中断控制、计时计数控制及外部随机存储器内容的读取或写入控制等功能。
2.1.2单元电路设计
(一)单片机基本系统
1、电路说明
课程设计配发的小电路板(ISP-MCUBasiccircuit)电路原理图。
该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。
课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。
扩展电路在万用板上制作。
2、器件安装
PCB板上画成熔断器的器件“W1~W4”安装导线短接,最先安装。
然后依次安装电阻、插孔座、DIP插座、发光二极管、瓷片电容、独石电容、电解电容、按钮,最后安装接线端子
和DB9插座。
注意所有插座、插孔座、按钮及接线端子一定要安装牢靠。
晶体谐振器处安装插孔座,以便更换晶振。
3、使用说明
基本电路板上的单片机使用宏晶公司支持串口下载程序(ISP)的单片机,如STC90C52AD。
单片机的技术资料和用于下载程序的软件可从宏晶公司网站上下载,也可向指导老师所要。
需要阅读理解单片机资料中“在系统可编程使用”,用到模数转换功能的组还要阅读“A/D转换寄存器及应用”。
调试程序时建议充分利用程序下载方便的有利条件,先编一些短小的程序验证硬件电路的正确性和使用方法的正确性。
完整程序复杂时建议使用单片机仿真软件帮助排除错误。
也可利用下载软件自带的串口工具帮助调试,通过单片机把运行状态和重要数据送到PC机。
扩展电路尽量不要再使用P3.0和P3.1口,必须使用时可作为单片机的输出口使用。
(二)按键输入单元设计
按键输入单元的电路图如图。
该单元作为系统的输入,采用了四个独立按键,分别为数字
加一循环按键S1(接P1.0口)、乘按键S2
(接P1.1口)、答案输入按键S3(接P1.2键)、
清零按键S4按键(接P1.3口)。
当按键按下,
电源与地短路,使单片机端口电平被拉低,从而
检测出一个输入。
各个接口通过插针与单片机相连。
按钮顺向相对引脚为一对,每个钮有两对引脚,安装的时候要注意将同极性的两个引脚接到一起,以提高可靠性。
上拉电阻为470KΩ。
(三)数码管显示单元
1、电路说明
数码管显示单元的电路原理图如图。
该单元作为系统的输出显示,采用两个共阳极数码管动态显示。
两数码管段选信号引脚并联通过1KΩ的限流电阻接到单片机的P2口,从P2.0到P2.7一次接数码管的a—dp脚。
由于采用了共阳极的数码管,因此不需要驱动芯片来驱动数码管显示,只需单片机引脚给出低电平相应断即可点亮。
两个数码管的片选端分别接两个PNP型三级管的集电极,三级管的射极接电源,基极接单片机P1.5、P1.6端。
该三极管起到了控制以及放大电流的作用,使得单片机可以通过给相应端口送低电平而使数码管点亮。
2.器件安装
通过查询得到数码管的引脚排序,找出响应的引脚。
在单片机端口外接1KΩ的限流电阻,以防止电流过大损坏数码管。
两个数码管的片选端分别接两个PNP型三级管的集电极,三级管的射极接电源,基极接单片机。
注意数码管、三极管的引脚不能接错。
(三)蜂鸣器输出单元
1.电路说明
蜂鸣器输出单元的电路图如图。
该单元作为系统的输出,在计算结果正确时鸣响。
蜂鸣器通过一个PNP型三极管与电源和单片机P1.4口相连。
三极管的放大作用避免了蜂鸣器驱动电流的不足,也使得单片机可以通过给P1.4口低电平使蜂鸣器鸣响。
2.器件安装
注意三级管的极性,以及限流电阻的接法。
(四)附加电路器件表
标识符
器件名
规格型号
数量
U1
单片机
STC90C52AD
1
DS1~DS2
共阳极数码管
LG5611BH
2
R1~R7
电阻
470k
7
R8~R10
1k
3
R11
10k
Q1~Q3
PNP型三级管
9012
X1
晶振
60HZ
C1~C2
电容
30pf
C3
电解电容
10uf
S1~S5
按键
5
LS1
蜂鸣器
2.1.3软件与硬件结合调试
硬件调试:
硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试:
是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步:
联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试:
是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
软件调试:
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
可以利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用功CPU芯片调试。
系统调试
在焊接完毕附加电路以后,可通过肉眼做初步的观察,看是否存在虚焊、漏焊等明显缺陷,确认没有以后,可以通电对蜂鸣器单元、数码管显示单元进行调试:
将蜂鸣器的使能端接到5V电源负极,正常鸣响则该单元合格。
再将每个数码管的使能端和段选端接到电源负极,如果每段都正常点亮则该单元合格。
若某单元不正常,则需找出错误改正后在调试,直到合格为止。
对于按键单元则可以通过万用表测其通态与断态的电阻来确定其实否合格。
合格时,通态电阻接近0,断态电阻接近无穷。
至此,硬件电路设计完毕。
2.2软件设计
2.2.1系统分析
该系统为一个九九乘法表判断器,故需要有乘数及答案的输入。
在硬件电路中设置了4个按键,S1、S2、S3、S4分别作为数字加一循环、乘、答案输入、清零按键。
两个数码管显示输入的数字。
而蜂鸣器则在答案正确的时候作提示用。
在按方面,由于只有一个数字循环键,所以,将乘按键和答案输入键设置为多功能按键。
在第一次按下S2时再按S1则可输入第一个乘数,第二次按下S2键的时候按K1键可以输入第二个乘数。
在S3第一次按下后,按S1输入答案的十位数,S3第二次按下后输入答案的个位数,S3第三次按下则判断并显示结果:
正确则蜂鸣2秒,错误则清零重来。
这样就减少了S1键的按键次数。
同时,在乘数没有输入完毕,即S2键按下少于2次时,答案输入按键是无效的;
在输入答案时,S2是无效的。
这样避免了误操作。
在此技术要求下,程序流程图如下:
2.2.2系统设计
根据系统流程图编写系统程序如下:
#include<
reg52.h>
//头文件
#defineuintunsignedint//宏定义
#defineucharunsignedchar
ucharshu1,shu2,shu3,shu31,shu32,i,flag1,num,shu4,aa;
sbitkey1=P1^0;
//按键1加1按键
sbitkey2=P1^1;
//按键2乘法按键
sbitkey3=P1^2;
//按键3输入按键
sbitkey4=P1^3;
//按键4清零按键
sbitD1=P1^5;
//数码管1
sbitD2=P1^6;
//数码管2
sbitFM=P1^4;
//蜂鸣器
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelay(uintz);
//延时子函数
voiddisplay(ucharshu);
//数码管显示子函数
voidscan();
//键盘扫描按键
voidunit();
//定时器初始化
voiddd();
//*************主函数*************//
voidmain()
{
unit();
FM=1;
while
(1)
{
//FM=0;
scan();
}
}
voiddelay(uintz)
uintx,y;
for(x=110;
x>
0;
x--)
for(y=z;
y>
y--);
voiddd()
num=1;
shu1=0;
shu2=0;
shu32=0;
shu31=0;
shu3=0;
shu4=0;
EA=0;
voiddisplay(ucharshu)
D1=1;
D2=0;
P2=~table[shu/10];
delay(5);
D1=0;
D2=1;
P2=~table[shu%10];
voidscan()//键盘扫描
if(key4==0)
delay(5);
{
dd();
while(!
key4);
}
if(key3==0)
if(key3==0)
num++;
if(num==5)
{
num=0;
}
key3);
switch(num)
case1:
if(num!
=0)
{
if(key1==0)
delay(5);
if(key1==0)
{
shu1++;
if(shu1==10)
{
shu1=0;
}
while(!
key1);
}
}
display(shu1);
if(key2==0)
if(key2==0)
num=2;
key2);
}
}
break;
case2:
delay(5);
if(key1==0)
shu2++;
if(shu2==10)
{
shu2=0;
}
while(!
display(shu2);
case3:
shu31++;
if(shu31==10)
shu31=0;
if(key2==0)
shu32++;
if(shu32==10)
shu32=0;
shu3=shu31*10+shu32;
display(shu3);
case4:
=0)//判断是否正确对蜂鸣器2秒错清零
{
shu4=(shu1*shu2);
display(shu4);
if(shu3==shu4)
//delay(5);
FM=0;
EA=1;
if(aa==40)
aa=0;
dd();
//FM=1;
//delay(1000);
//FM=0;
//break;
voidunit()
TMOD=0x01;
//定时器模式的初始化
TH0=(65536-50000)/256;
//装初值
TL0=(65536-50000)%256;
//EA=1;
//开总中断
ET0=1;
//开定时器0中断
TR0=1;
//开启中断
voidtemer0()interrupt1//定时符程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
2.2.3系统实施
将程序下载到单片机中,给电路上电。
此时,数码管显示一个“0”,加一按键、答案输入按键皆为无效。
按一次乘按键,加一键生效,可按加一键输入第一个乘数,数码管显示输入值;
再按一次乘按键后,该键失效,答案输入按键生效,数码管显示“0”,按加一键输入第二个乘数。
按一次答案输入按键,数码管显示“00”,此时可按加一键输入答案的十位数,第一个数码管显示输入数值,第二个数码管显示“0”;
再按一次答案输入按键,数码管显示“x0”(x为此前输入的答案十位数),按加一键可以输入答案的个位,第二个数码管显示输入值;
第三次按下答案输入按键判断答案是否正确,如果正确,则蜂鸣器响2秒数码管显示正确答案,否则数码管显示“0”,从新输入数据;
在整个过程中,都可以按清零键重新输入数据。
据实测,所设计的硬件电路及程序可以实现任务要求。
3、课程设计总结
经过两周的课程设计,我深刻了解到单片机的重要性。
单片机是我们专业的主要专业课之一,虽然在学期初我对这门课程没有什么兴趣,觉得那些程序枯燥无味,但是经过这次课程设计,我发现其实单片机还是一门很有趣的课程。
电路图设计阶段使我熟练掌握了protel软件的应用,同时也锻炼了我们对于所学电路的熟练程度。
在焊接过程中由于引线比较多所以合理同时又不失美观的排线成为一个难题,由于焊点与焊点之间的距离比较近所以在焊接的过程中出现了一些虚焊点和短路,整体上焊完后又对有毛病的焊点进行了进一步的修整和改正,通过我们四个人一上午的努力最后完成了任务。
在程序设计和调试阶段由于对程序的编写不是很熟练就找了别的同学帮忙,最后对程序有了大体上的了解不过以后在程序设计方面还得需要继续的努力。
电路板调试过程中,我们认识到此阶段前的准备活动是很重要的,尤其是焊接过程,注意不要虚焊,短接电路器件。
通过这次课程设计我了解了单片机应用对我们专业的重要性,也看到了小组同学合作的重要性。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 九九乘法表 判断