九九乘法表判断器全

河北工程大学

科信学院

课程设计说明书(2011 /2012 学年第二学期)

课程名称:单片机原理及应用

题目:九九乘法表判断器

专业班级:

学生姓名:

学号:

指导教师:王静爽、苗敬利、杨怡君、韩昱

设计周数: 2 周

设计成绩:

2012年7月5日

目录

1. 课程设计任务及目的-----------------------------------------------------------------2

1.1课程设计任务---------------------------------------------------------------------2

1.1.1技术要求---------------------------------------------------------------------2

1.1.2原始数据及主要任务-------------------------------------------------------2

1.2 课程设计目的--------------------------------------------------------------------2

2. 课程设计正文-------------------------------------------------------------------------3

2.1 硬件设计--------------------------------------------------------------------------3

2.1.1 硬件方案设计------------------------------------------------------------3

2.1.2 单元电路设计------------------------------------------------------------5

2.1.3软件与硬件结合调试-------------------------------------------------------8

2.2 软件设计--------------------------------------------------------------------------9

2.2.1 系统分析-------------------------------------------------------------------9

2.2.2 系统设计------------------------------------------------------------------10

2.2.3 系统实施------------------------------------------------------------------17

3. 课程设计总结------------------------------------------------------------------------17

4. 参考文献-------------------------------------------------------------------------------18

5. 教师评语-------------------------------------------------------------------------------19

1. 课程设计任务及目的

1.1 课程设计任务

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的引脚图

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-MCU Basic circuit)电路原理图。该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。扩展电路在万用板上制作。

2、器件安装

PCB板上画成熔断器的器件“W1~W4”安装导线短接,最先安装。然后依次安装电阻、插孔座、DIP插座、发光二极管、瓷片电容、独石电容、电解电容、按钮,最后安装接线端子

和DB9插座。注意所有插座、插孔座、按钮及接线端子一定要安装牢靠。晶体谐振器处安装插孔座,以便更换晶振。

3、使用说明

基本电路板上的单片机使用宏晶公司支持串口下载程序(ISP)的单片机,如STC90C52AD。

单片机的技术资料和用于下载程序的软件可从宏晶公司网站上下载,也可向指导老师所要。需要阅读理解单片机资料中“在系统可编程使用”,用到模数转换功能的组还要阅读“A/D 转换寄存器及应用”。

调试程序时建议充分利用程序下载方便的有利条件,先编一些短小的程序验证硬件电路的正确性和使用方法的正确性。完整程序复杂时建议使用单片机仿真软件帮助排除错误。也可利用下载软件自带的串口工具帮助调试,通过单片机把运行状态和重要数据送到PC机。扩展电路尽量不要再使用P3.0和P3.1口,必须使用时可作为单片机的输出口使用。

(二)按键输入单元设计

1、电路说明

按键输入单元的电路图如图。该单元作为系统的输入,采用了四个独立按键,分别为数字加一循环按键S1(接P1.0口)、乘按键S2

(接P1.1口)、答案输入按键S3(接P1.2键)、

清零按键S4按键(接P1.3口)。当按键按下,

电源与地短路,使单片机端口电平被拉低,从而

检测出一个输入。各个接口通过插针与单片机相

连。

2、器件安装

按钮顺向相对引脚为一对,每个钮有两

对引脚,安装的时候要注意将同极性的两个引脚接到一起,以提高可靠性。上拉电阻为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.器件安装

注意三级管的极性,以及限流电阻的接法。

(四)附加电路器件表

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 //头文件

#define uint unsigned int //宏定义

#define uchar unsigned char

uchar shu1,shu2,shu3,shu31,shu32,i,flag1,num,shu4,aa; sbit key1=P1^0; //按键1 加1按键

sbit key2=P1^1; //按键2 乘法按键

sbit key4=P1^3; //按键4 清零按键

sbit D1=P1^5; //数码管1

sbit D2=P1^6; //数码管2

sbit FM=P1^4; //蜂鸣器

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71}; void delay(uint z); //延时子函数

void display(uchar shu); //数码管显示子函数

void scan(); //键盘扫描按键

void unit();//定时器初始化

void dd();//*************主函数*************// void main()

{

unit();

FM=1;

while(1)

{

// FM=0;

scan();

}

}

void delay(uint z)

{

uint x,y;

for(x=110;x>0;x--)

for(y=z;y>0;y--);

}

{

num=1;

shu1=0;

shu2=0;

shu32=0;

shu31=0;

shu3=0;

shu4=0;

FM=1;

EA=0;

}

void display(uchar shu) {

D1=1;D2=0;

P2=~table[shu/10];

delay(5);

D1=0;D2=1;

P2=~table[shu%10];

delay(5);

}

void scan()//键盘扫描

{

if(key4==0)

{

delay(5);

if(key4==0)

{

dd();

while(!key4);

}

if(key3==0)

{

delay(5);

if(key3==0)

{

num++;

if(num==5)

{

num=0;

}

while(!key3);

}

}

switch(num)

{

case 1: if(num!=0)

{

if(key1==0)

{

delay(5);

if(key1==0)

{

shu1++;

if(shu1==10)

{

shu1=0;

}

}

}

display(shu1);

if(key2==0)

{

delay(5);

if(key2==0)

{

num=2;

while(!key2);

}

}

}

break;

case 2: if(num!=0)

{

if(key1==0)

{

delay(5);

if(key1==0)

{

shu2++;

if(shu2==10)

{

shu2=0;

}

while(!key1);

}

}

}

break;

case 3: if(num!=0)

{

if(key1==0)

{

delay(5);

if(key1==0)

{

shu31++;

if(shu31==10)

{

shu31=0;

}

while(!key1);

}

}

if(key2==0)

{

delay(5);

if(key2==0)

{

shu32++;

if(shu32==10)

{

shu32=0;

}

while(!key2);

}

shu3=shu31*10+shu32;

display(shu3);

}

break;

case 4: if(num!=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;

// delay(5);

// break;

}

}

break;

}

}

void unit()

TMOD=0x01;//定时器模式的初始化

TH0=(65536-50000)/256; //装初值

TL0=(65536-50000)%256;

// EA=1; //开总中断

ET0=1;//开定时器0中断

TR0=1;//开启中断

// FM=0;

}

void temer0() interrupt 1 //定时符程序

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

aa++;

}

2.2.3 系统实施

将程序下载到单片机中,给电路上电。此时,数码管显示一个“0”,加一按键、答案输入按键皆为无效。按一次乘按键,加一键生效,可按加一键输入第一个乘数,数码管显示输入值;再按一次乘按键后,该键失效,答案输入按键生效,数码管显示“0”,按加一键输入第二个乘数。按一次答案输入按键,数码管显示“00”,此时可按加一键输入答案的十位数,第一个数码管显示输入数值,第二个数码管显示“0”;再按一次答案输入按键,数码管显示“x0”(x为此前输入的答案十位数),按加一键可以输入答案的个位,第二个数码管显示输入值;第三次按下答案输入按键判断答案是否正确,如果正确,则蜂鸣器响2秒数码管显示正确答案,否则数码管显示“0”,从新输入数据;在整个过程中,都可以按清零键重新输入数据。

据实测,所设计的硬件电路及程序可以实现任务要求。

3、课程设计总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两

星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过近两周时间的学习和探索,我们通过小组共同的努力成功实现了任务要求。在此过程中我们对学习过的知识进行了系统的复习,并将其应用到实际中去,把书本知识转换为实际的生产力,通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

整个设计通过了软件和硬件上的调试。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!在此,感谢学校和学院的各位领导和老师给我们创造了舒适的环境去专心的完成课设任务,尤其感谢各位老师不倦的辅导。此外,感谢我们团队的相互合作相互帮助。

4、参考文献

[1]余发山,王福忠编著. 单片机原理及应用技术.徐州:中国矿业大学出版社,2008.

[2] 陈奥初,窦振中等编著.单片机应用系统设计与实践.北京:北京航空航天大学出版社,1991.

[3]陈伟人编著.MCS-51系列单片机实用子程序集锦[M].北京:清华大学出版社.1993.

[4]张靖武,周北京单片机原理、应用与PROTEUS仿真电子工业出版社

[5]龚运新, 罗惠敏, 彭建军编著单片机接口C语言开发技术清华大学出版社

相关文档
最新文档