購(gòu)買設(shè)計(jì)請(qǐng)充值后下載,,資源目錄下的文件所見(jiàn)即所得,都可以點(diǎn)開(kāi)預(yù)覽,,資料完整,充值下載可得到資源目錄里的所有文件。。?!咀ⅰ浚篸wg后綴為CAD圖紙,doc,docx為WORD文檔,原稿無(wú)水印,可編輯。。。具體請(qǐng)見(jiàn)文件預(yù)覽,有不明白之處,可咨詢QQ:12401814
畢 業(yè) 設(shè) 計(jì) 附 件 四
源程序
專 業(yè) 機(jī)械設(shè)計(jì)制造及其自動(dòng)化
學(xué)生姓名 胡 成
班 級(jí) B機(jī)制077
學(xué) 號(hào) 0710101710
指導(dǎo)教師 盧 倩
完成日期 2011年6月6日
源程序
速度采集AD/轉(zhuǎn)換接口程序
ORG 0000H
ADIO: SJMP START
ORG 0013H ; INT1中斷入口
MOV R6,#0AH ; 設(shè)置循環(huán)次數(shù),
延時(shí)10s
LOOP: LCALL DEL; 調(diào)用1s延時(shí)子程序
JMP INDATA
DJNZ R6,LOOP
ORG 0040H; 主程序入口
START: ANL P2,#07FH; 芯片選擇
MOVX A,@R1; 讀一個(gè)數(shù)據(jù)并復(fù)位ADC中斷觸發(fā)器
ORL P2,80H; 置位P2.7
MOV R0,#20H; 數(shù)據(jù)地址
MOV Rl,0FFH; 虛擬地址
MOV A,#0FFH; 為中斷循環(huán)置位累加器
ANL P2,#07FH; 發(fā)送片選信號(hào)
MOVX @Rl,A 發(fā)送寫輸出信號(hào),啟動(dòng)A/D轉(zhuǎn)換
SETB EA 中斷開(kāi)放
SETB EXI 允許INT1中斷
LOOP: JNZ LOOP 中斷等待,判A的內(nèi)容=0,進(jìn)入中斷后A=0
NOP
NOP
INDATA: MOVX A,@R1; 若片選為低,則輸入數(shù)據(jù)
MOV @R0,A 存儲(chǔ)在存儲(chǔ)器中
CRL A; 清累加器以得到中斷循環(huán)輸出
RET; 返回
SMJZ: ORG 3000H
MOV DPTR,#6000H 8279命令口地址
MOV A,#10H; 8位顯示,右入口
MOVX @DPTR,A; 輸出控制字
MOV A,#14H 分頻數(shù)20
MOVX @DPTR,A; 8279內(nèi)部產(chǎn)生100kHz頻率
MOV A#90H; 寫顯示RAM地址,Al=1遞增
MOVX @DPTR,A
RET
轉(zhuǎn)速顯示編程:
ORG 3100H
ZSDISP: MOV RO,#43H; 顯示緩沖地址43H
MOV R2, #04H 顯示共4位
MOV DPTR,#4000H; 指向8279數(shù)據(jù)口
LOOP: MOV A,@R0
MOV DPTR,#TAB; 開(kāi)始查表,TAB=3180H
MOVC A,A+@DPTR
MOVX @DPTR,A
DEC R0
DJNZ R2 ,LOOP
RET
延時(shí)lms程序:
DL 1MS: MOV R3, #02H
Ll: MOV R4, #0F8H
L2: DJNZ R4, L2
DJNZ R3, Ll
RET
數(shù)據(jù)處理及拆字程序如下:
ADCP: ORG 1000H
MOV A,@R0; 從AD轉(zhuǎn)換中取數(shù)據(jù)
MOV 26H,A; 數(shù)據(jù)送26H儲(chǔ)存,作比較用
MOV B,#0FH; 將15的二進(jìn)制數(shù)0FH送B
DIV AB
MOV 20H,A; 商數(shù)存A
MOV 21H,B; 余數(shù)存B
MOV R4,#02H; 兩個(gè)單元均需要拆字顯示
MOV R0,#20H; 從暫存單元取數(shù)
MOV Rl,#40H; 設(shè)暫存拆字結(jié)果臨時(shí)單元
LOOP: MOV A,@R0
MOV B,#0AH; 除以10即可
DIV AB
MOV @R1,B; 存余數(shù)(個(gè)位)
INC Rl
MOV @R1,A; 存商(十位)
INC Rl
INC R0
DJNZ R4,LOOP
RET
轉(zhuǎn)速賦初值:
ZSFCZ: MOV DPTR,#34X()H; 設(shè)置地址3400H
MOV R4,#02H; 兩個(gè)初值分別傳送
MOV R0,#21H; 設(shè)暫存單元首地址
LOOP: MOVX A,@DPTR
MOV @R0,A
DEC R0; 指向轉(zhuǎn)速百位、千位
INC DPTR; 指向轉(zhuǎn)速個(gè)位、十位
DJNZ R4, L
RET
主程序:
ORG 4200H
MAIN: LCALL SMLZ
LCALL ZSFCZ
MOV R6,#0AH; 置循環(huán)次數(shù),延時(shí)10S
LOOP1: LCALL DEL; 調(diào)用1S延時(shí)子程序
LCALL ADIO
LCALL ADCP
LCALL DLlms; 調(diào)用lms延時(shí)子程序
LCALL ZSDISP
DJNZ R6,LOOP1
LCALL KZYS
MOV P2,#02H;
ORL P2,#80H; 禁止片選信號(hào)
LCALL SMLZ
LCALL TOCSH
LCALL MBFCZ
LOOP2: LCALL CX
LCALL MBDISP
LCALL DLlms; 調(diào)用lms延時(shí)子程序
MOV R4,26H
CJNE R4,00H,L00P2; 判轉(zhuǎn)速是否為0,不為0,繼續(xù)
SETB P2.2; 鎖存秒表顯示
END
ATmega16單片機(jī)對(duì)A/D芯片TLC3545的初始化和采樣程序如下:
?void??Init_TLC3545(?) //初始化程序
?{
CS3545_A?=?0;?
CS3545_A?=?0;//這里是把拉低2us,TLC3545初始化把拉低至少1個(gè)SCLK時(shí)鐘
CS3545_A?=?1;
?}
?void????Sample_TLC3545(?) //采樣程序
?{
uint8 k;
EA?=?0;
EA?=?1;
CS3545_A?=?0;?
SPIDAT?=?0x77;?? //寫SPIDAT產(chǎn)生SCLK時(shí)鐘
while?(!ISPI);?
datah?=?SPIDAT;? //收TLC3545發(fā)出的前8位,第一個(gè)字節(jié)
SPIDAT?=?0x77;
while?(!ISPI);
????????datal?=?SPIDAT; //收后8位,第二個(gè)字節(jié)??
SPIDAT?=?0x77;? //繼續(xù)給SCLK時(shí)鐘,直到24thSCLK之后釋放cs
do?{
k?=?0;
}while(k);???? //拖延時(shí)間,讓TLC3545的在24個(gè)SCLK周期后才得以釋放
dUw0?=?((datah<<8)?+?(datal&0xfc));
? CS3545_A?=?1;
?}
數(shù)據(jù)采集器的串行口初始化和中斷子程序的代碼如下:
初始化程序:
MOV SCON,#50H ;設(shè)置成串口1方式
MOV PCON,#00H
MOV TMOD,#21H ;波特率發(fā)生器T1工作在模式2上
MOV TH1,#0FDH ;T1初始化,設(shè)定波特率為38400
MOV TL1,#0FDH
SETB TR1 ;啟動(dòng)波特率發(fā)生器
SETB EA
SETB ES ;允許串口中斷
串行中斷子程序:
SSERVER: MOV 34H, A ;保護(hù)現(xiàn)場(chǎng)
CLR ES
JNB RI, KZHD
CLR RI
MOV A, SBUF
CJNE A, #02H, KZHD ;若地址不匹配,開(kāi)串口中斷并中斷返回
MOV SBUF, #02H ;若匹配,發(fā)送自身地址
JNB TI, $
CLR TI
MOV R1, #40H ;發(fā)送采集的數(shù)據(jù)
MOV R4, #16
JIXU: MOV SBUF, @R1
JNB TI, $
CLR TI
INC R1
DJNZ R4, JIXU
MOV R1, #40H ;將采集數(shù)據(jù)存儲(chǔ)區(qū)清零
MOV R4, #16
QL: MOV @R1, #00
INC R1
DJNZ R4, QL
KZHD: SETB ES ;開(kāi)中斷
FANHUI: MOV A, 34H ;還原現(xiàn)場(chǎng)
RETI ;中斷返回
本系統(tǒng)實(shí)現(xiàn)串行通訊主要分兩步:MsComm控件屬性的設(shè)置和OnComm對(duì)事件作出響應(yīng)。詳細(xì)程序如下:
(1)MsComm控件屬性的設(shè)置
MsComm1.Settings=“38400,n,8,1”
’數(shù)據(jù)傳輸波特率為38400b/s,無(wú)奇偶校驗(yàn),8位數(shù)據(jù)位,1位停止位
MsComm1.ComPort=Y(jié) ’設(shè)Y為1,2,分別代表串行口1,2
MsComm1.Inputlen=0 ’將緩沖區(qū)內(nèi)容一次讀入
MsComm1.InBufferSize = 1024 ’接收緩沖區(qū)大小
MsComm1.InputMode = ComInputModeBinary ’數(shù)據(jù)以二進(jìn)制的格式取回
MsComm1.RThreshold = 2 ’接收兩個(gè)字節(jié)觸發(fā)一次OnComm事件
MsComm1.OutBufferSize = 512 ’傳輸緩沖區(qū)大小
MsComm1.PortOpen = True ’打開(kāi)串口
(2)OnComm事件響應(yīng)程序
Private Sub MSComm1_OnComm()
Dim i As Integer
Dim recdata() As Byte
’定義二進(jìn)制數(shù)組,由緩沖區(qū)接收到的數(shù)據(jù)用二進(jìn)制格式接收
Dim DataCom As Single ’數(shù)據(jù)轉(zhuǎn)換為Single格式
’以下程序是comEvReceive事件觸發(fā)后,將數(shù)據(jù)存入相應(yīng)的數(shù)組
Select Case MsComm1.CommEvent
Case ComEvReceive
recdata = MsComm1.Input
DataCom = (256 * recdata(i) + recdata(i - 1))
Next i
End Select
End Sub
本系統(tǒng)中利用ADO對(duì)象編程訪問(wèn)數(shù)據(jù)庫(kù)的具體使用方法如下:
首先,在Access中建立名為Datamb.mdb的數(shù)據(jù)庫(kù),表1為數(shù)據(jù)表的結(jié)構(gòu)。表中存儲(chǔ)了制動(dòng)壓力、閘間隙、油壓、運(yùn)行速度和安全回路狀態(tài),以及相應(yīng)的數(shù)據(jù)采集的時(shí)間。
表1 數(shù)據(jù)表結(jié)構(gòu)
字段名稱
數(shù)據(jù)類型
Id (編號(hào))
自動(dòng)編號(hào)
Datadat (日期)
日期/時(shí)間(短時(shí)間)
Datatim (時(shí)間)
日期/時(shí)間(長(zhǎng)時(shí)間)
Dataval1_press (壓力)
數(shù)字(單精度型)
Dataval1_gap (間隙)
數(shù)字(單精度型)
……
……
Dataval24_press (壓力)
數(shù)字(單精度型)
Dataval24_gap (間隙)
數(shù)字(單精度型)
Dataval1_oil
數(shù)字(單精度型)
Dataval2_oil
數(shù)字(單精度型)
Dataval_speed
數(shù)字(單精度型)
Dataval_relay
數(shù)字(布爾型)
其次,通過(guò)引用ADO對(duì)象建立數(shù)據(jù)庫(kù)中的表與數(shù)據(jù)源的連接:
Ado1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" & DataPath.Text & "; Persist Security Info=False"
Ado1.CommandType = adCmdTable
Ado1.RecordSource = "datamb"
再次,對(duì)數(shù)據(jù)表進(jìn)行操作,包括更新和清空:
Ado1.Refresh
If Ado1.Recordset.RecordCount > 0 Then
Ado1.Recordset.MoveFirst
While Not Ado1.Recordset.EOF
Ado1.Recordset.Delete
Ado1.Recordset.MoveNext
Wend
End If
最后,對(duì)數(shù)據(jù)記錄進(jìn)行操作,包括增加、修改、刪除記錄,以下是增加新記錄的程序代碼:
With Ado1.Recordset
.AddNew ’新增加一條記錄
.Fields(1).Value = Date ’數(shù)據(jù)采集日期
.Fields(2).Value = Time ’數(shù)據(jù)采集時(shí)間
For i=3 to 54
.Fields(i).Value = DataCom(i-2)
’將采集到的數(shù)據(jù)值賦給相應(yīng)的字段
Next i
.MoveNext
End with
形成報(bào)表的輸出,實(shí)現(xiàn)的主要代碼如下:
'//聲明一個(gè)WORD應(yīng)用程序,使WORD中的APPLICATION對(duì)象對(duì)自動(dòng)功能有效
Dim Myword As New Word.Application
'//定義變量,使其代表WORD的一篇文檔
Dim Mydoc As Word.Document
Dim Myrange As Range
Dim Mytable As Table
Dim mybook As Bookmark
Set Mydoc = Myword.Documents.OPEN(App.Path & "\報(bào)表模版.doc")
Mydoc.SaveAs (App.Path & "\報(bào)表1.doc")
'AppActivate Mydoc.Application.Caption
Set Mytable = Mydoc.Tables(1)
Mytable.Select
7