Với sự tiến bộ của khoa học kỹ thuật, việc thu thập và chia sẽ thông tin đang được quan tâm, cải tiến liên tục. Giải pháp tốt nhất cho công việc trên là sử dụng mạng. Ngày nay rất có nhiều loại mạng khác nhau: mạng truyền dữ liệu nối tiếp dùng chuẩn RS-485, mạng LAN, WAN, mạng Ethernet, mạng Internet Hiện nay, mạng Internet là mạng tiên tiến nhất, chúng chia sẽ một lượng thông tin vô cùng lớn. Trong nội dung đề tài này tôi chỉ giới thiệu mạng truyền dữ liệu nối tiếp dùng chuẩn RS-485
1. Nhiệm vụ đề tài:
Mạng thu thập và xử lý dữ liệu từ các thiết bị sau:
 Đọc mã vạch: dùng vào việc quản lý thời gian nhân viên ra vào công ty
 Thermocouple: Thu thập và điều khiển nhiệt độ của lò nhiệt, do không có lò nhiệt, và sự đáp ứng chậm của nhiệt độ. Do thời gian bảo vệ luận văn không nhiều, nên không điều khiển thực tế mà chỉ thông qua mô phỏng, chương trình mô phỏng được thực hiện trên phần mềm Visual Basic
 Quang Báoùng để thông báo tin tức của công ty, chữ trên bảng thông báo thay đổi được. 
2. Thực Hiện:
 Thiết kế 3 kit AT89C51:
 Kit thu thập và điều khiển nhiệt độ:
- Điều khiển lò nhiệt, dùng điều kiển on-off, thông qua logic mờ
- Dùng cảm biến: Thermocouple 
- Hoạt động của lò nhiệt: bán tự động 
 Kit đọc mã vạch:
- Do không có thiết bị đọc mã vạch, dùng phím thay thế
- Mục đích: Kiểm tra thời gian nhân viên ra, vào công ty làm việc
 Kit quang báo:
- Dùng hiển thị thông báo, thông báo tin tức 
 Thiết kế chương trình điều khiển trên kit và PC
                
              
                                            
                                
            
 
            
                 113 trang
113 trang | 
Chia sẻ: lvcdongnoi | Lượt xem: 3333 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Mạng thu thập dữ liệu và quang báo, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
push	acc
CJNE	A,#3FH,T_NHAY_KEP
MOV	R0,#0
LAP_DAU_HOI:
MOV	A,R0
MOV	DPTR,#DAU_HOI
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_DAU_HOI
CALL	INC_DPTR
;************************************************** 
;* NHAY_KEP	*
;****************************************************
T_NHAY_KEP:
pop	acc
push	acc
CJNE	A,#22H,T_PHAY
MOV	R0,#0
LAP_NHAY_KEP:
MOV	A,R0
MOV	DPTR,#NHAY_KEP
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_NHAY_KEP
CALL	INC_DPTR
;********************************************************
;* PHAY	*
;********************************************************
T_PHAY:
pop	acc
push	acc
CJNE	A,#2CH,T_CHAM
MOV	R0,#0
LAP_PHAY:
MOV	A,R0
MOV	DPTR,#PHAY
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_PHAY
CALL	INC_DPTR
;********************************************************
;* CHAM	*
;********************************************************
T_CHAM:
pop	acc
push	acc
CJNE	A,#2EH,T_MO_NGOAC
MOV	R0,#0
LAP_CHAM:
MOV	A,R0
MOV	DPTR,#CHAM
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_CHAM
CALL	INC_DPTR
;********************************************************
;* MO_NGOAC	*
;********************************************************
T_MO_NGOAC:
pop	acc
push	acc
CJNE	A,#28H,T_DONG_NGOAC
MOV	R0,#0
LAP_MO_NGOAC:
MOV	A,R0
MOV	DPTR,#MO_NGOAC
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_MO_NGOAC
CALL	INC_DPTR
;********************************************************
;* DONG_NGOAC	*
;********************************************************
T_DONG_NGOAC:
pop	acc
push	acc
CJNE	A,#29H,T_SAO
MOV	R0,#0
LAP_DONG_NGOAC:
MOV	A,R0
MOV	DPTR,#DONG_NGOAC
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_DONG_NGOAC
CALL	INC_DPTR
;********************************************************
;* SAO	*
;********************************************************
T_SAO:
pop	acc
push	acc
CJNE	A,#2AH,T_TIM
MOV	R0,#0
LAP_SAO:
MOV	A,R0
MOV	DPTR,#SAO
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_SAO
CALL	INC_DPTR
;*******************************************************
;* TIM	 *
;*******************************************************
T_TIM:
pop	acc
push	acc
CJNE	A,#7BH,T_RO
MOV	R0,#0
LAP_TIM:
MOV	A,R0
MOV	DPTR,#TIM
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_TIM
CALL	INC_DPTR
;*******************************************************
;* RO	 *
;*******************************************************
T_RO:
pop	acc
push	acc
CJNE	A,#7CH,T_RO_CONG
MOV	R0,#0
LAP_RO:
MOV	A,R0
MOV	DPTR,#RO
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_RO
CALL	INC_DPTR
;*******************************************************
;* RO_CONG	 *
;*******************************************************
T_RO_CONG:
pop	acc
push	acc
CJNE	A,#7DH,T_NONEWORDS
MOV	R0,#0
LAP_RO_CONG:
MOV	A,R0
MOV	DPTR,#RO_CONG
MOVC	A,@A+DPTR	
CJNE	R0,#5,LAP_RO_CONG
CALL	INC_DPTR
;*******************************************************
;* NONEWORDS	 *
;*******************************************************
T_NONEWORDS:
pop	acc
JMP	WORD_CON
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;*Tro den data ke cua bang SaveWords	
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
INC_DPTR:
INC	R2
CJNE	R2,#00H,CON_INC_DPTR
INC	R1
CON_INC_DPTR:
MOV	DPH, R1
MOV	DPL, R2
;JMP	WORD_CON
RET
;***************************************
; DISLED:
;***************************************
;LOOP:
DISLED:
	MOV	R0, #0
	MOV	3AH, #5
	MOV	3BH, #0AH
	MOV	3CH, #0FH
	MOV	3DH, #14H
LOOP1:
; Xuat led
	MOV	DPTR, #0800H	; Tai addr 1CE0
	MOV	3EH, R0
	CALL	INCDPTR
	MOV	DPTR, #0A000H	; Addr 1 tu trai sang
	MOVX	@DPTR, A
	MOV	R7, 3AH
	MOV	3EH, R7
	MOV	DPTR, #0800H	; Tai addr 1CE0
	CALL	INCDPTR
	MOV	DPTR, #8000H	; Addr 1 tu trai sang
	MOVX	@DPTR, A
	INC	R7
	MOV	3AH, R7
	MOV	R7, 3BH
	MOV	3EH, R7
	MOV	DPTR, #0800H	; Tai addr 1CE0
	CALL	INCDPTR
	MOV	DPTR, #6000H	; Addr 1 tu trai sang
	MOVX	@DPTR, A
	INC	R7
	MOV	3BH, R7
	MOV	R7, 3CH
	MOV	3EH, R7
	MOV	DPTR, #0800H	; Tai addr 1CE0
	CALL	INCDPTR
	MOV	DPTR, #4000H	; Addr 1 tu trai sang
	MOVX	@DPTR, A
	INC	R7
	MOV	3CH, R7
	MOV	R7, 3DH
	MOV	3EH, R7
	MOV	DPTR, #0800H	; Tai addr 1CE0
	CALL	INCDPTR
	MOV	DPTR, #2000H	; Addr 1 tu trai sang
	MOVX	@DPTR, A
	INC	R7
	MOV	3DH, R7
; COT
	MOV	A, R0
	MOV	DPTR, #COT
	MOVC	A, @A+DPTR
	MOV	DPTR, #0C000H
	MOVX	@DPTR, A
	;CALL	DELAY_3ms
;DELAY_3ms:
	MOV	R1, #8
NHAN:	
	MOV	R7, #250
	DJNZ	R7, $
	DJNZ	R1, NHAN
	;RET	; Xong ScanCot
	INC	R0
	CJNE	R0, #5, LOOP1
	CALL	LEDRTI
	RET
;***************************************
; LEDRTI:
;***************************************
LEDRTI:
	MOV	30H, #01H	
	MOV	31H, #00H
	MOV	B, 41H
	mov	R2, 40H
	mov	R3, 41H
	CALL	CON_HIF
RET
CON_HIF:
	MOV	DPL, 41H
	MOV	DPH, 40H
	MOVX	A, @DPTR
	CALL	DEC_DPTR
	MOVX	@DPTR, A	
	MOV	R3, 31H
	CJNE	R6, #0FFH,HI_FF 
	INC	40H
HI_FF:
	INC	B
	MOV	41H, B
;SS
	MOV	A, R3
	MOV	53H, B
	MOV	R6, B
	CJNE	R6, #0FFH, SSFF	
	MOV	41H, #0FFH
	MOV	40H, #08H
SSFF:	CJNE	A, 43H, EXITSS	
	MOV	A, R2
	MOV	42H, 40H	;CO TROUB
	CJNE	A, 42H, EXITSS
	MOV	DPL, #0FFH
	MOV	DPH, #08H
	MOVX	A, @DPTR
	MOV	DPL, R4
	MOV	DPH, R5
	MOVX	@DPTR, A
	JMP	SHIFTONE
EXITSS:
	JMP	CON_HIF
SHIFTONE:	
	MOV	DPL, R2
	MOV	DPH, R3
	MOVX	A, @DPTR
	CALL	DEC_DPTR
	MOVX	@DPTR, A
RET	
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DEC_DPTR:
	MOV	R5, DPL
	MOV	R4, DPH	
	DEC	R5
	MOV	DPL, R5
	CJNE	R5, #0FFH, EXIT_DEC
	MOV	R5, #0FFH
	DEC	R4
	MOV	DPL, R5
	MOV	DPH, R4
EXIT_DEC:
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
INCDPTR:
	MOV	A, #0
CONIC:
	CJNE	A, 3EH, NCDPRAB
	MOVX	A, @DPTR
	RET
NCDPRAB:
	INC	DPTR
	INC	A
	JMP	CONIC
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;++++++++++++++++++++++++++++++++++++++++++++
;**************************
; Bang co dinh chua trong ROM
;**************************
COT:	DB	0FEH, 0FDH, 0FBH, 0F7H, 0EFH
K_TRANG:	DB	00H, 00H, 00H, 00H, 00H
SO_0:	DB	3EH, 41H, 41H, 41H, 3EH	
SO_1:	DB	44H, 42H, 7FH, 40H, 40H
SO_2:	DB	32H, 49H, 49H, 49H, 46H
SO_3:	DB	22H, 41H, 49H, 49H, 36H
SO_4:	DB	0FH, 08H, 08H, 08H, 7FH
SO_5:	DB	4FH, 49H, 49H, 49H, 79H
SO_6:	DB	3FH, 49H, 49H, 49H, 32H
SO_7:	DB	00H, 01H, 01H, 01H, 7FH
SO_8:	DB	36H, 49H, 49H, 49H, 36H
SO_9:	DB	26H, 49H, 49H, 49H, 3EH
CHU_A:	DB	7EH, 09H, 09H, 09H, 7EH
CHU_B:	DB	7EH, 49H, 49H, 49H, 36H
CHU_C:	DB	3EH, 41H, 41H, 41H, 22H
CHU_D:	DB	7FH, 41H, 41H, 41H, 3EH
CHU_E:	DB	7FH, 49H,49H, 49H, 00H
CHU_F:	DB	7FH, 09H, 09H, 09H, 00H
CHU_G:	DB	3EH, 41H, 49H, 49H, 3AH
CHU_H:	DB	7FH, 08H, 08H, 08H, 7FH
CHU_I:	DB	00H, 41H, 7FH, 41H, 00H
CHU_J:	DB	20H, 41H, 3FH, 41H, 20H
CHU_K:	DB	7FH, 08H, 14H, 22H, 41H
CHU_L:	DB	7FH, 40H, 40H, 40H, 40H
CHU_M:	DB	7FH, 02H, 04H, 02H, 7FH
CHU_N:	DB	7FH, 02H, 04H, 08H, 7FH
CHU_O:	DB	3EH, 41H, 41H, 41H, 3EH
CHU_P:	DB	7FH, 09H, 09H, 09H, 06H
CHU_Q:	DB	3EH, 41H, 51H, 61H, 7EH
CHU_R:	DB	7FH, 09H, 19H, 29H, 46H
CHU_S:	DB	26H, 49H, 49H, 49H, 36H
CHU_T:	DB	01H, 01H, 7FH, 01H, 01H
CHU_U:	DB	3FH, 40H, 40H, 40H, 3FH
CHU_V:	DB	1FH, 20H, 40H, 20H, 1FH
CHU_W:	DB	1FH, 20H, 78H, 20H, 1FH
CHU_X:	DB	22H, 14H, 18H, 14H, 22H
CHU_Y:	DB	27H, 48H, 48H, 48H, 3FH
CHU_Z:	DB	22H, 32H, 2AH, 26H, 22H
HAI_CHAM:	DB	00H, 00H, 36H, 00H, 00H
CHAM_PHAY:	DB	00H, 00H, 56H, 30H, 00H
NHO_HON:	DB	00H, 08H, 14H, 22H, 00H
BANG:	DB	00H, 14H, 14H, 14H, 00H
LON_HON:	DB	00H, 22H, 14H, 08H, 00H
DAU_HOI:	DB	06H, 01H, 39H, 09H, 06H
NHAY_KEP:	DB	00H, 04H, 02H, 04H, 02H
PHAY:	DB	00H, 50H, 30H, 00H, 00H
CHAM:	DB	60H, 60H, 60H, 00H, 00H
MO_NGOAC:	DB	3EH, 4EH, 00H, 00H, 00H
DONG_NGOAC:	DB	00H, 00H, 00H, 4EH, 3EH
SAO:	DB	2AH, 14H, 3EH, 14H, 2AH
TIM:	DB	0CH, 12H, 24H, 12H, 0CH	; Shift {, 7B
RO:	DB	08H, 24H, 22H, 24H, 08H	; Shift | , 7C
RO_CONG:	DB	08H, 2CH, 3EH, 2CH, 08H	; Shift } , 7D
;=======================================
;==========
END
; Doan chuong trinh tren kit thu thap nhiet do
; Doan chuong trinh an phim va truyen data len PC giong
; kit Nhan Vien
;~~~~~~
; Gia tri tam
;~~~~~~~~~~~
TEMP_UNIT	EQU	30H
TEMP_TEN	EQU	31H
TEMP_HUNDR	EQU	32H
TEMP_THOU	EQU	33H
TEMP_POL	EQU	34H
THOUHUND	EQU	35H
TENUNIT	EQU	36H
;*************************************
; Khoi dong 8255
;*************************************
	MOV	DPTR, #0A003H
	MOV	A, #10000000B
	MOVX	@DPTR, A
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; SAVEDATA: Lay gia tri tu 8255 luu vao o nho tam, xu ly
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	MOV	DPTR, #0A000H
	MOV	A, #12H
	MOVX	@DPTR,A	; Tro Port A
	MOV	TEMP_UNIT, A
	;MOV	TEMP_UNIT, #12H
	MOV	DPTR, #0A001H
	MOV	A, #02H
	MOVX	@DPTR, A	; Tro Port B
	MOV	TEMP_TEN, A
	;MOV	TEMP_TEN, #99H
	MOV	DPTR, #0A002H
	MOV	A, #78H
	MOVX	@DPTR, A	; ; Tro Port C
	MOV	TEMP_HUNDR, A
	;MOV	TEMP_HUNDR, #30H
	CALL	SETTLEDATA
	MOV	A, TEMP_POL
	CJNE	A, #01H, ADDTOREAL
	CALL	CONV_NEG	; Co cuc tinh
	INC	R2
	MOV	TENUNIT, R2
	MOV	THOUHUND, R3
	JMP	OUTLED
ADDTOREAL:
	CALL	CONV_POS
	MOV	TENUNIT, R2
	MOV	THOUHUND, R3
OUTLED:
;****************************************
; OUTLED:
;****************************************
	MOV	A, TENUNIT
	ANL	A, #0FH
	MOV	DPTR, #TAB7SEG
	MOVC	A, @A+DPTR
	MOV	DPTR, #4000H
	MOVX	@DPTR, A
	MOV	DPTR, #6000H
	MOV	A, #01H
	MOVX	@DPTR, A
	CALL	DELAY
	MOV	A, TENUNIT
	SWAP	A
	ANL	A, #0FH
	MOV	DPTR, #TAB7SEG
	MOVC	A, @A+DPTR
	MOV	DPTR, #4000H
	MOVX	@DPTR, A
	MOV	DPTR, #6000H
	MOV	A, #02H
	MOVX	@DPTR, A
	CALL	DELAY
	MOV	A, THOUHUND
	ANL	A, #0FH
	MOV	DPTR, #TAB7SEG
	MOVC	A, @A+DPTR
	MOV	DPTR, #4000H
	MOVX	@DPTR, A
	MOV	DPTR, #6000H
	MOV	A, #04H
	MOVX	@DPTR, A
	CALL	DELAY
	MOV	A, THOUHUND
	SWAP	A
	ANL	A, #0FH
	MOV	DPTR, #TAB7SEG
	MOVC	A, @A+DPTR
	MOV	DPTR, #4000H
	MOVX	@DPTR, A
	MOV	DPTR, #6000H
	MOV	A, #08H
	MOVX	@DPTR, A
	CALL	DELAY
JMP	OUTLED
;***************************************
; SETTLEDATA: Doan chuong trinh xu ly so
;***************************************
SETTLEDATA:
;~~~~~~~~~
; Xu ly hang don vi
;~~~~~~~~~~~~~~~~
	MOV	B,TEMP_UNIT	; Mov hang don vi vao B
	ANL	B, #7FH	; Che bit AB(Hang nghin)
	MOV	R0, #0	; Bat dau kiem tra hang don vi la so may
LOOP_UNIT:	
	MOV	A, R0
	MOV	DPTR, #TAB7SEG
	MOVC	A, @A+DPTR
	CJNE	A, B, CHECK_UNIT	; So sanh voi so trong bang, neu bang, gia tri do
	MOV	A, R0	; chinh la gia tri R0
	MOV	R2, A	; Mov donvi vao R2
	JMP	SETTLE_TEN
CHECK_UNIT:
	INC	R0
	JMP	LOOP_UNIT	
;~~~~~~~~~
; Xu ly hang chuc
;~~~~~~~~~~~~~~~~	
SETTLE_TEN:
	MOV	B,TEMP_TEN	; Mov hang chuc vao B
	ANL	B, #7FH	; Che bit POL(Cuc Tinh)
	MOV	R0, #0	; Bat dau kiem tra hang chuc la so may
LOOP_TEN:	
	MOV	A, R0
	MOV	DPTR, #TAB7SEG
	MOVC	A, @A+DPTR
	CJNE	A, B, CHECK_TEN	; So sanh voi so trong bang, neu bang, gia tri do
	;MOV	UNIT, R0	; chinh la gia tri R0
	MOV	A, R0
	;ANL	A, #0FH
	SWAP	A	; A chua hang chuc, nam o byte cao
	CLR	C	; Cac so tu 0 - 9
	ADD	A, R2	; R2 chua hang don vi, nam o byte thap	
;**************************************
	MOV	R2, A	; R2 chua hang chuc va hang don vi
;**************************************
	JMP	SETTLE_HUNDR
CHECK_TEN:
	INC	R0
	JMP	LOOP_TEN
;~~~~~~~~~
; Xu ly hang tram
;~~~~~~~~~~~~~~~~	
SETTLE_HUNDR:
	MOV	B,TEMP_HUNDR	; Mov hang tram vao B
	ANL	B, #7FH	; 
	MOV	R0, #0	; Bat dau kiem tra hang tram la so may
LOOP_HUNDR:	
	MOV	A, R0
	MOV	DPTR, #TAB7SEG
	MOVC	A, @A+DPTR
	CJNE	A, B, CHECK_HUNDR	; So sanh voi so trong bang, neu bang, gia tri do
	MOV	A, R0	; chinh la gia tri R0
	MOV	R3, A	; R3 chua hang tram, nam chi o byte thap(do 0-9)
	JMP	SETTLE_THOU
CHECK_HUNDR:
	INC	R0
	JMP	LOOP_HUNDR
;~~~~~~~~
; Xu ly hang ngan
;~~~~~~~~~~~~~~
;Lay data tu o nho tam don vi (TEMP_UNIT)
SETTLE_THOU:
	MOV	A, TEMP_UNIT
	ANL 	A, #80H
	JNZ	THOU	; do ngo ra cua 7107 tich cuc thap
	MOV	TEMP_THOU, #1	;Neu A =0 thi co hang nghin(save vao THOU =1)
	MOV	A, #00010000B
	ADD	A, R3
;*******************************************
	 MOV	R3, A
;*******************************************
	JMP	SETTLE_POL
THOU:
	MOV	TEMP_THOU, #0	;Neu A = 1 thi khong co hang nghin
;~~~~~~~
; Kiem tra cuc tinh
;~~~~~~~~~~~~~
;Lay data tu o nho tam hang chuc
SETTLE_POL:
	MOV	A, TEMP_TEN
	ANL	A, #80H
	JNZ	POL	; do ngo ra cua 7107 tich cuc thap
	MOV	TEMP_POL, #1	; A= 0 co cuc tinh ( o nho tam POL =1 )
	RET
POL:
	MOV	TEMP_POL, #0
	RET
;*************************************
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Tru 2 so thap phan 4 chu so : 
; R3 chua hang nghin va hang tram, R2 chua hang chuc va hang don vi( none settle)
; R3:R2=1A:9A - INC(R3):R2	. Day chinh la gia tri thuc ngo vao Analog
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ;REAL_IN:
CONV_NEG:
	MOV	A, R2
	ANL	A, #01H
	JNZ	SS_1mV
	INC	R2
SS_1mV:	
	MOV	A, #9AH
	SUBB	A, R2
	MOV	R2, A
	INC	R3
	MOV	A, #1AH
	SUBB	A, R3
	MOV	R3,A
	RET
;**************************************
;~~~~~~~~~~~~~~~~~~~~~~
; Cong 2 so thap phan 4 chu so
; R3:R2=20:00+R3:R2
;~~~~~~~~~~~~~~~~~~~~~~
CONV_POS:
	MOV	A, #00H
	ADD	A, R2
	MOV	R2, A
	MOV	A, #20H
	ADD	A, R3
	MOV	R3, A
	RET
;**********************************
DELAY:
	MOV	R2,#6
LAP:	MOV	R3,#250
	DJNZ	R3,$
	DJNZ	R2,LAP
	RET
TAB7SEG:
	DB	40H, 79H, 24H, 30H, 19H, 12H, 02H, 78H, 00H, 10H
	DB	08H, 03H, 46H, 21H, 06H, 0EH
END
Caáu truùc chöông trình :
Chöông trình treân form Main:
Option Explicit
Dim i%
 Dim hMenu, hSubMenu, menuID, x
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" _
 (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" _
 (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" _
 (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _
 ByVal wIDNewItem As Long, ByVal lpString As String) As Long
Private Declare Function SetMenuItemBitmaps Lib "user32" _
 (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _
 ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
Private Declare Function GetMenuCheckMarkDimensions Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" _
 (ByVal hwnd As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" _
 (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" _
 (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" _
 (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" _
 (ByVal nWidth As Long, ByVal nHeight As Long, _
 ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function PatBlt Lib "gdi32" _
 (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
 ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetSystemMetrics Lib "user32" _
 (ByVal nIndex As Long) As Long
Private Sub abLOK_Click()
On Error GoTo None
 Close #2
 SelectFile
 DataFile = cdl.FileName
 If optNSave(1).Value = True Then
 If optNOver(0).Value = True Then
 Open DataFile For Append As #2
 Else
 Open DataFile For Output As #2
 End If
 End If
None:
End Sub
Private Sub abNOK_Click()
On Error GoTo None
 Close #1
 SelectFile
 DataFile = cdl.FileName
 If optNSave(1).Value = True Then
 If optNOver(0).Value = True Then
 Open DataFile For Append As #1
 Else
 Open DataFile For Output As #1
 End If
 End If
None:
End Sub
Private Sub abNVOK_Click()
On Error GoTo None
 Close #3
 SelectFile
 DataFile = cdl.FileName
 If optNSave(1).Value = True Then
 If optNOver(0).Value = True Then
 Open DataFile For Append As #3
 Else
 Open DataFile For Output As #3
 End If
 End If
None:
End Sub
Private Sub Form_Load()
 hMenu = GetMenu(hwnd)
 hSubMenu = GetSubMenu(hMenu, 0) '1 for "Other" menu etcetera
 menuID = GetMenuItemID(hSubMenu, 2)
 x = SetMenuItemBitmaps(hMenu, menuID, 0, img.ListImages(2).Picture, 0&)
 Main.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
 optNSave(1).Value = True
 optLSave(1).Value = True
 optNVSave(1).Value = True
ForceKey
tmrTran.Enabled = False
QLNhanVien.tmrNhanID.Enabled = False
End Sub
Public Sub IniComPort()
 Dim PortNumber, Baund As String
 If MSC.PortOpen = True Then
 M = MsgBox(" Coång ñang môû ", vbOKOnly, "SelectCom")
 MSC.PortOpen = False
 End If
 PortNumber = Right(cboChonCong.Text, 1)
 MSC.CommPort = PortNumber
 Baund = CboBaudrate.Text
 MSC.Settings = Baund + ",N,8,1"
 MSC.InputLen = 0
 'MSC.InputLen = 1 'Doc mot byte tai thoi diem mo port
 MSC.InBufferSize = 256
 'luu du lieu vao duoi dang text
 MSC.InputMode = comInputModeText
 MSC.Handshaking = comNone
 MSC.OutBufferSize = 256
 MSC.EOFEnable = False
 MSC.RThreshold = 0
 MSC.SThreshold = 0
End Sub
Private Sub ForceKey()
 cmd1ChonCong.Visible = False
 Main.Move _
 (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
 TabMain.Tab = 1
 'NewNode
End Sub
Private Sub CboBaudrate_DropDown()
 If MSC.PortOpen = False Then
 GoTo thoat
 Else
 cmd1ChonCong_Click
thoat:
 End If
End Sub
Private Sub cboChonCong_DropDown()
 If MSC.PortOpen = False Then
 GoTo thoat
 Else
 cmd1ChonCong_Click
thoat:
 End If
End Sub
Private Sub cboDataBit_dropdown()
 If MSC.PortOpen = False Then
 GoTo thoat
 Else
 cmd1ChonCong_Click
thoat:
 End If
End Sub
Private Sub cboParity_DropDown()
 If MSC.PortOpen = False Then
 GoTo thoat
 Else
 cmd1ChonCong_Click
thoat:
 End If
End Sub
Private Sub cboStopBit_DropDown()
 If MSC.PortOpen = False Then
 GoTo thoat
 Else
 cmd1ChonCong_Click
thoat:
 End If
End Sub
Private Sub ebThemNode_Click()
'CboNode.AddItem (" asd")
On Error GoTo None
 frmThemNode.Show
None:
End Sub
Private Sub imgOpenPort_Click()
 MSC.PortOpen = False
 imgOpenPort.Visible = True
 imgClosePort.Visible = True
 cmd1ChonCong.Visible = False
 cmdChonCong.Visible = True
 DSbar
End Sub
Private Sub imgClosePort_Click()
MSC.PortOpen = True
imgOpenPort.Visible = True
imgClosePort.Visible = False
cmd1ChonCong.Visible = True
cmdChonCong.Visible = False
ESbar
End Sub
Private Sub cmdChonCong_Click()
 On Error GoTo Quit
 'QLNhanVien.tmrNhanID = True
 IniComPort
 MSC.PortOpen = True
 cmd1ChonCong.Visible = True
 cmdChonCong.Visible = False
 ESbar
 imgClosePort.Visible = False
 imgOpenPort.Visible = True
 Exit Sub
Quit:
M = MsgBox("COM Busy ... ", vbOKOnly, "Select other COM ")
 'cmd1ChonCong_Click
End Sub
Private Sub cmd1ChonCong_Click()
 QLNhanVien.tmrNhanID = False
 MSC.PortOpen = False
 cmdChonCong.Visible = True
 cmd1ChonCong.Visible = False
 imgOpenPort.Visible = False
 imgClosePort.Visible = True
 DSbar
End Sub
Private Sub ESbar()
 With SBar
 With .Panels(1)
 .Text = " Connecting ..."
 .ToolTipText = " Ñang Keát Noái "
 End With
 With .Panels(2)
 .Text = " PortOpen "
 .ToolTipText = " Coång Ñaõ Môû "
 End With
 End With
End Sub
Private Sub DSbar()
 With SBar
 With .Panels(1)
 .Text = " DisConnecting "
 .ToolTipText = " Chöa Keát Noái "
 End With
 With .Panels(2)
 .Text = " ClosePort "
 .ToolTipText = " Coång Ñang Ñoùng "
 End With
 End With
End Sub
Private Sub mnuAddNodes_Click()
 frmNodes.Show
End Sub
Private Sub mnuAdd_Click()
 frmThemNode.Show
 Main.Hide
End Sub
Private Sub mnuLed_Click()
 Led.Show
 Main.Hide
End Sub
Private Sub mnuMNhanVien_Click()
 QLNhanVien.Show
 Main.Hide
End Sub
Private Sub mnuNhiet_Click()
 Nhiet.Show
 Main.Hide
End Sub
Private Sub mnunodes_Click()
 On Error GoTo NoneOpenComm
 If MSC.PortOpen = False Then
 M = MsgBox(" Baïn Chöa Môû Coång ", vbOKOnly, "Môû Coång")
 End If
NoneOpenComm:
End Sub
Private Sub mnuNoiDung_Click()
 frmHelp.Show
 Main.Hide
End Sub
Private Sub mnuRun_Click()
 If MSC.PortOpen = False Then
 M = MsgBox(" Baïn Chöa Môû Coång ", vbOKOnly, "Môû Coång")
 Exit Sub
 End If
End Sub
Private Sub mnuStart_Click()
 'tmrTran.Enabled = True
 QLNhanVien.tmrNhanID = True
End Sub
Private Sub mnuStop_Click()
 MSC.PortOpen = False
 imgOpenPort.Visible = True
 imgClosePort.Visible = True
 cmd1ChonCong.Visible = False
 cmdChonCong.Visible = True
 DSbar
End Sub
Private Sub cmdChonAddr_Click()
 AddrNhiet = Left(CboAddrNhiet.Text, 3)
 AddrLed = Left(CboAddrLed.Text, 3)
 AddrMaVach = Left(CboAddrMaVach.Text, 3)
'Text2.Text = Str(Asc(AddrNhiet))
If AddrNhiet = AddrLed Or AddrNhiet = AddrMaVach Then
 M = MsgBox("Baïn Choïn Truøng Ñòa Chæ, Môøi Baïn Choïn Laïi", vbOKOnly, "Select Again")
End If
If AddrLed = AddrMaVach Then
 M = MsgBox("Baïn Choïn Truøng Ñòa Chæ, Môøi Baïn Choïn Laïi", vbOKOnly, "Select Again")
End If
End Sub
Private Sub WriteResultsToFile()
'Save received data and time in a file.
Dim count As Integer
For count = 1 To NumNode
 'Skip if the node isn't selected (active) on the Nodes form.
 If Nodes.Active(count) = 1 Then
 Write #2, _
 count, _
 Nodes.LastAccess(count), _
 Nodes.DataOut1(count), _
 Nodes.DataOut2(count), _
 Nodes.DataIn1(count), _
 Nodes.DataIn2(count), _
 Nodes.Status(count)
 End If
Next count
End Sub
Sub SelectFile()
 With Main.cdl
 .Filter = "All files (*.txt)|*.txt"
 .FileName = DataFile
 .Flags = cdlOFNPathMustExist
 .Flags = cdlOFNOverwritePrompt
 .Flags = cdlOFNCreatePrompt
'Get the selected file from the common dialog box.
 .ShowOpen
 End With
End Sub
Private Sub mnuLSaveAs_Click()
 mnuLSave_Click
End Sub
Private Sub mnuLSave_Click()
 Dim n As Integer
 On Error GoTo ErSave
 If txtNhapChu.Text = "" Then
 M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty")
 Else
lap:
 cdlQLNhanVien.Filter = "Text files (*.TXT)|*.TXT"
 cdlQLNhanVien.FileName = ""
 cdlQLNhanVien.Action = 2
 'Hay cdl.ShowSave
 If cdlQLNhanVien.FileName "" Then
 Source = cdlQLNhanVien.FileName
 If Dir(cdlQLNhanVien.FileName) "" Then
 n = MsgBox("Do you want to replace the existing " + _
 cdlQLNhanVien.FileName + " ?", vbYesNoCancel + vbQuestion, "Save")
 Select Case n
 Case 6:
 Save
 ts.Write (txtNhapChu.Text)
 ts.Close
 Case 7:
 GoTo lap
 End Select
 Else
 Save
 ts.Write (txtNhapChu.Text)
 ts.Close
 End If
 End If
 End If
ErSave:
 Exit Sub
End Sub
Private Sub mnuThoat_Click()
 Unload Me
 'cmdChonCong_Click
End Sub
Private Sub optLSave_Click(Index As Integer)
 If optLSave(0).Value = True Then
 optLSave(1).Value = False
 optLOver(0).Enabled = False
 optLOver(1).Enabled = False
 abLOK.Enabled = False
 Else
 optLSave(1).Value = True
 optLOver(0).Enabled = True
 optLOver(1).Enabled = True
 optLOver(0).Value = True
 abLOK.Enabled = True
 End If
End Sub
Private Sub optNSave_Click(Index As Integer)
 If optNSave(0).Value = True Then
 optNSave(1).Value = False
 optNOver(0).Enabled = False
 optNOver(1).Enabled = False
 abNOK.Enabled = False
 Else
 optNSave(1).Value = True
 optNOver(0).Enabled = True
 optNOver(1).Enabled = True
 optNOver(0).Value = True
 abNOK.Enabled = True
 End If
End Sub
Private Sub optNVSave_Click(Index As Integer)
 If optNVSave(0).Value = True Then
 optNVSave(1).Value = False
 optNVOver(0).Enabled = False
 optNVOver(1).Enabled = False
 abNVOK.Enabled = False
 Else
 optNVSave(1).Value = True
 optNVOver(0).Enabled = True
 optNVOver(1).Enabled = True
 optNVOver(0).Value = True
 abNVOK.Enabled = True
 End If
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
 If MSC.PortOpen = False Then
 M = MsgBox(" Baïn Chöa Môû Coång ", vbOKOnly, "Môû Coång")
 GoTo NoneOpenComm
 End If
 Select Case Button.Key
 Case "Nhiet"
 mnuNhiet_Click
 Case "Led"
 mnuLed_Click
 Case "NhanVien"
 mnuMNhanVien_Click
 Case "Add"
 mnuAdd_Click
 Case "Play"
 mnuStart_Click
 Case "Stop"
 mnuStop_Click
 Case "Help"
 mnuNoiDung_Click
 End Select
NoneOpenComm:
End Sub
‘**************************************************************
Form Led
Dim i As Integer
Private Sub Command1_Click()
 Dim S As Double
 Main.MSC.PortOpen = False
 S = Shell("E:\Send1.exe")
End Sub
Private Sub Form_Load()
 Led.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Private Sub LText1_Change()
On Error GoTo None
 LText2.Text = " "
 i = Len(LText1.Text)
 LText2.Text = Mid(UCase(LText1.Text), i, 1)
 Main.MSC.Output = LText2.Text
None:
End Sub
Private Sub cmdHienThi_Click()
 'Close #2
 Main.MSC.Output = "$"
 LText2.Text = " "
 'Write #2, LText1.Text
End Sub
Private Sub ebClear_Click()
 LText1.Text = " "
 LText2.Text = ""
End Sub
Private Sub mnuLMain_Click()
 Main.Show
 Led.Hide
End Sub
Private Sub mnuLNhanVien_Click()
 QLNhanVien.Show
 Led.Hide
End Sub
Private Sub mnuLNhiet_Click()
 Nhiet.Show
 Led.Hide
End Sub
Private Sub mnuLOpen_Click()
 On Error GoTo ErOpen
 With Main.cdl
 .Filter = "Text Files (*.TXT)|*.TXT|"
 .FilterIndex = 2
 .ShowOpen
 'Hay cdl.Action = 1
 Set txtfile = tsv.GetFile(.FileName)
 Set ts = txtfile.OpenAsTextStream(ForReading)
 LText1.Text = ts.ReadAll
 ts.Close
 End With
ErOpen:
 Exit Sub
End Sub
Private Sub mnuLSave_Click()
 Dim n As Integer
 On Error GoTo ErSave
 If LText1.Text = "" Then
 M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty")
 Else
lap:
 Main.cdl.Filter = "Text files (*.TXT)|*.TXT"
 Main.cdl.FileName = ""
 Main.cdl.Action = 2
 'Hay cdl.ShowSave
 If Main.cdl.FileName "" Then
 Source = Main.cdl.FileName
 If Dir(Main.cdl.FileName) "" Then
 n = MsgBox("Do you want to replace the existing " + _
 Main.cdl.FileName + " ?", vbYesNoCancel + vbQuestion, "Save")
 Select Case n
 Case 6:
 Save
 ts.Write (LText1.Text)
 'Write #2, LText1.Text
 ts.Close
 Case 7:
 GoTo lap
 End Select
 Else
 Save
 ts.Write (LText1.Text)
 'Write #2, LText1.Text
 ts.Close
 End If
 End If
 End If
ErSave:
 Exit Sub
End Sub
Private Sub mnuLThoaùt_Click()
 Unload Me
 Main.Show
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
 Select Case Button.Key
 Case "Save"
 mnuLSave_Click
 Case "Open"
 mnuLOpen_Click
 Case "Main"
 mnuLMain_Click
 Case "Nhiet"
 mnuLNhiet_Click
 Case "nhanvien"
 mnuLNhanVien_Click
 End Select
End Sub
‘*************************************************************
From Quan ly nhan vien
Option Explicit
Private Type typID
 ID(0 To numID) As Double
 NameNV(0 To numID) As String
End Type
Dim NhanVien As typID
Dim ID1, ID2, ID3, ID4, ID5, ID6, ID7, ID8, ID9, ID10, ID11, ID12, ID13, ID14, ID15 As String
Private Sub cmdTimerID_Click()
tmrNhanID.Enabled = True
End Sub
Private Sub Form_Load()
 DisIni
 DisUpdate
 QLNhanVien.Move _
 (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
 'tmrNhanID.Enabled = True
End Sub
Private Sub DisIni()
 With MSNVTime
 .TextMatrix(0, 0) = " Maõ Soá (ID)"
 .TextMatrix(0, 1) = " Hoï vaø Teân"
 .TextMatrix(0, 2) = " Giôø Laøm"
 End With
End Sub
Private Sub DisUpdate()
 For i = 1 To numID
 NhanVien.ID(i) = FindNhanVien.MSHFlexGrid1.TextArray(2 * i)
 ' NhanVien.NameNV(i) = FindNhanVien.MSHFlexGrid1.TextArray(i + 2)
 Next i
 For j = 1 To numID
 'NhanVien.ID(i) = FindNhanVien.MSHFlexGrid1.TextArray(2 * i)
 NhanVien.NameNV(j) = FindNhanVien.MSHFlexGrid1.TextArray(2 * j + 1)
 Next j
End Sub
Private Sub Form_Resize()
 With Me.MSNVTime
 '.Top = 1000
 '.Left = 500
 '.Width =
 .ColWidth(0) = .Width * 0.2
 .ColWidth(1) = .Width * 0.4
 .ColWidth(2) = .Width * 0.365
 End With
End Sub
Private Sub mnuGioTrongNgay_Click()
 QLGioTrongNgay.Show
 QLNhanVien.Hide
End Sub
Private Sub mnuQLAddr_Click()
 Main.TabMain.Tab = 2
 Main.Show
 QLNhanVien.Show
End Sub
Private Sub mnuQLAppend_Click()
 On Error GoTo None
 SelectFile
 DataFile = Main.cdl.FileName
 Open DataFile For Append As #3
None:
 M = MsgBox("Baïn Khoâng Save ?", vbOKCancel, "Quaûn Lyù Nhaân Vieân")
End Sub
Private Sub mnuQLFind_Click()
 FindNhanVien.Show
 'NhanVien.Show
End Sub
Private Sub mnuQLLed_Click()
 Led.Show
 QLNhanVien.Hide
End Sub
Private Sub mnuQLList_Click()
 ListNhanVien.Show
End Sub
Private Sub mnuQLMain_Click()
 Main.Show
 QLNhanVien.Hide
End Sub
Private Sub mnuQLNhiet_Click()
 Nhiet.Show
 QLNhanVien.Hide
End Sub
Private Sub mnuQLOpen_Click()
On Error GoTo ErOpen
 With Main.cdl
 .Filter = "Text Files (*.TXT)|*.TXT|"
 .FilterIndex = 3
 .ShowOpen
 'Hay cdl.Action = 1
 Set txtfile = tsv.GetFile(.FileName)
 Set ts = txtfile.OpenAsTextStream(ForReading)
 QLGioTrongNgay.Show
 QLGioTrongNgay.txtQLGio.Text = ts.ReadAll
 QLGioTrongNgay.rtxGioTrongNgay.Visible = False
 QLGioTrongNgay.txtQLGio.Visible = True
 'rtxGio.Text = ts.ReadAll
 ts.Close
 End With
ErOpen:
 Exit Sub
End Sub
Private Sub mnuQLOverrite_Click()
On Error GoTo NoneO
 SelectFile
 DataFile = Main.cdl.FileName
 Open DataFile For Output As #3
NoneO:
M = MsgBox("Baïn Khoâng Save ?", vbOKCancel, "Quaûn Lyù Nhaân Vieân")
End Sub
Private Sub mnuQLThem_Click()
 frmNhanVien.Show
 'QLNhanVien.Hide
End Sub
Private Sub mnuQLThoat_Click()
 Main.Show
 QLNhanVien.Hide
End Sub
Private Sub mnuQLTime_Click()
 tmrNhanID.Enabled = False
 ChinhGio.Show
 QLNhanVien.Hide
End Sub
Private Sub tmrNhanID_Timer()
 'Main.MSC.InputLen = 0
 Main.MSC.Output = "!"
 Text1.Text = Text1.Text & Main.MSC.Input
 DisCheck
 Text1.Text = ""
 'HideDis
 'ddd
End Sub
Private Sub HideDis(i As Byte)
 'Main.MSC.Output = "!"
 'Text1.Text = Text1.Text & Main.MSC.Input
 With rtxGio
 '.SelText = "Ngaøy: " & Format(dddd) & vbCrLf
 'For i = 1 To numID
 .SelStart = Len(.Text)
 .SelText = MSNVTime.TextMatrix(i, 0) & Chr(vbKeyTab) & " " _
 & MSNVTime.TextMatrix(i, 1) & Chr(vbKeyTab) & " " _
 & MSNVTime.TextMatrix(i, 2) & Chr(vbKeyTab) & Chr(vbKeyTab) & vbCrLf
 'Next i
 'Next i
 End With
End Sub
Private Sub DisCheck()
 With MSNVTime
 Select Case Text1.Text
 Case NhanVien.ID(1)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(1, 0) = NhanVien.ID(1)
 .TextMatrix(1, 1) = NhanVien.NameNV(1)
 .TextMatrix(1, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (1)
 Text1.Text = ""
 Case NhanVien.ID(2)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(2, 0) = NhanVien.ID(2)
 .TextMatrix(2, 1) = NhanVien.NameNV(2)
 .TextMatrix(2, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (2)
 Text1.Text = ""
 Case NhanVien.ID(3)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(3, 0) = NhanVien.ID(3)
 .TextMatrix(3, 1) = NhanVien.NameNV(3)
 .TextMatrix(3, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (3)
 Text1.Text = ""
 Case NhanVien.ID(4)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(4, 0) = NhanVien.ID(4)
 .TextMatrix(4, 1) = NhanVien.NameNV(4)
 .TextMatrix(4, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (4)
 Text1.Text = ""
 Case NhanVien.ID(5)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(5, 0) = NhanVien.ID(5)
 .TextMatrix(5, 1) = NhanVien.NameNV(5)
 .TextMatrix(5, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (5)
 Text1.Text = ""
 Case NhanVien.ID(6)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(6, 0) = NhanVien.ID(6)
 .TextMatrix(6, 1) = NhanVien.NameNV(6)
 .TextMatrix(6, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (6)
 Text1.Text = ""
 Case NhanVien.ID(7)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(7, 0) = NhanVien.ID(7)
 .TextMatrix(7, 1) = NhanVien.NameNV(7)
 .TextMatrix(7, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (7)
 Text1.Text = ""
 Case NhanVien.ID(8)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(8, 0) = NhanVien.ID(8)
 .TextMatrix(8, 1) = NhanVien.NameNV(8)
 .TextMatrix(8, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (8)
 Text1.Text = ""
 Case NhanVien.ID(9)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(9, 0) = NhanVien.ID(9)
 .TextMatrix(9, 1) = NhanVien.NameNV(9)
 .TextMatrix(9, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (9)
 Text1.Text = ""
 Case NhanVien.ID(10)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(10, 0) = NhanVien.ID(10)
 .TextMatrix(10, 1) = NhanVien.NameNV(10)
 .TextMatrix(10, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (10)
 Text1.Text = ""
 Case NhanVien.ID(11)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(11, 0) = NhanVien.ID(11)
 .TextMatrix(11, 1) = NhanVien.NameNV(11)
 .TextMatrix(11, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (11)
 Text1.Text = ""
 Case NhanVien.ID(12)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(12, 0) = NhanVien.ID(12)
 .TextMatrix(12, 1) = NhanVien.NameNV(12)
 .TextMatrix(12, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (12)
 Text1.Text = ""
 Case NhanVien.ID(13)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(13, 0) = NhanVien.ID(13)
 .TextMatrix(13, 1) = NhanVien.NameNV(13)
 .TextMatrix(13, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (13)
 Text1.Text = ""
 Case NhanVien.ID(14)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(14, 0) = NhanVien.ID(14)
 .TextMatrix(14, 1) = NhanVien.NameNV(14)
 .TextMatrix(14, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (14)
 Text1.Text = ""
 Case NhanVien.ID(15)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 .TextMatrix(15, 0) = NhanVien.ID(15)
 .TextMatrix(15, 1) = NhanVien.NameNV(15)
 .TextMatrix(15, 2) = Format(Time) & " " & Format(Now, "m/d/yy")
 HideDis (15)
 Text1.Text = ""
 End Select
 End With
End Sub
Private Sub ddd()
 For i = 1 To numID
 Select Case Text1.Text
 Case NhanVien.ID(i)
 Main.MSC.Output = "#"
 Main.MSC.Output = "@"
 MSNVTime.TextMatrix(i, 0) = NhanVien.ID(i)
 MSNVTime.TextMatrix(i, 1) = NhanVien.NameNV(i)
 MSNVTime.TextMatrix(i, 2) = Time
 End Select
 Next i
End Sub
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Save data
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sub SelectFile()
 With Main.cdl
 .Filter = "All files (*.txt)|*.txt"
 .FileName = DataFile
 .Flags = cdlOFNPathMustExist
 .Flags = cdlOFNOverwritePrompt
 .Flags = cdlOFNCreatePrompt
'Get the selected file from the common dialog box.
 .ShowOpen
 End With
End Sub
Private Sub mnuLSaveAs_Click()
 mnuLSave_Click
End Sub
Private Sub mnuLSave_Click()
 Dim n As Integer
 On Error GoTo ErSave
 If txtNhapChu.Text = "" Then
 M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty")
 Else
lap:
 cdlQLNhanVien.Filter = "Text files (*.TXT)|*.TXT"
 cdlQLNhanVien.FileName = ""
 cdlQLNhanVien.Action = 2
 'Hay cdl.ShowSave
 If cdlQLNhanVien.FileName "" Then
 Source = cdlQLNhanVien.FileName
 If Dir(cdlQLNhanVien.FileName) "" Then
 n = MsgBox("Do you want to replace the existing " + _
 cdlQLNhanVien.FileName + " ?", vbYesNoCancel + vbQuestion, "Save")
 Select Case n
 Case 6:
 Save
 ts.Write (txtNhapChu.Text)
 ts.Close
 Case 7:
 GoTo lap
 End Select
 Else
 Save
 ts.Write (txtNhapChu.Text)
 ts.Close
 End If
 End If
 End If
ErSave:
 Exit Sub
End Sub
‘************************************************************
Them so nhan vien
Public Key As String
Private Sub ADONavBar1_Error(Number As Variant, Description As Variant, Source As Variant)
 '
 MsgBox CStr(Number) & vbCrLf & Description & vbCrLf & Source, vbCritical, "ADONavBar Error!"
 '
End Sub
Private Sub ADOActionBar1_Error(Number As Variant, Description As Variant, Source As Variant)
 '
 MsgBox CStr(Number) & vbCrLf & Description & vbCrLf & Source, vbCritical, "ADOActionBar Error!"
 '
End Sub
Private Sub cmdFind_Click()
 '
 ' call find pop-up dialog
 '
 Me.Key = ""
 '
 FindNhanVien.Show vbModal
 '
 If Me.Key "" Then
 With deNhanVien.rscomNhanVien
 .MoveFirst
 .Find "ID='" & Me.Key & "'"
 End With
 End If
 '
 Unload FindNhanVien
 '
End Sub
Private Sub cmdList_Click()
 ListNhanVien.Show
End Sub
Private Sub Form_Resize()
 '
 ' adjust custom ADO button controls
 '
 With Me.ADOActionBar1
 .Width = Me.ScaleWidth
 .Height = 600
 .Left = 0
 .Top = 0
 End With
 '
 With Me.ADONavBar1
 .Width = Me.ScaleWidth
 .Height = 600
 .Left = 0
 .Top = Me.ScaleHeight - 600
 End With
 '
End Sub
Private Sub Form_Load()
 '
 ' set starting mode
 '
 ADONavBar1.ADORecordset = deNhanVien.rscomNhanVien
 '
 With ADOActionBar1
 .ADORecordset = deNhanVien.rscomNhanVien
 .FormMode = Edit
 End With
 '
 frmNhanVien.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Private Sub mnuNVExit_Click()
 Main.Show
 frmNhanVien.Hide
End Sub
Private Sub mnuNVLed_Click()
 Led.Show
 frmNhanVien.Hide
End Sub
Private Sub mnuNVMain_Click()
 Main.Show
 frmNhanVien.Hide
End Sub
Private Sub mnuNVNhanVien_Click()
 QLNhanVien.Show
 frmNhanVien.Hide
End Sub
Private Sub mnuNVNhiet_Click()
 Nhiet.Show
 frmNhanVien.Hide
End Sub
‘*******************************************
‘Tim nhan vien
Private Sub Form_Load()
 FindNhanVien.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Private Sub Form_Resize()
 '
 ' adjust grid and columns
 '
 With Me.MSHFlexGrid1
 .Left = 0
 .Top = 0
 .Height = Me.ScaleHeight
 .Width = Me.ScaleWidth
 .ColWidth(0) = .Width * 0.33
 .ColWidth(1) = .Width * 0.67
 End With
 '
End Sub
Private Sub MSHFlexGrid1_DblClick()
 '
 ' pass selected record to caller
 '
 With Me.MSHFlexGrid1
 If .Col = 0 Then
 frmNhanVien.Key = .Text
 Me.Hide
 End If
 End With
 '
 frmNhanVien.Show
End Sub
‘**************************************************
‘ Danh sach nhan vien
Private Sub Command1_Click()
 MSHFlexGrid1.TextArray(11) = Text1.Text
End Sub
Private Sub Form_Load()
 With Me
 .Left = 0
 .Top = 0
 .Width = 12000
 .Height = 9000
 End With
 With MSHFlexGrid1
 .ColWidth(0) = .Width * 0.2
 .ColWidth(1) = .Width * 0.13
 End With
 ListNhanVien.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Private Sub Form_Resize()
 '
 ' adjust grid to form
 '
 With Me.MSHFlexGrid1
 .Left = 0
 .Top = 0
 .Width = Me.ScaleWidth
 .Height = Me.ScaleHeight
 End With
End Sub
‘*******************************************************
‘ Quan ly gio trong ngay
Option Explicit
Private Type typID
 ID(1 To numID) As Double
 NameNV(1 To numID) As String
End Type
Dim NhanVien As typID
Private Sub Command1_Click()
 txtQLGio.Visible = False
 rtxGioTrongNgay.Visible = True
End Sub
Private Sub Form_Resize()
 With Me.MSHFlexGrid1
 '.Top = 1000
 '.Left = 500
 '.Width =
 .ColWidth(0) = .Width * 0.2
 .ColWidth(1) = .Width * 0.4
 .ColWidth(2) = .Width * 0.39
 End With
End Sub
Private Sub Form_Load()
 tmrQLGioTrongNgay.Enabled = False
 txtQLGio.Visible = False
 With MSHFlexGrid1
 .TextMatrix(0, 0) = " Maõ Soá"
 .TextMatrix(0, 1) = " Hoï vaø Teân"
 .TextMatrix(0, 2) = " Giôø Laøm"
 End With
 rtxGioTrongNgay.SelText = "Maõ Soá" & Chr(vbKeyTab) & "Hoï vaø Teân" _
 & Chr(vbKeyTab) & Chr(vbKeyTab) & "Giôø Laøm" & vbCrLf
 rtxGioTrongNgay.Text = rtxGioTrongNgay.SelText & QLNhanVien.rtxGio.Text
 QLGioTrongNgay.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error GoTo None
 Write #3, QLNhanVien.rtxGio.Text
 QLNhanVien.Show
None:
End Sub
Private Sub mnuQLGLed_Click()
 Led.Show
 QLGioTrongNgay.Hide
End Sub
Private Sub mnuQLGMain_Click()
 QLGioTrongNgay.Hide
 QLNhanVien.Hide
 Main.Show
End Sub
Private Sub mnuQLGNhanVien_Click()
 QLNhanVien.Show
 QLGioTrongNgay.Hide
End Sub
Private Sub mnuQLGNhiet_Click()
 Nhiet.Show
 QLGioTrongNgay.Hide
End Sub
Private Sub mnuQLGOpen_Click()
 On Error GoTo ErOpen
 rtxGioTrongNgay.Visible = False
 txtQLGio.Visible = True
 With Main.cdl
 .Filter = "Text Files (*.TXT)|*.TXT|"
 .FilterIndex = 3
 .ShowOpen
 'Hay cdl.Action = 1
 Set txtfile = tsv.GetFile(.FileName)
 Set ts = txtfile.OpenAsTextStream(ForReading)
 txtQLGio.Text = ts.ReadAll
 ts.Close
 End With
ErOpen:
 Exit Sub
End Sub
Private Sub mnuQLGThoat_Click()
 Unload Me
 'Write #3, rtxGioTrongNgay.Text
 QLNhanVien.Show
End Sub
Private Sub tmrQLGioTrongNgay_Timer()
With rtxGioTrongNgay
 '.SelStart = Len(.Text)
 .SelText = QLNhanVien.MSNVTime.TextMatrix(0, 0) & Chr(vbKeyTab) _
 & QLNhanVien.MSNVTime.TextMatrix(0, 1) & Chr(vbKeyTab) _
 & QLNhanVien.MSNVTime.TextMatrix(0, 2) & Chr(vbKeyTab) & Chr(vbKeyTab) & vbCrLf
 For j = 1 To 2
 'For i = 3 To numID Step 3
 .SelStart = Len(.Text)
 .SelText = QLNhanVien.MSNVTime.TextMatrix(j, 0) & Chr(vbKeyTab) _
 & QLNhanVien.MSNVTime.TextMatrix(j, 1) & Chr(vbKeyTab) _
 & QLNhanVien.MSNVTime.TextMatrix(j, 2) & Chr(vbKeyTab) & Chr(vbKeyTab) & vbCrLf
 'Next i
 Next j
End With
End Sub
‘******************************************************
‘ Chinh gio
Dim TDATA1, TDATA2, TDATA3, TDATA4 As String
Dim n As Integer
Private Sub ebChinhGio_Click()
If txtGio.Text = "" Or txtPhut.Text = "" Then
 M = MsgBox("Môøi Baïn Nhaäp Ñaày Ñuû", vbOKOnly, "Chænh Giôø")
Else
 ChinhGio.Hide
 QLNhanVien.Show
 QLNhanVien.tmrNhanID.Enabled = True
End If
End Sub
Private Sub Form_Load()
 Main.MSC.Output = "i"
 delay (200)
 Main.MSC.Output = "T"
 delay (200)
 Main.MSC.Output = "O"
 delay (200)
 ChinhGio.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Private Sub sbReset_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
 Main.MSC.Output = "i"
 delay (500)
 Main.MSC.Output = "T"
 delay (500)
 Main.MSC.Output = "O"
 delay (500)
 'txtGio.Text = ""
 'txtPhut.Text = ""
End Sub
Private Sub txtGio_Change()
 Text1.Text = ""
 n = Len(txtGio.Text)
 Text1.Text = Mid(UCase(txtGio.Text), n, 1)
 Main.MSC.Output = Text1.Text
 TDATA1 = Mid(txtGio.Text, 1, 1)
 TDATA2 = Mid(txtGio.Text, 2, 1)
End Sub
Private Sub txtPhut_Change()
 Text1.Text = ""
 n = Len(txtPhut.Text)
 Text1.Text = Mid(UCase(txtPhut.Text), n, 1)
 Main.MSC.Output = Text1.Text
End Sub
‘***********************************************************
‘ Form Nhiet
Private Sub Form_Load()
 Nhiet.Move _
 (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Private Sub mnuNCont_Click()
 frmHelp.Show
End Sub
Private Sub mnuNHthang_Click()
 HinhThang.Show
 Nhiet.Hide
End Sub
Private Sub mnuNLed_Click()
 Nhiet.Hide
 Led.Show
End Sub
Private Sub mnuNMain_Click()
 Nhiet.Hide
 Main.Show
End Sub
Private Sub mnuNNhanVien_Click()
 Nhiet.Hide
 QLNhanVien.Show
End Sub
Private Sub mnuNOpen_Click()
 On Error GoTo ErOpen
 With Main.cdl
 .Filter = "Text Files (*.*)|*.*|"
 .FilterIndex = 1
 .ShowOpen
 'Hay cdl.Action = 1
 Set txtfile = tsv.GetFile(.FileName)
 Set ts = txtfile.OpenAsTextStream(ForReading)
 'TC.Repaint = ts.ReadAll
 ts.Close
 End With
ErOpen:
 Exit Sub
End Sub
Private Sub mnuNPrint_Click()
 M = MsgBox("Môøi Baïn Laép Ñaët Maùy In Vaøo ", vbOKOnly, "Thu Thaäp Nhieät Ñoä")
End Sub
Private Sub mnuNSave_Click()
 Dim n As Integer
 On Error GoTo ErSave
 If TC.Canvas = "" Then
 M = MsgBox("Baïn Khoâng Coù Gì Ñeå Save haû !", vbOKOnly, "Save Empty")
 Else
lap:
 Main.cdl.Filter = "Text files (*.*)|*.*"
 Main.cdl.FileName = ""
 Main.cdl.Action = 2
 'Hay cdl.ShowSave
 If Main.cdl.FileName "" Then
 Source = Main.cdl.FileName
 If Dir(Main.cdl.FileName) "" Then
 n = MsgBox("Do you want to replace the existing " + _
 Main.cdl.FileName + " ?", vbYesNoCancel + vbQuestion, "Save")
 Select Case n
 Case 6:
 Save
 ts.Write (LText1.Text)
 'Write #2, LText1.Text
 ts.Close
 Case 7:
 GoTo lap
 End Select
 Else
 Save
 ts.Write (LText1.Text)
 'Write #2, LText1.Text
 ts.Close
 End If
 End If
 End If
ErSave:
 Exit Sub
End Sub
Private Sub mnuNTgiac_Click()
 ThongSoFz.Show
 Nhiet.Hide
End Sub
Private Sub mnuNThoat_Click()
 Nhiet.Hide
 Main.Show
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
 Select Case Button.Key
 Case "n1"
 mnuNOpen_Click
 Case "n2"
 mnuNSave_Click
 Case "n3"
 mnuNPrint_Click
 Case "n4"
 mnuNMain_Click
 Case "n5"
 mnuNLed_Click
 Case "n6"
 mnuNNhanVien_Click
 Case "n7"
 mnuNTgiac_Click
 Case "n8"
 mnuNHthang_Click
 Case "n9"
 mnuNCont_Click
 End Select
End Sub
‘*********************************************************
‘ Chon ham lien thuoc dang tam giac
Option Explicit
'Hang so
Const max_input = 4
Const max_output = 2
Const max_mf_in = 5
Const max_mf_out = 7
Const max_rule = 625
'Cau truc du lieu
Private Type mfType
 Name As String
 Shape As Byte
 Par(1 To 4) As Double
End Type
Dim InType(1 To max_input) As Double
Dim inVar(1 To max_input) As Double
'Dim outVar(1 To max_output) As Double
Dim RuleType(1 To max_input + max_output) As Byte
Dim r(1 To max_input + max_output) As Byte
'Dim Weight As Double
'Cac bien
Dim n_in As Byte
Dim n_out As Byte
Dim n_mf_in(1 To max_input) As Byte
Dim n_mf_out(1 To max_output) As Byte
Dim n_rule As Integer
Dim mf_in(1 To max_input, 1 To max_mf_in) As mfType
Dim mf_out(1 To max_output, 1 To max_mf_out) As mfType
Dim Rule(1 To max_rule, 1 To max_input + max_output) As Byte
'Khoi dong cac bien
'Nhap tu giao dien
 'n_in=2
 'n_out=1
 'n_mf_in(1)=3 so tap mo o ngo vao 1
 'n_mf_in(2)=3 so tap mo o ngo vao 2
 'n_mf_out(1)=5 so tap mo o ngo ra la 5
 'n_rule=9
Private Sub KD3()
 n_in = txtnIn
 n_out = txtnOut
 n_mf_in(1) = 3
 n_mf_in(2) = 3
 n_mf_out(1) = 5
 'For i = 1 To max_input
 'n_mf_in(i) = txtmfin
 'Next i
 'For j = 1 To max_output
 'n_mf_out(j) = txtmfout
 'Next j
 n_rule = 9 'n_mf_in(1) ^ n_in
 'Khoi dong gia tri ban dau cho cac tap mo o ngo vao 1
 mf_in(1, 1).Name = "NE"
 mf_in(1, 1).Shape = 1
 mf_in(1, 1).Par(1) = -2
 mf_in(1, 1).Par(2) = -1
 mf_in(1, 1).Par(3) = 0
 mf_in(1, 2).Name = "ZE"
 mf_in(1, 2).Shape = 1
 mf_in(1, 2).Par(1) = -1
 mf_in(1, 2).Par(2) = 0
 mf_in(1, 2).Par(3) = 1
 mf_in(1, 3).Name = "PO"
 mf_in(1, 3).Shape = 1
 mf_in(1, 3).Par(1) = 0
 mf_in(1, 3).Par(2) = 1
 mf_in(1, 3).Par(3) = 2
 'Khoi dong gia tri ban dau cho cac tap mo o ngo vao 2
 mf_in(2, 1).Name = "NE"
 mf_in(2, 1).Shape = 1
 mf_in(2, 1).Par(1) = -2
 mf_in(2, 1).Par(2) = -1
 mf_in(2, 1).Par(3) = 0
 mf_in(2, 2).Name = "ZE"
 mf_in(2, 2).Shape = 1
 mf_in(2, 2).Par(1) = -1
 mf_in(2, 2).Par(2) = 0
 mf_in(2, 2).Par(3) = 1
 mf_in(2, 3).Name = "PO"
 mf_in(2, 3).Shape = 1
 mf_in(2, 3).Par(1) = 0
 mf_in(2, 3).Par(2) = 1
 mf_in(2, 3).Par(3) = 2
 'Khoi dong gia tri ban dau cho cac tap mo o ngo vao 2
 mf_out(1, 1).Name = "NB"
 mf_out(1, 1).Shape = 0
 mf_out(1, 1).Par(1) = -1
 mf_out(1, 1).Name = "NS"
 mf_out(1, 1).Shape = 0
 mf_out(1, 1).Par(1) = -0.5
 mf_out(1, 1).Name = "ZE"
 mf_out(1, 1).Shape = 0
 mf_out(1, 1).Par(1) = 0
 mf_out(1, 1).Name = "PS"
 mf_out(1, 1).Shape = 0
 mf_out(1, 1).Par(1) = 0.5
 mf_out(1, 1).Name = "PB"
 mf_out(1, 1).Shape = 0
 mf_out(1, 1).Par(1) = 1
 'He qui tac mo
 'Neu nhiet la ZE va Nhietdot la ZE thi voltage la ZE
 Rule(1, 1) = 1
 Rule(1, 2) = 2
 Rule(1, 3) = 3
 'Neu nhiet la ZE va Nhietdot la NE thi voltage la NS
 Rule(2, 1) = 2
 Rule(2, 2) = 3
 Rule(2, 3) = 4
 'Neu nhiet la ZE va Nhietdot la PO thi voltage la PS
 Rule(1, 1) = 2
 Rule(1, 2) = 3
 Rule(1, 3) = 4
 'Neu nhiet la NE va Nhietdot la ZE thi voltage la NS
 Rule(1, 1) = 1
 Rule(1, 2) = 2
 Rule(1, 3) = 2
End Sub
'Ham mo hoa doi voi ham lien thuoc dang tam giac
Private Function mftri(xx As Double, ll As Double, cc As Double, rr As Double) As Double
 If ((xx = rr)) Then
 mftri = 0
 End If
 If ((xx > ll) And (xx <= cc)) Then
 mftri = (xx - ll) / (cc - ll)
 End If
 If ((xx > cc) And (xx < rr)) Then
 mftri = (rr - xx) / (rr - cc)
 End If
End Function
'Ket qua suy dien cua 1 quy tac mo
'(dung toan tu PROD de thuc hien toan tu AND)
'Private Sub one_rule_inference(r, inVar)
Private Sub rWeight(r, inVar)
 'Dim outVar(1 To max_output) As Double
 Dim riWeight As Double
 Dim x, y As Byte
 'Dim r(1 To max_input + max_output) As Byte
 riWeight = 1
 For x = 1 To n_in
 If mf_in(i, r(i)).Shape = 1 Then
 riWeight = riWeight * mftri(inVar(i), mf_in(i, r(i)).Par(1), mf_in(i, r(i)).Par(2), mf_in(i, r(i).Par(3)))
 End If
 Next x
 rWeight = riWeight
 End Sub
Private Sub routVar(r, inVar)
Dim Weight As Double
Weight = rWeight(r, inVar)
 For y = 1 To n_out
 If mf_out(i, r(n_in + i)).Shape = 0 Then
 OutVar = mf_out(i, r(n_in + i)).Par(1) * Weight
 End If
 Next y
 'Ngoai ra con cac dang ham lien thuoc khac
 routVar = OutVar
End Sub
'Ket qua suy dien cua he qui tac mo
Private Sub all_rule_inference(inVar)
 Dim wtsum, Weight As Double
 Dim tempOut(1 To max_output) As Double
 Dim OutVar(1 To max_output) As Double
 Dim x, y As Byte
 For x = 1 To n_out
 OutVar(x) = 0
 wtsum = 0
 For x = 1 To n_rule
 Weight = rWeight(Rule(i), inVar)
 tempOut = routVar(Rule(i), inVar)
 wtsum = wtsum + Weight
 For y = 1 To n_out
 OutVar(y) = OutVar(y) + tempOut(y)
 Next y
 Next x
 For x = 1 To n_out
 OutVar(x) = OutVar(x) / Weight
 Next x
 all_rule_inference = OutVar
End Sub
Private Sub chkBangLuat_Click()
 On Error GoTo ErOpen
 With Main.cdl
 .Filter = "Text Files (*.TXT)|*.TXT|"
 .FilterIndex = 4
 .ShowOpen
 'Hay cdl.Action = 1
 Set txtfile = tsv.GetFile(.FileName)
 Set ts = txtfile.OpenAsTextStream(ForReading)
 Text1.Text = ts.ReadAll
 ts.Close
 End With
ErOpen:
 Exit Sub
 'With Main.cdl
 '.FileName = "c:\as.txt"
 'Set txtfile = tsv.GetFile(Main.cdl.FileName)
 'Set ts = txtfile.OpenAsTextStream(ForReading)
 'Text1.Text = ts.ReadAll
 'End With
 chkBangLuat.Value = 1
End Sub
Private Sub Command1_Click()
 KD3
End Sub
Private Sub ebBangLuatOK_Click()
 ThongSoFz.Hide
 Nhiet.Show
End Sub
Private Sub Form_Load()
 With MSBangDK
 .ColWidth(0) = 1300
 .ColWidth(1) = 1300
 .ColWidth(2) = 1500
 .TextMatrix(0, 0) = "ET"
 .TextMatrix(0, 1) = "DET"
 .TextMatrix(0, 2) = "OUT"
 End With
 ThongSoFz.Move _
 (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Phaàn source chöông trình coù treân ñóa CD, xem seõ deã daøng vaø ñaày ñuû hôn.