基于 51 单片机的双向晶闸管的导通实验实验环境: Proteus编程语言: 汇编编程环境: KEIL单片机: AT89C51晶振: 12MHz设计说明:本设计实现以下功能:1、 通过单片机控制晶闸管的触发信号,从而实现晶闸管的触发2、 通过七段数码管显示触发角大小3、 通过键盘操作调节晶闸管导通触发角,并控制显示的开关仿真图:图(1)仿真效果图图(2)交流电过零检测电路图(3)数码管连接电路图(4)晶闸管触发电路图(5)键盘连接电路图(6)单片机最小系统电路图(7)
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
系统总图部分源程序:
- ORG 000H
- AJMP MAIN
- ORG 0003H ;/外部中断 0 中断程序入口
- AJMP INT_0
- ORG 000BH
- AJMP TMR0
- ORG 001BH
- AJMP TMR1
- ORG 0040H ;/以上参看 51 单片机中断系统介绍
- MAIN: ACALL INIT;/调用初始化子程序。
- HERE: JNB FLAG1.7,HERE;/100ms 不到不进行键盘扫描
- CLRFLAG1.7;/清标志位
- HERE2:MOV A,P2;
- /1********有无按键扫描,
- ORL A,#70H;
- MOV P2,A
- MOV A,P2
- ANL A,#70H
- XRLA,#70H
- JZ NKEY;
- MOV KTEMP,A
- AJMP HERE
- NKEY: JB KTEMP.KEY0,KSET;/是 SET 键,转处理程
- AJMP KOUT;/以上键都不是,不处理
- KSET: INCSHIFT;/根据 SHIFT 的值做不同的处理
- SETB FLAG1.3;/按键状态标志位
- SETB FLAG1.6;/有键按下,开显示
- CLREX0 ; /停止触发
- MOV A,SHIFT
- CLRC
- SUBB A,#4;/SHIFT 的范围是 1~4,大于 4 归 0,即按四次 SET键保存设置退出按键模式
- JC KOUT
- MOV SHIFT,#0
- CLRFLAG1.3;
- MOV A,AERF;/将导通角转化为时间单位
- MOV R5,A
- MOV B,#9
- DIVAB
- MOV B,#2
- MUL AB
- MOV SCR,A
- SETB EX0
- AJMP KOUT
- DISOC:MOV A,SHIFT;/显示关程序,在按键调节状态无效
- JNZ KOUT
- CPLFLAG1.6
- AJMP KOUT
- KOUT: MOV KTEMP,#0;/每次按键的结束要清该单元
- AJMP SCRDIS;/1***************************
- KADD: MOV A,SHIFT;/加处理程序
- JZ KOUT
- CJNE A,#1,ADDT
- MOV R5,#1 ;/个位加 1
- AJMP KADD1
- ADDT: CJNE A,#2,ADDCON
- MOV R5,#10;/十位加 1
- AJMP KADD1
- ADDCON: MOV R5,#100;/百位加 1
- KADD1: MOV A,AERF
- CLRC
- ADDC A,R5
- MOV R5,A
- CLRC
- SUBB A,#170;/最大值检测
- JC KADD2
- MOV R5,#10
- KADD2: MOV AERF,R5
- AJMP KOUT
- SCRDIS: MOV A,AERF;/导通角显示处理,通过连续除 10,求的各位值
- MOV B,#10
- DIVAB
- MOV DIS3,B
- JB FLAG1.3,SHI;/按键状态所以位都显示,非按键状态,从左侧不是零的那一位开始显示
- JZ GEDIS
- SHI: MOV B,#10
- DIVAB
- MOV DIS2,B
- JB FLAG1.3,BAI
- JZ SHIDIS
- BAI: MOV B,#10
- DIVAB
- MOV DIS1,B
- JB FLAG1.3,QIAN
- JZ BAIDIS
- QIAN: MOV DIS0,A
- AJMP HERE;
- //;*******************
- GEDIS: MOV DIS2,#10;
- SHIDIS:MOV DIS1,#10
- BAIDIS:MOV DIS0,#10
- AJMP HERE;
- //;*************
- TMR0: PUSH PSW
- PUSH ACC
- DJNZ TM1T,RETIF;/定时时间到否?
- SETB P3.0;/导通晶闸管
- ACALL DELAY
- CLRP3.0;/导通后关闭导通电压
- CLRET0;/每周期只导通一次,故关闭定时器 0
- CLRTR0
- RETIF: POP ACC
- POP PSW
- RETI;
- //;************
- TMR1: PUSH PSW
- PUSH ACC
- MOV TH1,#0F0H
- MOV TL1,#60H;/恢复定时器 1 初值
- SETB RS0;/选择第二组 R 系列寄存器
- DJNZ KDLY,T1DIS;/键盘扫描定时检测
- MOV KDLY,#25
- SETB FLAG 1.7
- CPLFLAG 1.5;/闪烁用
- T1DIS: MOV P1,#00H;/每次更新显示数据前要清显示,以免花屏
- JNB FLAG1.6,RETIF1;/显示开关检测
- MOV DPTR,#LEDBTB;/查表
- MOV A,DSPC;DSPC //动态扫描位控制指针
- MOVC A,@A+DPTR
- MOV B,A
- MOV A,P2
- ANL A,#0F0H
- ORL A,B
- MOV P2,A
- JNB FLAG1.3,TMR11;/检测是否是按键状态,以决定是否进行闪烁显示
- MOV A,#4
- CLRC
- SUBB A,SHIFT
- CJNE A,DSPC,TMR11
- JNB FLAG1.5,TMR11
- MOV P1,#0;/闪烁,每 0.2 秒闪一次
- AJMP TMR12
- TMR11: MOV A,#DIS0
- ADD A,DSPC
- MOV R1,A
- MOV A,@R1
- MOV DPTR,#LEDTB
- MOVC A,@A+DPTR
- MOV P1,A
- TMR12: DEC DSPC
- JNB DSPC.7,RETIF1
- MOV DSPC,#3;/DSPC 范围是 0~3
- RETIF1: CLRRS0
- POP ACC
- POP PSW
- RETI
- LEDTB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H;
- LEDBTB: DB 14,13,11,7;/1*********** ;延时函数,用于满足晶闸管导通所需电流持续时间
- DELAY: MOV R7,#5
- DELAY1: MOV R6,#10
- DELAY2: DJNZ R6,DELAY2
- DJNZ R7,DELAY1
- RET;/1************;外部中断 0 中断处理程序,启动定时器 0,设置导通角
- INT_0: PUSH PSW
- PUSH ACC;/以上现场保护
- MOV TM1T,SCR;/scr存储的是导通角
- SETB ET0;/开定时器 0 中断
- SETB TR0;/开定时器 0
- POP ACC ;/以下恢复现场
- POP PSW
- RETI;
- //;**************
- INIT: MOV SP,#60H;/设置中断等现场保护的堆栈区
- MOV TMOD,#12H;/定时器 0 和 1 设置,此处定时器 0 设置为工作方式 2,定时器 1 为方式 1
- MOV TH0,#06H;12M //晶振,方式 2,定时 250us
- MOV TL0,#06H
- MOV TH1,#0F0H;/方式 1,定时 4ms,值由软件计算,也可以根据公式原理自己计算。
- MOV TL1,#60H
- MOV SCR,#2;/开机设置导通角
- MOV AERF,#0;
- MOV SHIFT,#0;/清零键盘移位单元
- SETB P3.3;/外部中断 0 端口置 1
- MOV FLAG1,#0;/清零标志单元
- SETB FLAG1.6;/置 1,开机显示数据
- SETB IT0;/下降沿中断
- SETB EX0;/开外部中断 0
- SETB ET1;/开定时器 1 中断
- SETB TR1;/开定时器 1
- SETB EA;/开总中断,此位不开,则所有中断无效
- RET
- END
复制代码
晶闸管触发电路.7z
(60.28 KB, 下载次数: 10)
|