1、用Protel 99 SE玩转用Protel 99 SE玩转“洞洞板”笔者长期从事CAD、单片机的教学工作。我发现使学生掌握CAD软件的操作方法与技巧容易,而能真正从实际出发设计印刷电路板则不是一件容易的事情,这就如同会写字不一定就能写好字一样。原因有很多,其中一个就是限于条件同学不能将设计的成果转换成真正的PCB板。因此在平时训练时对为什么有的元件要放在中间而有的元件要放在板的边沿,没有一个感性的认识。为此笔者设计了一些课题有针对性的进行实训,利用我们平时常用“洞洞板”(万能板)设计并制作一些单片机实验电路,使同学们在实验中得到了诸如CAD设计、单片机编程、以及焊接工艺等多方面的锻练,取得了
2、较好的效果。下面我将一个单片机实验板设计制作过程介绍给读者,希望能对大家有所帮助。一、绘制原理图原理图是一个能进行单片机LED流水灯、七段数码管动态扫描、按键扫描以及串口通讯编程练习的实验板。画图时元件之间的连结应根据实际情况采用灵活多变的电连结方式。图中用了网络号、总线以及导线等几种连结方式,总之应使画面美观。在绘制原理图时要正确设置元件的属性库元件名称元件标号型号规格封装CAPC110FRB.1/.2(自制)CAPC230PRAD0.1CAPC6C90.1FRAD0.18031U1STC89C52RCDIP40MAX232(自制)U2MAX232DIP16LED7-4(自制)DPY1、DP
3、Y2LED7-4(自制)PNPQ1Q890159015(自制)RES2R110KAXIAL0.4RES2R2R17680AXIAL0.4SWPBK1K8AN(自制)DB9J1DB9/FCON8J2J9CON8SIP8CON2J10POWERSIP2CRYSTALX112MRAD0.2LEDLED1LED8LED(自制)元件库:8031在Protel Dos Schematic Library中;MAX232、LED7-4需自制;其余元件在Miscellaneous Devices.lib中二、准备元器件三、测量元件并绘制元件的封装一定要准确测量各元件脚之间的距离,一般都为0.1英寸(100mi
4、l)的整数倍。9015的元件脚之间的距离不是100mil,为了适应万能板间距也要设计成0.1英寸;发光二极管的引脚标号要用A、K否则引入网络表时有麻烦。各元件的绘制参数如下: 四、设计PCB板因为是要在万能板是焊接所以所有元件引脚间距也只能是0.1英寸,只能设置为单面板,导线的间距也一样并要转直角。为了方便设计可把网格显示设置为100mil。然后就是布线,都采用手工布线,一条一条的“拉”,就是有点费眼。由于是单面板有些地方难免绕不过去,因此在顶层要加跳线。下图中细线就是顶层的跳线。七段数码管部分:串口通讯部分:按键部分:发光二极管部分: CPU部分: 五、焊接元件焊接元件前要根据PCB设计图确
5、定元件的位置,七段数码管部分跳线较多,有很多跳线都要在元件的下面,因此要先焊接跳线。标出元件跳线位置:焊接跳线: 再焊元件:固定所有元件: 六、用“拖焊法”搭接电路这种拖焊有一定技巧,一般情况焊接时是焊丝先离开然后是烙铁离开,但拖焊时秩序刚好相反。当然好可用“口吹法”,总之这要多加练习。这是一个局部效果:七、程序实验大功告后就可以输入一个程序进行实验了。下面是一个时钟程序实验的效果。这是该程序的原代码:;-;24小时时钟程序;- SEC DATA 30H ;定义为秒寄存器 MIN DATA 31H ;定义为分寄存器 HOUR DATA 32H ;定义为时寄存器 BCD_GE DATA 33H
6、;定义为个位BCD码寄存器 BCD_SH DATA 34H ;定义为十位BCD码寄存器 DSP_GE DATA 35H ;定义为个位显示位置码寄存器 DSP_SH DATA 36H ;定义为十位显示位置码寄存器 ORG 00H AJMP MAIN ORG 0BH AJMP TIMEO ORG 030HMAIN: MOV R0,#30H;LOOP: MOV R0,#0; INC R0; CJNE R0,#37H,LOOP;以上为30H到37H寄存器清0 MOV TMOD,#01H ;定义T0为1工作方式 MOV TH0,#3CH ; MOV TL0,#0B0H ;T0置初值 SETB EA ;打
7、开总中断 SETB ET0SETB TR0 ;打开T0中断NEXT: ACALL KEY ;调键扫描子程序 ACALL COUT ;调键值处理子程序 ACALL DISP ;调显示程序 AJMP NEXT ;TAB: DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h;字段码表格;-;定时中断子程序,出口值SEC,MIN,HOUR;-TIMEO:PUSH PSW ;压入堆栈 PUSH ACC ; MOV TH0,#3CH ;重赋初值 MOV TL0,#0B0H ; INC R2 ;中断计数器加1 CJNE R2,#20,T_RET;中断计数器到20了
8、吗?50ms MOV R2,#0 ;中断计数器清0 INC SEC ;秒寄存器加1 MOV A,SEC ; CJNE A,#60,T_RET ;秒寄存器到60了吗? MOV SEC,#0 ;到了清0 INC MIN ;分寄存器加1 MOV A,MIN ; CJNE A,#60,T_RET ;分寄存器到60了吗? MOV MIN,#0 ;分寄存器清0 INC HOUR ;时寄存器加1 MOV A,HOUR ; CJNE A,#24,T_RET ;时寄存器到了24没? MOV HOUR,#0 ;时寄存器清0T_RET:POP ACC ;弹出堆栈 POP PSW ; RETI ;退出中断程序;-;键
9、扫描子程序,键值出口B;-KEY: MOV P3,#0FFH ;P3口高电平 MOV A,P3 ;读P3口的值 CPL A ;键值取反 JNZ KK ;如A不为0有键按下则跳到键处理程序 MOV B,#0 ;否则键值为0 AJMP K_RET ;退出KK: ACALL DISP ;调显示子程序并做为延时去抖 MOV P3,#0FFH ;P3口高电平 MOV A,P3 ;再读P3口的值 CPL A ;键值取反 JNZ KF ;如值仍不为0则确实有键按下 MOV B,#0 ;否则为键抖 AJMP K_RET ;退出KF: MOV B,A ;将键值给BK_OUT:MOV P3,#0FFH ;P3口高
10、电平 MOV A,P3 ;读P3口的值 CPL A ;键值取反 JZ K_RET ;如值为0则键已松开退出 ACALL DISP ;否则未松开键调显示程序 AJMP K_OUT ;跳转等待键松开K_RET:RET ;退出;-;键处理子程序,入口值B;-COUT: MOV A,B ;读入键值 JZ C_RET ;如值为0无键按下则退出 JB ACC.0,STOP ;0号键按下则停秒 JB ACC.1,H_ADD ;1号键按下时加1 JB ACC.2,M_ADD ;2号键按下分加1 JB ACC.3,RUN ;3号键校时按下确定 AJMP C_RET ;退出STOP: CLR TR0 ;停秒 AJ
11、MP C_RET ;H_ADD:JB TR0,C_RET ;校时如没停秒无效退出 INC HOUR ;时寄存器加1 MOV A,HOUR ; CJNE A,#24,C_RET ;如大于24则清0 MOV HOUR,#0 ; AJMP C_RET ;M_ADD:JB TR0,C_RET ;校分如没停秒无效退出 INC MIN ;分加1 MOV A,MIN ; CJNE A,#60,C_RET ;如大于60则清0 MOV MIN,#0 ; AJMP C_RET ;RUN: SETB TR0 ;确认键起动T0C_RET:RET ;退出;-;显示程序,入口值显示数SEC,MIN,HOUR, ; 显示位
12、置DSP_GE,DSP_SH;-DISP: PUSH ACC ; PUSH B ;压入堆栈 MOV A,SEC ;读入秒数 ACALL BCD ;调BCD转换子程序 MOV DSP_GE,#07Fh ;秒个位显示位置 MOV DSP_SH,#0bfh ;秒十位显示位置 ACALL DSP ;调数码显示程序 MOV A,MIN ;读入分数 ACALL BCD ;调BCD转换子程序 MOV DSP_GE,#0efh ;分个位显示位置 MOV DSP_SH,#0f7h ;分十位显示位置 ACALL DSP ;调数码显示程序 MOV A,HOUR ;读入时数 ACALL BCD ;调BCD转换子程序
13、MOV DSP_GE,#0fdh ;时个位显示位置 MOV DSP_SH,#0feh ;时十位显示位置 ACALL DSP ;调数码显示程序 MOV P0,#0f7h ;显示- MOV P2,#0dbh ;-显示位置 ACALL DEL ;显示延时 POP B ; POP ACC ;弹出数据 RET ;退出;-;数码显示程序,入口值显示数BCD_GE CD_SH ; 显示位置DSP_GE,DSP_SH;-DSP: MOV DPTR,#TAB ; MOV A,BCD_GE ;读入个位显示BCD码 MOVC A,A+DPTR ;查表 MOV P0,A ;字段码送P0口 MOV P2,DSP_GE
14、;位置码送P2口 ACALL DEL ;显示延时 MOV A,BCD_SH ;读十位显示BCD码 MOVC A,A+DPTR ;查表 MOV P0,A ;字段码送P0口 MOV P2,DSP_SH ;位置码送P2口 ACALL DEL ;显示延时 RET ;退出;-;BCD转换子程序,入口值A,出口值BCD_GE,BCD_SH;-BCD: MOV B,#10 ;送被除数 DIV AB ;除法运算 MOV BCD_SH,A ;商为十位BCD码 MOV BCD_GE,B ;余数为个位BCD码 RET ;退出;-;显示延时子程序,延时1ms;-DEL: MOV R5,#02DEL1: MOV R6,#250 DJNZ R6,$ DJNZ R5,DEL1 RET END另我还有一带温度测量的万年历的制作过程,主要则重于C语言的编程。如有兴趣可联系。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1