数字电路课程设计

核心提示课程设计报告课程设计名称 乒乓球游戏机控制电路设计专业班级姓名指导教师日期 2009年12月26日一.基本要求:1.设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。2.用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛

课程设计报告

课程设计名称 乒乓球游戏机控制电路设计

专 业

班 级

姓 名

指导教师

日 期 2009年12月26日

一.基本要求:

1.设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。

2.用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。调

3.当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。

4.一方得分时,电路自动响铃3 s,这期间发球无效,等铃声停止后方能继续比赛。

5.设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。

6.甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球

摘要:为了实现模拟乒乓球比赛的过程和规则,我们采用了AT89C51单片机来控制模拟,采用用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,用蜂鸣器来实现响铃,

比赛双方用按钮开关来模拟启动球拍击球,用数码管来显示比赛分数,

关键词:AT89C51 LED 蜂鸣器。

二. 系统设计

2.1 总体设计

2.1.1 乒乓球比赛系统方框图

整个过程由AT89C51单片机控制,控制器产生控制信号来控制8个LED的开关,即可模拟LED依此从左到右,或从右到左,并可完成调节速度。对分数的显示我们用LED,LED有发光亮度强的优点,能够满足我们的要求。整体电路图如下图所示:

2.1.2 单片机总体设计

AT89C51单片机有价格低,抗干扰能力强的优点,所以完成能够满足我们的要求,我们用单片机的P0控制8个LED的开关,通过对P0口的控制就能控制LED,由于P0口内部没有上拉电阻,不能驱动LED,所以我们在外部添加了上拉电阻。用P1口来控制数码管段显,用P2口的低四位控制数码管的位选,P30、P31来控制开关,PP26、P27来显示发球权。P25控制蜂鸣器,整体图如下图所示:

2.1.3 LED开关的设计

要求LED按左到右、或右到左的方向移动,我们只要把P0口的值变化即可。依次对P0口给值0X01、0X02、0X04、0x08、0x10、0X20、0X40、0X80,即可实现方向的移动。整体图如下所示:

2.1.4数码管设计

通过控制数码管的段,就可以控制数码管的数学的显示,我们采用了动态方式来控制数码,该方式是通过让数码管快速切换显示,人眼分辨不出来,不仅节约电能,而且还能够节约单片机的端口,从而减少程序的复杂性,如下图所示:

2.2程序设计

本系统的程序如下:

#include<reg51.h>

#include<absacc.h>

#define uchar unsigned char

#define uint unsigned int

#define DB P1

sbit SB1=P3^0; //按钮1

sbit SB2=P3^1; //按钮2

sbit deng1=P2^7; //指示灯1

sbit deng2=P2^6; //指示灯2

sbit Mic=P2^5; //蜂鸣器

uchar count=0;

uchar i,j,fengshu1,fengshu2;

bit stall,chose,ret,flag=0;

uchar ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0到9的段码

uchar dengcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //从左到右移动的代码

void delay(uint x)

{uchar y;

while(x--)

for(y=0;y<125;y++);}

void yidong(uchar fang)

{for(i=0;i<8;i++)

{delay(1000);

if(fang==0)

{P0=dengcode[i];}

else P0=dengcode[8-i];

}

}

void display(uchar a,uchar b)

{ P2=P2&&0Xe1;

delay(50) ;

P1=ledcode[a/10];

P2=P2&&0Xe0;

P2=P2&&0Xe2;

delay(50) ;

P1=ledcode[a%10];

P2=P2&&0Xe0;

P2=P2&&0Xe4;

delay(50) ;

P1=ledcode[b/10];

P2=P2&&0Xe0;

P2=P2&&0Xe8;

delay(50) ;

P1=ledcode[b%10];

P2=P2&&0Xe0;

}

void mic()

{Mic=1;

delay(3000);//延时3秒

Mic=0;

}

void main()

{uchar shu=0;

TMOD=0X01;

TH0=0X00;

TL0=0X00;

TR0=1;

ET0=1;

P0=0;

fengshu1=0;fengshu2=0;

P2=0;

P1=0;

SB1=1;

SB2=1;

while(1)

{for(i=0;i<2;i++)

for(j=0;j<5;j++)

{yidong(i);

if(i==0)

{deng1=1;deng2=0;}

ifi==1)

{deng2=1;deng1=0;}

if(SB2==0&&P0=0X80)

{yidong(0); }

if(SB2==1&&P0=0X80)

{fengshu1++;

if(fengshu1==21)

{fengshu1=0;fengshu2=0;}

mic();}

if(SB1==0&&P0=0X01)

{yidong(1); }

if(SB1==1&&P0=0X01)

{fengshu2++;

if(fenshu2==21)

{fengshu1=0;fengshu2=0;}

mic();}

}

}

void display0() interrupt 1

{ TH0=0;

TL0=0;

display(fengshu1,fengshu2);

}

一般来说一个项目的PCB印刷电路板开发设计流程是什么?

电子信息工程这个专业的主要方向是对小信号的控制处理,所以模电很重要。数电只是为了培养你的时序逻辑能力,实际中基本不会用到课本里的内容。设计电路的步骤应该是:1、了解设计要求明确设计任务;2、提出设计思路及方案;3、根据方案搭建电路模块,绘出电路图;4、通过计算及实验验证方案。

你对设计电路要是完全没有思路的话说明你模电功底太薄。一般情况下,当你拿到设计要求就应该有个大体的思路了,比如处理过程中要用到的一些基本模块,放大、滤波、整形、比较等等。所以你需要再看看模电书中一些应用性较强的电路,常用的要记下来,把他们当做信号处理的模块来使用。其他一些如单片机、传感器、特殊功能芯片的使用就是看经验了,多亲手做点东西,开阔下视野。

你要快速的掌握设计电路的方法的话,建议你看看大学生电子竞赛的书,可以提供很多设计思路,思路很重要。

《全国大学生电子设计竞赛电路设计》,作者:黄智伟,出版社:北京航天航空大学出版社

原理图设计------做封装------导入封装-----布局------走线-----设计完成生成GERBER光绘文件------发给厂家生产就印刷出电路板来了

基本就这些步骤了。我做了接近10年高速PCB设计。

如下面两个图,

设计好的PCB文件截图

印刷生产好,而且连元件都已经焊接加工好的电路板。

 
友情链接
鄂ICP备19019357号-22