九九乘法表判断器 单片机课设

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书
(2016 /2017 学年第 2 学期)
课程名称:单片机应用课程设计
题目:九九乘法表判断器
专业班级:自动化
学生姓名:
学号: 1
指导教师:
设计周数: 2 周
设计成绩:_____________________________
2017 年7月14日
目录
一、课程设计任务及目的----------------------------------------------------------------------1
1.1课程设计任务-----------------------------------------------------------------------------1
1.1.1技术要求-----------------------------------------------------------------------------1
1.1.2原始数据及主要任务--------------------------------------------------------------1
1.2课程设计目的-----------------------------------------------------------------------------1
二、课程设计正文------------------------------------------------------------------------------1
2.1硬件方案设计------------------------------------------------------------------------------1
2.1.1 电路原理图---------------------------------------------------------------------------1
2.1.2 PCB图---------------------------------------------------------------------------------2
2.1.3 系统工作原理------------------------------------------------------------------------2
2.1.4 STC90C52AD的引脚图----------------------------------------------------------3
2.2 单元电路设计------------------------------------------------------------------------------4
2.2.1单片机基本系统---------------------------------------------------------------------4
2.2.2按键输入模块------------------------------------------------------------------------5
2.2.3数码管显示模块---------------------------------------------------------------------5
2.2.4蜂鸣器输出模块---------------------------------------------------------------------7
2.3软件与硬件结合调试--------------------------------------------------------------------7
2.4 软件设计-----------------------------------------------------------------------------------8
2.4.1 系统分析------------------------------------------------------------------------------8
2.4.2 程序设计------------------------------------------------------------------------------9
三、课程设计心得体会----------------------------------------------------------------------14
四、参考文献----------------------------------------------------------------------------------15
一、课程设计任务及目的
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.1硬件方案设计
2.1.1电路原理图
系统组成:
该系统由单片机基本电路、数码管显示电路,按键输入电路以及蜂鸣器电路组成。

其中单片机基本电路已在课程设计专用单片机基本电路给出。

2.1.2 PCB图
2.1.3系统工作原理
系统通过键盘输入模块向单片机输入数据,经过单片机的计算按条件再向数码管显示模块和蜂鸣器输出指令,使之执行相应的动作。

各个模块的工作原理将在下文做具体介绍。

2.1.4 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.2单元电路设计
2.2.1单片机基本系统
1、电路说明
课程设计配发的小电路板(ISP-MCU Basic circuit)电路原理图。

该板作为课程设计的核心电路板使用,板上有单片机及附属电路,RS-232通信驱动电路,高低电平测试电路等。

课程设计电路中需要的其他电路在此基础上扩展,通过插孔连接。

扩展电路在万用板上制作。

2、器件安装
PCB板上画成熔断器的器件“W1~W4”安装导线短接,最先安装。

然后依次安装电阻、插孔座、DIP插座、发光二极管、瓷片电容、独石电容、电解电容、按钮,最后安装接线端子和DB9插座。

注意所有插座、插孔座、按钮及接线端子一定要安装牢靠。

晶体谐振器处安装插孔座,以便更换晶振。

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

单片机的技术资料和用于下载程序的软件可从宏晶公司网站上下载,也可向指导老师所要。

需要阅读理解单片机资料中“在系统可编程使用”,用到模数转换功能的组还要阅读“A/D转换寄存器及应用”。

调试程序时建议充分利用程序下载方便的有利条件,先编一些短小的程序验证硬件电路的正确性和使用方法的正确性。

完整程序复杂时建议使用单片机仿真软件帮助排除错误。

也可利用下载软件自带的串口工具帮助调试,通过单片机把运行状态和重要数据送到PC机。

扩展电路尽量不要再使用P3.0和P3.1口,必须使用时可作为单片机的输出口使用。

2.2.2按键输入模块
按键输入单元的电路图如图。


单元作为系统的输入,采用了四个独
立按键,分别为数字加一循环按键
S1(接P1.0口)、乘按键S2 (接P1.1
口)、答案输入按键S3(接P1.2
键)、清零按键S4按键(接P1.3口)。

当按键按下,电源与地短路,使单
片机端口电平被拉低,从而检测出
一个输入。

各个接口通过插针与单片
机相连。

2.2.3数码管显示模块
(1)电路说明
该单元作为系统的输出显示,采用两个共阳极数码管动态显示。

两数码管段选信号引脚并联通过1KΩ的限流电阻接到单片机的P2口,从P2.0到P2.7一次接数码管的a—dp脚。

由于采用了共阳极的数码管,因此不需要驱动芯片来驱动数码管显示,只需单片机引脚给出低电平相应断即可点亮。

两个数码管的片选端分别接两个PNP型三级管的集电极,三级管的射极接电源,基极接单片机P1.5、P1.6端。

该三极管起到了控制以及放大电流的作用,使得单片机可以通过给相应端口送低电平而使数码管点亮。

(2)器件安装
通过查询得到数码管的引脚排序,找出响应的引脚。

在单片机端口外接1K Ω的限流电阻,以防止电流过大损坏数码管。

两个数码管的片选端分别接两个PNP型三级管的集电极,三级管的射极接电源,基极接单片机。

注意数码管、三极管的引脚不能接错。

2.2.4蜂鸣器输出模块
该单元作为系统的输出,在计算结果正确时鸣响。

2.3软件与硬件结合调试
硬件调试:硬件调试是利用DVCC实验与开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。

硬件调试可分为静态调试与动态调试两步进行。

静态调试:是在用户系统未工作时的一种硬件检测。

第一步:目测。

检查外部的各种元件或者是电路是否有断点。

第二步:用万用表测试。

先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。

第三步:加电检测。

给板加电,检测所有插座或是器件的电源端是否符合要求的值
第四步:联机检查。

因为只有用单片机开发系统才能完成对用户系统的调试。

动态调试:是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。

动态调试的一般方法是由近及远、由分到合。

由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,
当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。

当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。

由分到合的调试既告完成。

由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。

调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。

软件调试:
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。

可以利用仿真器加以调试,对系统单个单元进行调试,当单元电路成功后,在对整个程序调试,最后在用功CPU芯片调试。

系统调试:
在焊接完毕附加电路以后,可通过肉眼做初步的观察,看是否存在虚焊、漏焊等明显缺陷,确认没有以后,可以通电对蜂鸣器单元、数码管显示单元进行调试:将蜂鸣器的使能端接到5V电源负极,正常鸣响则该单元合格。

再将每个数码管的使能端和段选端接到电源负极,如果每段都正常点亮则该单元合格。

若某单元不正常,则需找出错误改正后在调试,直到合格为止。

对于按键单元则可以通过万用表测其通态与断态的电阻来确定其实否合格。

合格时,通态电阻接近0,断态电阻接近无穷。

至此,硬件电路设计完毕。

2.4软件设计
2.4.1系统分析
该系统为一个九九乘法表判断器,故需要有乘数及答案的输入。

在硬件电路中设置了4个按键,S1、S2、S3、S4分别作为数字加一循环、乘、答案输入、清零按键。

两个数码管显示输入的数字。

而蜂鸣器则在答案正确的时候作提示用。

在按方面,由于只有一个数字循环键,所以,将乘按键和答案输入键设置为多功能按键。

在第一次按下S2时再按S1则可输入第一个乘数,第二次按下S2键的时候按K1键可以输入第二个乘数。

在S3第一次按下后,按S1输入答案的十位数,S3第二次按下后输入答案的个位数,S3第三次按下则判断并显示结果:正
确则蜂鸣2秒,错误则清零重来。

这样就减少了S1键的按键次数。

同时,在乘数没有输入完毕,即S2键按下少于2次时,答案输入按键是无效的;在输入答案时,S2是无效的。

这样避免了误操作。

在此技术要求下,程序流程图如下:
2.4.2程序设计
/* Main.c file generated by New Project wizard
*
* Created: 周五六月30 2017
* Processor: 80C51
* Compiler: Keil for 8051
*/
#include <reg51.h>
#include <stdio.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define SEG_INPUT P0
sbit K1 = P3^5;
sbit K2 = P3^4;
sbit K3 = P3^3;
sbit K4 = P3^2;
sbit BUZZER = P3^6;
sbit S1 = P2^0;
sbit S2 = P2^1;
void delay_ms(unsigned int x_ms);
void SEG_Display(uint num,uint time);
unsigned char SEG[10] = {
0xc0, 0xf9, 0xa4, 0xb0,
0x99, 0x92, 0x82, 0xf8,
0x80, 0x90
};
uint Time = 0 ;
uint NUMBER = 0 ;
uchar BUZZER_Flag = 0;
void main(void)
{
uchar STEP = 0;
uchar C1,C2,C3;
uchar Signal_K1,Signal_K2,Signal_K3,Signal_K4; P1 = 0X00;
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;//打开中断总开关
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
Signal_K1=Signal_K2=Signal_K3=Signal_K4=0; while (1)
{
//按键程序模块
if(K1 == 0){ //输入答案按键delay_ms(50);
if(K1 == 0){
Signal_K1=1;
NUMBER=3;
}
// while(K1 == 1);
}
if(K2 == 0){ //数字加一循环delay_ms(5000);
if(K2 == 0){
Signal_K2=1;
}
// while(K2 ==1);
}
if(K3 == 0){ //乘按键
delay_ms(50);
if(K3 == 0){
Signal_K3=1;
}
// while(K3 == 1);
}
if(K4 == 0){ //清零按键
delay_ms(50);
if(K4 == 0){
Signal_K4=1;
}
// while(K4 == 1);
}
//主逻辑程序模块
switch (STEP) {
case 0:
if(Signal_K1 == 1)
STEP = 1;
NUMBER = 0;
break;
case 1:
if(Signal_K1 == 1){
NUMBER = 0;
}
if(Signal_K2 == 1){
NUMBER += 10;
}
if(Signal_K3 == 1){
C1 = NUMBER/10%10;
STEP = 2;
}
break;
case 2:
if(Signal_K1 == 1){ NUMBER = C1 * 10;
}
if(Signal_K2 == 1){ NUMBER += 1;
if(NUMBER%10 == 0)
NUMBER -= 10;
}
if(Signal_K4 == 1){
C2 = NUMBER%10;
C3 = C1 * 10 + C2; NUMBER = 0;
STEP = 3;
}
break;
case 3:
if(Signal_K2 == 1){ NUMBER += 1;
}
if(Signal_K3 == 1){
if(NUMBER%100 == C1 * C2){ BUZZER_Flag = 1;
delay_ms(50000);
delay_ms(50000);
delay_ms(50000);
delay_ms(50000);
BUZZER_Flag = 0;
STEP = 4;
}
else{
NUMBER = 0;
}
}
if(Signal_K1 == 1){
NUMBER = 0;
}
break;
// case 4:
//
// break ;
default : STEP = 0;
}
Signal_K1=Signal_K2=Signal_K3=Signal_K4=0; //显示模块
}
}
void delay_ms(uint x_ms)
{
uint i = 125;
for(;x_ms>0;x_ms--)
for(;i>0;i--);
}
void SEG_Display(uint num,uint time) {
uchar SEG_1,SEG_2;
SEG_1 = num % 10;
SEG_2 = num /10 % 10;
if(time <= 10){
S1=1;
S2=0;
SEG_INPUT = SEG[SEG_1];
}
else if(time <=20){
S1=0;
S2=1;
SEG_INPUT = SEG[SEG_2];
}
else if(time >=20)
Time =0 ;
if(BUZZER_Flag){
if(Time)//BUZZER_Flag)
BUZZER = 0;
else
BUZZER = 1;
}
}
void Display() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
Time++;
SEG_Display(NUMBER,Time);
}
三、课程设计心得体会
通过两周的单片机课程设计实践。

我对单片机的工作原理和使用方法也有了更深刻的理解。

实验过程中,也对团队精神进行了考察,让我们合作起来更加的默契,在成功后一起体会喜悦的心情。

果然团结就是力量,只有互相之间的默契融洽的配合才能换来最终的完美成果。

在此次课设中,我通过查阅大量有关的资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获是巨大的。

在整个设计中,培养了我大理工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就退缩,必须要不厌其烦的发现问题的所在,只有这样才能提高自己的思维能力和实际运用能力,才能在今后的道路上披荆斩棘,收获成功,收获喜悦。

四、参考文献
[1]余发山,王福忠编著. 单片机原理及应用技术.徐州:中国矿业大学出版社,2008.
[2] 陈奥初,窦振中等编著.单片机应用系统设计与实践.北京:北京航空航天大学出版社,1991.
[3]陈伟人编著.MCS-51系列单片机实用子程序集锦[M].北京:清华大学出版社.1993.
[4]张靖武,周北京单片机原理、应用与PROTEUS仿真电子工业出版社
[5]龚运新, 罗惠敏, 彭建军编著单片机接口C语言开发技术清华大学出版社。

相关文档
最新文档