4 SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 150Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành... Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành... Mã lệnh cho Form Settin
Trang 1CHƯƠNG 8 : LƯU ĐỒ GIẢI THUẬT VÀ CHƯƠNG
TRÌNH
Trang 24 SVTH : Hoàng Trung Hiếu & Nguyễn Trung Dũng trang 150
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 38.2 Chương trình viết bằng assembly cho vi xử lý 89C51 :
;ĐOẠN KHAI BÁO CÁC BIẾN ORG 0000H
DECLARE:
RRI EQU 20H ;CHỨA GIÁ TRỊ QUANG TRỞ BÊN PHẢI
CBKC EQU 23H CÁCH ;CHỨA GIÁ TRỊ CẢM BIẾN KHOẢNG
INPUT EQU 24H ;GIÁ TRỊ NHẬN VỀ TỪ MÁY TÍNH CONTROL EQU 25H
TỰ ĐỘNG
;BIẾN XÁC ĐỊNH ĐK BẰNG TAY HAY
VTOC EQU 26H ;BIẾN DÙNG ĐỂ THAY ĐỔI TỐC ĐỘ MANUAL EQU 27H ;BIẾN DÙNG ĐỂ ĐK BẰNG TAY BIEN_TRUYEN EQU 28H;BIẾN XÁC ĐNH THỨ TỰ TRUYỀN MOV MANUAL,#0
MOV SCON,#01010010B MOV TMOD,#21H
Qttrái > Qtphải
N
Y Chạy thẳng
Abs(Qttrái – Qtphải) < 5
Rẽ phải Rẽ trái
Trang 4MOV TH1,#-3 SETB TR1
;PHAÀN CHÖÔNG TRÌNH CHÍNH MAIN:
Trang 5Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 7MOV R3,#40 LOOP7:
R3,#20
Trang 9LCALL
STOP1:
OUTCHAR
VAN_TOC
Trang 10LCALL
LCALL
DISPLAY JNB RI,SKIP3
LCALL
INCHAR
CJNE A,#8,SKIP3 LJMP
;ĐOẠN CHƯƠNG TRÌNH ĐIỀU KHIỂN BẰNG NÚT NHẤN L_MANUAL:
MOV P2,#40H MOV P1,#00H JNB RI,SKIP4
LCALL
XET_GIAM:
INCHAR
CJNE A,#23,XET_TANG INC INPUT
SJMP XET_TANG:
SKIP4
CJNE A,#36,CONTINUE DJNZ INPUT,SKIP4 MOV INPUT,#1
Trang 11SJMP CONTINUE:
SKIP4
MOV XET_6:
MANUAL,A
CJNE A,#6,XET_7 LJMP
XET_7:
AUTO
CJNE A,#7,XET_8 LJMP
XET_8:
L_MANUAL
CJNE A,#8,SKIP4 LJMP
SKIP4:
MAIN
MOV A,MANUAL CJNE A,#0,M_FORWARD LJMP L_MANUAL
Luận văn tốt
nghiệp
GVHD : Thầy
Nguyễ
n Thiện Thành
M_FORWARD:
LJMP M_LEFT:
L_MANUAL
LJMP M_BACK:
L_MANUAL
Trang 12LCALL DRIVE_NGHICH LJMP
;KẾT THÚC CHƯƠNG TRÌNH CHÍNH
;CHƯƠNG TRÌNH CON ĐIỀU KHIỂN CHẠY
TỚI DRIVE_THUAN:
MOV LOOP1:
;ĐOẠN CHƯƠNG TRÌNH THAY ĐỔI TỐC ĐỘ
R4,#8
Trang 13;CHƯƠNG TRÌNH CON RẼ PHẢI
DRIVE_RIGHT:
MOV R0,#0 LOOP3:
MOV A,R0 INC R0 MOV DPTR,#RTABLE MOVC
A,@A+DPTR
MOV P2,#40H MOV P1,A
Trang 14MOV LOOP4:
;CHƯƠNG TRÌNH CON ĐỌC QUANG TRỞ BÊN PHẢI
Trang 16MOV SHIFT:
Trang 18MOV R5,A ;R5 CHỨA SỐ
HÀNG CHỤC MOV A,B
Luận văn tốt
nghiệp
GVHD : Thầy Nguyễn Thiện Thành
SWAP A ORL A,R6
MOV R6,A ;R6 CHỨA SỐ HÀNG CHỤC_ĐƠN VỊ
RET
Trang 19;CHÖÔNG TRÌNH CON DELAY 400ms
Trang 20;BẢNG THAM CHIẾU CHO ROBOT RẼ TRÁI
8.3 Chương trình viết bằng C để huấn luyện cho mạng Neuron :
#include<stdlib.h> #include<conio.h>
#include<graph.h>
#include<float.h>
#include<math.h> #include<stdio.h>
Trang 21#define n0 4 /*input layer */
#define n1 6 /*hidden layer */
#define n2 1 /*output layer */
struct videoconfig vc; float uk[11],uk_1,yk1[11],yk,yk_1;
/*define variable used */ float netin0[n0],netin1[n1],netin2[n2];
float bias1[n1],prdlbs1[n1]; float weight1[n1][n0],weight2[n2]
[n1]; float prdlwt1[n1][n0],prdlwt2[n2][n1]; float
actv1[n1],netout; float Icoef,motum,rms; unsigned seed_int,
seed_u; int epochs,h; int eph_pts=500,rcl_pts=100; float
inwtsc=10.0; float xxo,yyo; float
Trang 24error2[j]=yk1[h]-netout; for (i=0;i<n1;i++) delwt2[j]
Trang 27_setpixel(timegrph,0.0); /*mau vang : duong y=0*/
_setcolor(7);
_setpixel(timegrph,netoutgrph); /*mau trang:dau ra cua mang*/
comptwt(); rms+=(yk1[h] -
netout)*(yk1[h] - netout); yk_1=yk;
yk=yk1[h]; uk_1=uk[h]; timegrph+=40;
Trang 30printf("weight layer 1 :"); for (j=0;j<n1;j++)
for (i=0;i<n0;i++) printf("\nweight1[%d][%d]=%f
",j,i,weight1[j][i]); getch();
_clearscreen(_GCLEARSCREEN);
printf("\nweight layer 2 :"); for (j=0;j<n2;j++)
for (i=0;i<n1;i++) printf("\nweight2[%d][%d]=
%f",j,i,weight2[j][i]); getch();
}
Trang 318.4 Chương trình giao diện trên máy tính viết bằng Visual Basic
Mã lệnh cho Form Main :
Trang 32Private Sub About_Click()
Trang 34Mã lệnh cho Form Settings :
Option Explicit
Private Sub cmdCancel_Click()
frmPortSettings.Visible = False End Sub
Private Sub Form_Load()
Trang 35Private Sub Option1_Click()
Private Sub Option5_Click()
Trang 36Private Sub Option10_Click()
Trang 37Mã lệnh cho Form Control :
Private Sub cmdauto_Click() frmauto.Show
frmauto.MSComm1.RThreshold = 1
frmauto.MSComm1.InputLen = 1 frmauto.MSComm1.PortOpen
= True frmauto.MSComm1.Output = Chr(Asc(6)) 'chay tu dong
che do 1 frmcontrol.Visible = False frmauto.ttu_nhan = 0
End Sub
Private Sub cmdauto1_Click() frmauto1.Show
frmauto1.MSComm1.RThreshold = 1
frmauto1.MSComm1.InputLen = 1
frmauto1.MSComm1.PortOpen = True
frmauto1.MSComm1.Output = Chr(Asc(9)) 'chay tu dong che do
2 frmcontrol.Visible = False frmauto1.ttu_nhan = 0
End Sub
Trang 38Private Sub cmdmanual_Click() frmmanual.Show
frmmanual.MSComm1.InputLen = 1 frmmanual.MSComm1.PortOpen
= True frmmanual.MSComm1.Output = Chr(Asc(7)) 'dieu khien bang
nut nhan frmcontrol.Visible = False
Private Sub cmdthoat_Click()
frmcontrol.Visible = False
End Sub
Private Sub Help_Click()
frmHelp.Show End Sub
Trang 39Private Sub kq_Click()
Mã lệnh cho Form Manual :
Option Explicit
Dim control As Integer
Private Sub Cmdgiam_Click()
If control <> 0 Then
frmmanual.MSComm1.Output = "G" 'giam toc do
End If
Trang 40Private Sub Command1_Click()
control = 1 'bien dieu khien chay toi
End Sub
Private Sub Command2_Click()
control = 2 'bien dieu khien qua trai
End Sub
Private Sub Command3_Click()
control = 3 'bien dieu khien chay lui
End Sub
Private Sub Command4_Click()
control = 4 'bien dieu khien qua phai
End Sub
Private Sub Command5_Click()
control = 1 'bien khoi dong chay toi
Timer1.Enabled = True
End Sub
Trang 41Private Sub Command6_Click()
control = 0 'bien ngung
End Sub
Private Sub Command7_Click() control = 0
'bien ngung frmmanual.MSComm1.Output
8.4.5 Form : auto (chế độ 1 )
Trang 42Mã lệnh cho Form auto :
Option Explicit
Public uk, uk_1, yk, yk1, yk_1 As Single
Public dem, colornumber, ttu_nhan As Byte
Public sensor, vtoc, capso As Integer
Private Sub CmdEXIT_Click()
frmauto.MSComm1.Output = Chr(Asc(8))
frmauto.MSComm1.PortOpen = False
frmcontrol.Show frmauto.Visible = False
End Sub
Private Sub Form_Load()
yk = yk_1 = uk_1 = 0
Trang 43Private Sub MSComm1_OnComm()
If (MSComm1.CommEvent = comEvReceive) Then
Timer2.Enabled = False txtstop.Text = "
ROBOT DA DEN DICH " txtso.Text = 0
Select Case capso
Case Is = 1
Trang 44If sensor >= 10 And sensor <= 150 Then
txtnotice.Text = " ROBOT DA PHAT HIEN RA DICH DEN " Else
txtnotice.Text = " ROBOT CHUA PHAT HIEN RA DICH DEN " End If
Trang 45Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Private Sub comp_out()
Dim i, j As Integer
Dim ea, eb As Single
Dim netout, actv1(5) As Single
Dim netin0(3), netin1(5), netin2(0) As Single
Dim k As Byte trong_so uk = sensor / 500
netin1(j) = netin1(j) + w1(j, i) * netin0(i)
Next i ea = Exp(netin1(j)) eb = Exp((-1) *
netin1(j)) actv1(j) = (ea - eb) / (ea + eb)
Next j netin2(0) = 0 For i = 0 To 5
netin2(0) = netin2(0) + w2(0, i) * actv1(i)
Next i netout = netin2(0) yk1 = netout
yk_1 = yk
yk = yk1
uk_1 = uk
k = k + 1
Trang 46Private Sub Timer1_Timer()
If dem <= 4 Then dem =
dem + 1 Else dem = 0
Trang 47ForeColor = QBColor(8) Line (Image4.Left + Image4.Width / 2, Image4.Top + Image4.Height)(Image4.Left + Image4.Width / 2, Image1.Top + Image1.Height / 2)
Line (Image4.Left + Image4.Width / 2, Image1.Top + Image1.Height / (Image1.Left, Image1.Top + Image1.Height / 2)
2)-Image4.Left = 2)-Image4.Left + 50
If Image4.Left > 2300 Then Image4.Left = 500
End If DrawWidth = 3 colornumber = colornumber + 1 ForeColor = QBColor(colornumber) Line (Image4.Left + Image4.Width, Label6.Top + Label6.Height / 2)(Label6.Left / 2 + (Image4.Left + Image4.Width) / 2, Label6.Top + Label6.Height
/ 2) Line (Image4.Left + Image4.Width / 2, Image4.Top + Image4.Height)(Image4.Left + Image4.Width / 2, Image1.Top + Image1.Height / 2) ForeColor = QBColor(colornumber + 4)
Line (Label6.Left / 2 + (Image4.Left + Image4.Width) / 2, Label6.Top + Label6.Height / 2)-(Label6.Left, Label6.Top + Label6.Height / 2)
Line (Image4.Left + Image4.Width / 2, Image1.Top + Image1.Height / (Image1.Left, Image1.Top + Image1.Height / 2)
2)-colornumber = 2)-colornumber Mod 10 End Sub
Private Sub Timer2_Timer() 'O to chuyen dong
DrawWidth = 3 ForeColor = QBColor(8) Line (Image3.Left + Image3.Width / 2, Image3.Top + Image3.Height)(Image3.Left + Image3.Width / 2, Image1.Top + Image1.Height / 2)
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 48Line (Image1.Left + Image1.Width, Image1.Top + Image1.Height / 2)(Image3.Left + Image3.Width / 2, Image1.Top + Image1.Height / 2)
Image3.Left = Image3.Left + 50
If Image3.Left > 7800 Then ForeColor = QBColor(8) Line (Label6.Left + Label6.Width, Label6.Top + Label6.Height / 2)-(Image3.Left, Label6.Top + Label6.Height / 2)
Image3.Left = 5800 Else
colornumber = colornumber + 1 ForeColor = QBColor(colornumber) Line (Label6.Left + Label6.Width, Label6.Top + Label6.Height / 2)(Image3.Left / 2 + (Label6.Left + Label6.Width) / 2, Label6.Top + Label6.Height / 2)
Line (Image3.Left + Image3.Width / 2, Image3.Top + Image3.Height)(Image3.Left + Image3.Width / 2, Image1.Top + Image1.Height / 2)
ForeColor = QBColor(colornumber + 4) Line (Image3.Left / 2 + (Label6.Left + Label6.Width) / 2, Label6.Top + Label6.Height / 2)-(Image3.Left, Label6.Top + Label6.Height / 2)
Line (Image1.Left + Image1.Width, Image1.Top + Image1.Height / (Image3.Left + Image3.Width / 2, Image1.Top + Image1.Height / 2)
2)-colornumber = 2)-colornumber Mod 10 End If
End Sub
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 498.4.6 Form : Auto1 ( chế độ 2 )
Mã lệnh cho Form Auto 1 :
Option Explicit Public uk, uk_1, yk, yk1, yk_1 As Single Public ulk, ulk_1, urk, urk_1, ylk1, ylk, yrk1, yrk As Single Public dem, colornumber, ttu_nhan As Byte
Public sensor, vtoc, capso As Integer Public qtroleft, qtroright As Integer Public dkleft, dkright As Integer
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 50Private Sub CmdEXIT_Click() frmauto1.MSComm1.Output = Chr(Asc(8)) frmauto1.MSComm1.PortOpen = False frmcontrol.Show frmauto1.Visible = False
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 51Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
End Sub
Private Sub Form_Load() yk
= yk_1 = uk_1 = 0 ylk = yrk
= ulk_1 = urk_1 = 0 dem = 0
Private Sub MSComm1_OnComm()
If (MSComm1.CommEvent = comEvReceive) Then
Trang 52MSComm1.Output = Chr(Asc(capso))
Select Case capso
Trang 53If dkleft > dkright Then
Dim ea, eb As Single
Dim netout, actv1(5) As Single
Dim netin0(3), netin1(5), netin2(0) As Single
Dim k As Byte trong_so uk = sensor / 500
netin1(j) = netin1(j) + w1(j, i) * netin0(i)
Next i ea = Exp(netin1(j)) eb = Exp((-1) *
netin1(j))
Trang 54Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
actv1(j) = (ea - eb) / (ea + eb)
Next j netin2(0) = 0 For i =
0 To 5
netin2(0) = netin2(0) + w2(0, i) * actv1(i)
Next i netout = netin2(0) yk1 = netout
yk_1 = yk yk = yk1 uk_1 = uk k = k + 1
Dim ea, eb As Single
Dim netout(1), actv1(9) As Single Dim
netin0(5), netin1(9), netin2(1) As Single
trong_so1 ulk = qtroleft / 250 urk =
Trang 55netin1(j) = netin1(j) + wt1(j, i) * netin0(i)
Next i ea = Exp(netin1(j)) eb = Exp((-1) *
netin1(j)) actv1(j) = (ea - eb) / (ea + eb)
Trang 56ylk = ylk1 yrk =
yrk1 ulk_1 = ulk
urk_1 = urk
End Sub
Private Sub Timer1_Timer()
If dem <= 4 Then dem =
dem + 1 Else dem = 0
Image1.Picture = LoadPicture("C:\My Documents\net3.gif")
Case Is = 4
Image1.Picture = LoadPicture("C:\My Documents\net4.gif")
End Select
Trang 58Line (Image1.Left + Image1.Width, Image1.Top + Image1.Height / 2)
(Image3.Left + Image3.Width / 2, Image1.Top + Image1.Height / 2)
Image3.Left = Image3.Left + 50
If Image3.Left > 7800 Then
ForeColor = QBColor(8)
Line (Label6.Left + Label6.Width, Label6.Top + Label6.Height /
2)-(Image3.Left, Label6.Top + Label6.Height / 2)
Line (Image3.Left + Image3.Width / 2, Image3.Top + Image3.Height)
(Image3.Left + Image3.Width / 2, Image1.Top + Image1.Height / 2)
Trang 59Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Option Explicit Public bi1(5) As Single Public w1(5, 3), w2(0, 5) As Single Public Sub trong_so()
'giá trị ngưỡng tại lớp neuron ẩn bi1(0) = -0.838091 bi1(1) = -1.127372 bi1(2) = -0.015699 bi1(3) = -0.02642 bi1(4) = -0.059934 bi1(5) = -0.028852
'trọng số giữa lớp neuron đầu vào và lớp neuron ẩn w1(0, 0) = -0.625121 w1(0, 1) = 0.980091 w1(0, 2)
= 1.644939 w1(0, 3) = -1.829324
w1(1, 0) = 0.428379 w1(1, 1) = 0.091225 w1(1, 2) = -0.110632 w1(1, 3) = 2.705646
w1(2, 0) = -0.166446 w1(2, 1) = 0.154604 w1(2, 2) = 0.658901 w1(2, 3) = -0.75804
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 61Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Option Explicit Public bias1(9) As Single Public wt1(9, 5), wt2(1, 9) As Single Public Sub trong_so1()
'giá trị ngưỡng tại lớp neuron ẩn bias1(0) = -0.002176 bias1(1) = 0.011264 bias1(2) = 0.005802 bias1(3) = -0.019647 bias1(4) = -0.007982 bias1(5) = -0.011101 bias1(6) = -0.003865 bias1(7) = -0.028207 bias1(8) = 0.002008 bias1(9) = 0.010928
'trọng số giữa lớp neuron đầu vào và lớp neuron ẩn wt1(0, 0) = 0.617251 wt1(0, 1) = 0.006759 wt1(0, 2)
= -0.611946 wt1(0, 3) = 0.008967 wt1(0, 4) = -0.00068 wt1(0, 5) = 0.027049
wt1(1, 0) = -0.064578 wt1(1, 1) = -0.001474 wt1(1, 2) = 0.064821 wt1(1, 3) = 0.013051 wt1(1, 4) = -0.00136 wt1(1, 5) = -0.094324 wt1(2, 0) = 0.495083 wt1(2, 1) = 0.003908
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 63Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
wt1(6, 1) = 0.006525 wt1(6, 2) = 0.508393 wt1(6, 3) = 0.00038 wt1(6, 4) = 0.00606 wt1(6, 5) = 0.051006
wt1(7, 0) = -0.256004 wt1(7, 1) = 0.020769 wt1(7, 2) = 0.266814 wt1(7, 3) = 0.003664 wt1(7, 4) = 0.010911 wt1(7, 5) = 0.000644
wt1(8, 0) = 0.220638 wt1(8, 1) = 0.001704 wt1(8, 2) = -0.220922 wt1(8, 3) = 0.008627 wt1(8, 4) = -0.000937 wt1(8, 5) = -0.051317
wt1(9, 0) = -0.788846 wt1(9, 1) = -0.00278 wt1(9, 2) = 0.787527 wt1(9, 3) = 0.007389 wt1(9, 4) = 0.000193 wt1(9, 5) = -0.000662
Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành
Trang 64'trọng số giữa lớp neuro ẩn và lớp neuron đầu ra
wt2(0, 0) = -0.011727 wt2(0, 1) = -0.008157
Trang 65Luận văn tốt nghiệp GVHD : Thầy Nguyễn Thiện Thành