基于 51 單片機的雙向晶閘管的導通實驗實驗環境: Proteus編程語言: 匯編編程環境: KEIL單片機: AT89C51晶振: 12MHz設計說明:本設計實現以下功能:1、 通過單片機控制晶閘管的觸發信號,從而實現晶閘管的觸發2、 通過七段數碼管顯示觸發角大小3、 通過鍵盤操作調節晶閘管導通觸發角,并控制顯示的開關仿真圖:圖(1)仿真效果圖圖(2)交流電過零檢測電路圖(3)數碼管連接電路圖(4)晶閘管觸發電路圖(5)鍵盤連接電路圖(6)單片機最小系統電路圖(7)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (36.56 KB, 下載次數: 70)
下載附件
2021-5-3 01:05 上傳
系統總圖部分源程序:
- 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)
2021-5-3 01:06 上傳
點擊文件名下載附件
|