用Protel 99 SE玩转.docx

上传人:b****5 文档编号:5705809 上传时间:2022-12-31 格式:DOCX 页数:19 大小:1.19MB
下载 相关 举报
用Protel 99 SE玩转.docx_第1页
第1页 / 共19页
用Protel 99 SE玩转.docx_第2页
第2页 / 共19页
用Protel 99 SE玩转.docx_第3页
第3页 / 共19页
用Protel 99 SE玩转.docx_第4页
第4页 / 共19页
用Protel 99 SE玩转.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

用Protel 99 SE玩转.docx

《用Protel 99 SE玩转.docx》由会员分享,可在线阅读,更多相关《用Protel 99 SE玩转.docx(19页珍藏版)》请在冰豆网上搜索。

用Protel 99 SE玩转.docx

用Protel99SE玩转

用Protel99SE玩转“洞洞板”

笔者长期从事CAD、单片机的教学工作。

我发现使学生掌握CAD软件的操作方法与技巧容易,而能真正从实际出发设计印刷电路板则不是一件容易的事情,这就如同会写字不一定就能写好字一样。

原因有很多,其中一个就是限于条件同学不能将设计的成果转换成真正的PCB板。

因此在平时训练时对为什么有的元件要放在中间而有的元件要放在板的边沿,没有一个感性的认识。

为此笔者设计了一些课题有针对性的进行实训,利用我们平时常用“洞洞板”(万能板)设计并制作一些单片机实验电路,使同学们在实验中得到了诸如CAD设计、单片机编程、以及焊接工艺等多方面的锻练,取得了较好的效果。

下面我将一个单片机实验板设计制作过程介绍给读者,希望能对大家有所帮助。

一、绘制原理图

原理图是一个能进行单片机LED流水灯、七段数码管动态扫描、按键扫描以及串口通讯编程练习的实验板。

画图时元件之间的连结应根据实际情况采用灵活多变的电连结方式。

图中用了网络号、总线以及导线等几种连结方式,总之应使画面美观。

在绘制原理图时要正确设置元件的属性

库元件名称

元件标号

型号规格

封装

CAP

C1

10μF

RB.1/.2(自制)

CAP

C2

30P

RAD0.1

CAP

C6~C9

0.1μF

RAD0.1

8031

U1

STC89C52RC

DIP40

MAX232(自制)

U2

MAX232

DIP16

LED7-4(自制)

DPY1、DPY2

LED7-4(自制)

PNP

Q1~Q8

9015

9015(自制)

RES2

R1

10K

AXIAL0.4

RES2

R2~R17

680

AXIAL0.4

SW—PB

K1~K8

AN(自制)

DB9

J1

DB9/F

CON8

J2~J9

CON8

SIP8

CON2

J10

POWER

SIP2

CRYSTAL

X1

12M

RAD0.2

LED

LED1~LED8

LED(自制)

元件库:

8031在ProtelDosSchematicLibrary中;MAX232、LED7-4需自制;

其余元件在MiscellaneousDevices.lib中

二、准备元器件

三、测量元件并绘制元件的封装

一定要准确测量各元件脚之间的距离,一般都为0.1英寸(100mil)的整数倍。

9015的元件脚之间的距离不是100mil,为了适应万能板间距也要设计成0.1英寸;发光二极管的引脚标号要用A、K否则引入网络表时有麻烦。

各元件的绘制参数如下:

四、设计PCB板

因为是要在万能板是焊接所以所有元件引脚间距也只能是0.1英寸,只能设置为单面板,导线的间距也一样并要转直角。

为了方便设计可把网格显示设置为100mil。

然后就是布线,都采用手工布线,一条一条的“拉”,就是有点费眼。

由于是单面板有些地方难免绕不过去,因此在顶层要加跳线。

下图中细线就是顶层的跳线。

七段数码管部分:

串口通讯部分:

按键部分:

发光二极管部分:

CPU部分:

五、焊接元件

焊接元件前要根据PCB设计图确定元件的位置,七段数码管部分跳线较多,有很多跳线都要在元件的下面,因此要先焊接跳线。

标出元件跳线位置:

焊接跳线:

再焊元件:

固定所有元件:

六、用“拖焊法”搭接电路

这种拖焊有一定技巧,一般情况焊接时是焊丝先离开然后是烙铁离开,但拖焊时秩序刚好相反。

当然好可用“口吹法”,总之这要多加练习。

这是一个局部效果:

七、程序实验

大功告后就可以输入一个程序进行实验了。

下面是一个时钟程序实验的效果。

这是该程序的原代码:

;---------------

;24小时时钟程序

;---------------

SECDATA30H;定义为秒寄存器

MINDATA31H;定义为分寄存器

HOURDATA32H;定义为时寄存器

BCD_GEDATA33H;定义为个位BCD码寄存器

BCD_SHDATA34H;定义为十位BCD码寄存器

DSP_GEDATA35H;定义为个位显示位置码寄存器

DSP_SHDATA36H;定义为十位显示位置码寄存器

ORG00H

AJMPMAIN

ORG0BH

AJMPTIMEO

ORG030H

MAIN:

MOVR0,#30H;

LOOP:

MOV@R0,#0;

INCR0;

CJNER0,#37H,LOOP;以上为30H到37H寄存器清0

MOVTMOD,#01H;定义T0为1工作方式

MOVTH0,#3CH;

MOVTL0,#0B0H;T0置初值

SETBEA;打开总中断

SETBET0

SETBTR0;打开T0中断

NEXT:

ACALLKEY;调键扫描子程序

ACALLCOUT;调键值处理子程序

ACALLDISP;调显示程序

AJMPNEXT;

TAB:

DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;字段码表格

;---------------------------------

;定时中断子程序,出口值SEC,MIN,HOUR

;---------------------------------

TIMEO:

PUSHPSW;压入堆栈

PUSHACC;

MOVTH0,#3CH;重赋初值

MOVTL0,#0B0H;

INCR2;中断计数器加1

CJNER2,#20,T_RET;中断计数器到20了吗?

50ms

MOVR2,#0;中断计数器清0

INCSEC;秒寄存器加1

MOVA,SEC;

CJNEA,#60,T_RET;秒寄存器到60了吗?

MOVSEC,#0;到了清0

INCMIN;分寄存器加1

MOVA,MIN;

CJNEA,#60,T_RET;分寄存器到60了吗?

MOVMIN,#0;分寄存器清0

INCHOUR;时寄存器加1

MOVA,HOUR;

CJNEA,#24,T_RET;时寄存器到了24没?

MOVHOUR,#0;时寄存器清0

T_RET:

POPACC;弹出堆栈

POPPSW;

RETI;退出中断程序

;------------------------

;键扫描子程序,键值出口B

;------------------------

KEY:

MOVP3,#0FFH;P3口高电平

MOVA,P3;读P3口的值

CPLA;键值取反

JNZKK;如A不为0有键按下则跳到键处理程序

MOVB,#0;否则键值为0

AJMPK_RET;退出

KK:

ACALLDISP;调显示子程序并做为延时去抖

MOVP3,#0FFH;P3口高电平

MOVA,P3;再读P3口的值

CPLA;键值取反

JNZKF;如值仍不为0则确实有键按下

MOVB,#0;否则为键抖

AJMPK_RET;退出

KF:

MOVB,A;将键值给B

K_OUT:

MOVP3,#0FFH;P3口高电平

MOVA,P3;读P3口的值

CPLA;键值取反

JZK_RET;如值为0则键已松开退出

ACALLDISP;否则未松开键调显示程序

AJMPK_OUT;跳转等待键松开

K_RET:

RET;退出

;----------------------

;键处理子程序,入口值B

;----------------------

COUT:

MOVA,B;读入键值

JZC_RET;如值为0无键按下则退出

JBACC.0,STOP;0号键按下则停秒

JBACC.1,H_ADD;1号键按下时加1

JBACC.2,M_ADD;2号键按下分加1

JBACC.3,RUN;3号键校时按下确定

AJMPC_RET;退出

STOP:

CLRTR0;停秒

AJMPC_RET;

H_ADD:

JBTR0,C_RET;校时如没停秒无效退出

INCHOUR;时寄存器加1

MOVA,HOUR;

CJNEA,#24,C_RET;如大于24则清0

MOVHOUR,#0;

AJMPC_RET;

M_ADD:

JBTR0,C_RET;校分如没停秒无效退出

INCMIN;分加1

MOVA,MIN;

CJNEA,#60,C_RET;如大于60则清0

MOVMIN,#0;

AJMPC_RET;

RUN:

SETBTR0;确认键起动T0

C_RET:

RET;退出

;-------------------------------------

;显示程序,入口值显示数SEC,MIN,HOUR,

;显示位置DSP_GE,DSP_SH

;-------------------------------------

DISP:

PUSHACC;

PUSHB;压入堆栈

MOVA,SEC;读入秒数

ACALLBCD;调BCD转换子程序

MOVDSP_GE,#07Fh;秒个位显示位置

MOVDSP_SH,#0bfh;秒十位显示位置

ACALLDSP;调数码显示程序

MOVA,MIN;读入分数

ACALLBCD;调BCD转换子程序

MOVDSP_GE,#0efh;分个位显示位置

MOVDSP_SH,#0f7h;分十位显示位置

ACALLDSP;调数码显示程序

MOVA,HOUR;读入时数

ACALLBCD;调BCD转换子程序

MOVDSP_GE,#0fdh;时个位显示位置

MOVDSP_SH,#0feh;时十位显示位置

ACALLDSP;调数码显示程序

MOVP0,#0f7h;显示-

MOVP2,#0dbh;-显示位置

ACALLDEL;显示延时

POPB;

POPACC;弹出数据

RET;退出

;---------------------------------------

;数码显示程序,入口值显示数BCD_GECD_SH

;显示位置DSP_GE,DSP_SH

;---------------------------------------

DSP:

MOVDPTR,#TAB;

MOVA,BCD_GE;读入个位显示BCD码

MOVCA,@A+DPTR;查表

MOVP0,A;字段码送P0口

MOVP2,DSP_GE;位置码送P2口

ACALLDEL;显示延时

MOVA,BCD_SH;读十位显示BCD码

MOVCA,@A+DPTR;查表

MOVP0,A;字段码送P0口

MOVP2,DSP_SH;位置码送P2口

ACALLDEL;显示延时

RET;退出

;-----------------------------------------

;BCD转换子程序,入口值A,出口值BCD_GE,BCD_SH

;-----------------------------------------

BCD:

MOVB,#10;送被除数

DIVAB;除法运算

MOVBCD_SH,A;商为十位BCD码

MOVBCD_GE,B;余数为个位BCD码

RET;退出

;-----------------------

;显示延时子程序,延时1ms

;-----------------------

DEL:

MOVR5,#02

DEL1:

MOVR6,#250

DJNZR6,$

DJNZR5,DEL1

RET

END

 

另我还有一带温度测量的万年历的制作过程,主要则重于C语言的编程。

如有兴趣可联系。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

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

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