【文章內(nèi)容簡(jiǎn)介】
下位機(jī)程序 include define uchar unsigned char define uint unsigned int uchar dat[2]={0}。 sbit P11=P1^7。 sbit P32=P3^2。 sbit P33=P3^3。 bit tmp=1。 void TimeSet() //定時(shí)器設(shè)置 串口設(shè)置 { TMOD=0x21。//定時(shí)器 TR1=1。 南通職業(yè)大學(xué)電子工程系畢業(yè)論文 9 // SM0=0。//串口中斷設(shè)置 // SM1=1。 // SM2=1。 SCON=0x50。 TH1=0xff。 TL1=0xff。 EA=1。 ES=0。 EX0=1。 IT0=1。 PCON=0x80。 TH0=0x00。 TL0=0x00。 // TR0=1。 ET0=1。 } void delay(void) //誤差 { unsigned char a,b。 for(b=61。b0。b) for(a=3。a0。a)。 } void INT() interrupt 0 { TR0=1。 tmp=0。 // P2+=1。 } 南通職業(yè)大學(xué)電子工程系畢業(yè)論文 10 void Time0() interrupt 1 { dat[0]=TH0。 dat[1]=TL0。 tmp=1。 SBUF=dat[0]。 delay()。 TI=0。 SBUF=dat[1]。 delay()。 TI=0。 TR0=0。 // TF0=0。 TH0=0。 TL0=0。 // P33=0。 } void Time1() interrupt 3 { RI=0。 TI=0。 } void main() { TimeSet()。 while(1) 南通職業(yè)大學(xué)電子工程系畢業(yè)論文 11 { // SBUF=0x0a。 // P2+=1。 if(tmp==0 amp。amp。 P32==1) { TF0=1。 // P2+=1。 } } } 上位機(jī)軟件設(shè)計(jì) 上位機(jī)軟件編程思路 利用 Visual Basic 提供的 MSComm 控件可以簡(jiǎn)單便攜地通過(guò)應(yīng)用程序?qū)崿F(xiàn)串行通信,也可以創(chuàng)建功能完備、具有事件驅(qū)動(dòng)功能的高級(jí)通信工具。與 DOS 環(huán)境下用匯編或C 語(yǔ)言等編制的串行通信程序及 Windows 環(huán)境下用 Visual C 編制的串行通信程序相比,在使用 Visual Basic 的 MSComm 控件實(shí)現(xiàn)串行通信時(shí),程序員只需關(guān)心 MSComm 控件對(duì)Windows 通信驅(qū)動(dòng)程序的 API 函數(shù)的接口即可,換句話說(shuō),只需要設(shè)置和監(jiān)視 MSComm控件的屬性和事件即可 。 上位機(jī)程序 Modulel (Code) Public Declare Function SetLayeredWindowAttributes Lib user32 (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long Public Const WS_EX_LAYERED = amp。H80000 Public Const GWL_EXSTYLE = (20) Public Const LWA_ALPHA = amp。H2 Public Const LWA_COLORKEY = amp。H1 Public Declare Function GetWindowLong Lib user32 Alias GetWindowLongA (ByVal hwnd As Long, ByVal nIndex As Long) As Long 南通職業(yè)大學(xué)電子工程系畢業(yè)論文 12 Public Declare Function SetWindowLong Lib user32 Alias SetWindowLongA (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Form1 Dim Buffer1(63488) As Byte Dim Buffer2(63488) As Byte Dim Buffer3(63488) As Byte Dim Data_point As Long Dim Wave_width As Integer Dim Width_per_BIT As Single Dim n As Integer Dim Time As Integer Dim Data_rate As Long Dim temp_long As Long Dim Click_flag As Boolean Dim Old_X, Old_Y As Single Dim Flag_about As Boolean Function Draw_Square_Wave(ByVal Start As Long, ByVal x, Y, Width_per_20us As Integer, ByVal Channel As Integer) Dim Time_long As Integer Dim HEiGHT, LINE_COLOR, START_Y As Integer Dim Temp_buffer, Dp, Dp_old As Integer START_Y = Y HEiGHT = 200 LINE_COLOR = RGB(0, 0, 255) (0, START_Y)(1, START_Y), LINE_COLOR Time_long = / Width_per_20us For i = 0 To Int(Time_long / 8) Select Case Channel Case 1 Temp_buffer = Buffer1(Start + i) Case 2 Temp_buffer = Buffer2(Start + i) Case 3 南通職業(yè)大學(xué)電子工程系畢業(yè)論文 13 Temp_buffer = Buffer3(Start + i) End Select k = 0 For j = 7 To 0 Step 1 k = k + 1 Dp = Int(Temp_buffer / 2 ^ j) If Dp = 0 Then If Dp_old = 0 Then ((i * 8 + k) * Width_per_20us, START_Y), LINE_COLOR If Dp_old = 1 Then ((i * 8 + k 1) * Width_per_20us, START_Y), LINE_COLOR ((i * 8 + k) * Width_per_20us, START_Y), LINE_COLOR End If End If If Dp = 1 Then Temp_buffer = Temp_buffer 2 ^ j If Dp_old = 1 Then ((i * 8 + k) * Width_per_20us, START_Y HEiGHT), LINE_COLOR If Dp_old = 0 Then ((i * 8 + k 1) * Width_per_20us, START_Y HEiGHT), LINE_COLOR ((i * 8 + k) * Width_per_20us, START_Y HEiGHT), LINE_COLOR End If End If Dp_old = Dp Next Next (0, Y + 200)(, START_Y + 200), RGB(200, 200, 255) PrintWord 0, Y + 20, Str(Round(Start * Width_per_BIT * 8 / 1000, 3)) amp。 ms For j = 0 To Int(Time_long / 50) 南通職業(yè)大學(xué)電子工程系畢業(yè)論文 14 (j * 50 * Width_per_20us, Y + 100)(j * 50 * Width_per_20us, START_Y + 200), RGB(200, 200, 255) Next End Function Function PrintWord(ByVal x, Y As Integer, ByVal toprint As String) Dim temp1, temp2 As Integer temp1 = temp2 = With Picture1 .CurrentX = x .CurrentY = Y .ForeColor = RGB(255, 96, 96) End With toprint With Picture1 .CurrentX = temp1 .CurrentY = temp2 End With End Function Private Sub Command1_Click() = Ird 文件 |*.ird Dim temp_Filename As String Dim save_Filename As String Dim temp_counter As Long temp_Filename = 39。 39。save_Filename = On Error GoTo fuck Open temp_Filename For Binary As 1 For temp_counter = 0 To 63488 Get 1, , Buffer1(temp_counter) 南通職業(yè)大學(xué)電子工程系畢業(yè)論文 15 Next For temp_counter = 0 To 63488 Get 1, , Buffer2(temp_counter) Next For temp_counter = 0 To 63488 Get 1, , Buffer3(temp_counter) Next Close 1 temp_long = Draw_Square_Wave temp_long * 2, 0, 900, Wave_width, 1 Draw_Square_Wave temp_long * 2, 0, 2200, Wave_width, 2 Draw_Square_Wave temp_long * 2, 0, 3500, Wave_width, 3 GoTo out fuck: MsgBox 打開(kāi)文件出錯(cuò) out: End Sub Private Sub Command2_Click() If = False Then Init_ Select Case Case False Data_point = 0 End Select = Not Select Case Case False = 0 = 串口已關(guān)閉,數(shù)據(jù)采集被強(qiáng)行停止