九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

接口課設實驗報告.doc

  • 資源ID:9044376       資源大?。?span id="24d9guoke414" class="font-tahoma">153.50KB        全文頁數(shù):33頁
  • 資源格式: DOC        下載積分:9.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

接口課設實驗報告.doc

接口課設實驗報告 計算機0206班 熊蘭君(012002013804)一緒論 本實驗是一個利用接口硬件平臺開發(fā)的微機模擬系統(tǒng),它不僅考查了我們的對接口硬件的掌握和理解程度,同樣了鍛煉了我們的編程能力。在組長的帶領下我們順利完成了這次實驗課設,并收獲了很多的相關(guān)知識,而且鍛煉了我們的團隊精神,受益匪淺。二實驗目的 掌握接口硬件開發(fā)平臺的使用方法,利用現(xiàn)有的實驗平臺和PC機,組成一個微機模擬應用系統(tǒng); 掌握基本接口電路的綜合應用掌握接口電路的驅(qū)動程序和界面軟件的設計與編制,學會調(diào)試與測試接口軟件的一般方法微機接口技術(shù)及接口芯片的綜合應用(重點)三 實驗題目及要求 選課系統(tǒng)學生通過下位機進行選課,上位機對選課信息進行統(tǒng)計。進入系統(tǒng)需要密碼,密碼錯誤或者操作錯誤時報警。 系統(tǒng)由一個主控機監(jiān)控和若干個下位機組成,主控機負責數(shù)據(jù)處理,下位機負責訪問接口。四 實驗內(nèi)容 這次我們所做的選課系統(tǒng)功能還比較強大,它主要由主控機,下位機,執(zhí)行部件構(gòu)成。1.機實現(xiàn)管理員的功能,界面如下:主界面主要是方便管理員管理學生基本信息,課程基本信息,選課基本信息。它的功能有:1.增加基本信息;2.刪除基本信息;3.查詢基本信息。注意,所有的數(shù)據(jù)信息都存放在Sql server 數(shù)據(jù)庫上,程序先分析管理員的指令,然后通過ODBC(Open DataBase Connecttion)接口操作數(shù)據(jù)庫。另外,主控機程序?qū)崿F(xiàn)的另一個功能,也就是本程序的核心功能,就是接受下位機的選課信息。當操作員按下“接受選課”按鈕后,主控機程序開始接受遠程選課信息,接收后會將該信息存入Sql server 數(shù)據(jù)庫中。2.下位機是給選課學生的信息窗口,它同時也起到了主控機和執(zhí)行部件信息傳送的作用,而實現(xiàn)這個功能是通過接口實驗臺上的可編程串行接口芯片8251。但是選課還是通過執(zhí)行部件,而不是通過下位機,這一點是十分重要的。以下就下位機的界面:下位機程序的功能是接受用戶選課信息,然后將該信息發(fā)送給上位機。需要選課的學生,可以先點擊“開始選課”的按鈕,然后用撥碼開關(guān)輸入想要選擇的功能。功能1代表選課,功能2代表查詢所有課程,功能3表示結(jié)束選課。選功能2后,程序會通過文本框輸出所有可供選擇的課程的相關(guān)信息。選功能1后,程序會一步一步提示用戶來操作。這里有兩個問題,第一是如果學生輸入的密碼錯誤,上位機會發(fā)送回代表錯誤的信息,下位機根據(jù)該信息驅(qū)動LED顯示燈報警;第二,如果學生所選的課程不存在,上位機亦會發(fā)送回相應錯誤代號,下位機根據(jù)該代號啟動報警程序。 3執(zhí)行部件由接口實驗臺上的芯片:可編程的并行I/O接口芯片8255,可編程計數(shù)器8253,LED顯示燈,手動開關(guān)和一個按鈕開關(guān)組成。它主要做為學生選課的輸入和警報提示。學生通過手動開關(guān)撥出用戶名密碼,還有想選的課程號,按下按鈕表示確定。還可以選擇查看課程號和課程名。以上就是本系統(tǒng)的大致功能,當然這只是一個模擬的系統(tǒng),它實現(xiàn)的功能都很簡單。真正要達到實用的階段,還有很多細節(jié)需要完善。但基本的框架,在本系統(tǒng)中已經(jīng)得到了體現(xiàn)。 五.實施計劃及分工分工如下:首先夏永同學負責整個系統(tǒng)框架的設計,odbc數(shù)據(jù)源的配置以及界面的設計。吳莎同學和武孟夢同學負責上位機各個功能的實現(xiàn)以及與下位機的通信。我和賈玉芳同學負責下位機各個功能的實現(xiàn)以及硬件連接。同時我們所有人都參與了系統(tǒng)的測試工作。 首先是硬件的連接,按照我們的大概的設計,下位機有一個很重要的的功能,就是反饋執(zhí)行部件的選擇信息,而這項功能除了軟件的設計外,最重要的就是硬件連接。對于執(zhí)行部件與下位機的通信重要是靠可編程并口8255實現(xiàn)的,對于8255我們用到了它的A口進行輸出,B口進行輸入,C口作為控制口。PA0PA7依次連接的是實驗臺上的八個燈,其作用是當用戶名和密碼不符合主控機中已存的相應的用戶名和密碼時,這八個燈就會輪回閃爍產(chǎn)生報警的效果。PB0PB7依次與實驗臺上八個撥碼開關(guān)連接,當用戶要輸入數(shù)字信息時,通過這八個開關(guān)進行輸入(注意這里的數(shù)字是用二進制輸入而不是八位十進制數(shù)字),開始的時候我們將高低位接反了,直接導致整個系統(tǒng)混亂,因為功能項輸入錯誤。PC0口作為SW1的輸入口,當SW1按下時,會給PC0一個電平,程序輪詢查看,若發(fā)現(xiàn)PC0口變?yōu)椤?”時,就將撥碼開關(guān)的數(shù)字傳送給下位機進行處理,所以這里PC0作為控制作用,這里還要注意在連接SW1時,還要經(jīng)過一個74SL373芯片,這個芯片的OE#口必須和8255的PC4口連接,用PC4口來控制74SL373,當PC4等于“1”時,74SL373關(guān)閉,這時SW1就沒有任何作用了。還有就是負責雙機通信的8251芯片,這里我們用一根連接線將主控機和下位機到26芯插座連接起來進行近距離通信,這個在實驗平臺已經(jīng)完成好了,所以不再贅述??刂?251時鐘的是8253芯片,它的OUT2端與 8251的 TxC和RxC相連進行控制,而8253的時鐘脈沖端CLK2與1MHZ脈沖信號進行連接,至于它的GATE2與8255的PC6口連接進行脈沖源的控制,以上就是下位機與執(zhí)行部件的硬件連接。 接下來就是程序的設計了,我們開始用的C語言進行編寫,后來因為要進一步完善系統(tǒng)功能,要用到ODBC連接數(shù)據(jù)庫,還有界面的編寫就將持續(xù)移植到VC上使用C+語言。程序主要實現(xiàn)的功能有:1.將用戶名和密碼輸入并傳給主控機進行正確性的判斷;2. 當用戶選擇“1”號功能時,用戶可以進行選課,下位機將選課信息(學生號和課程號)傳給主控機并存儲起來;3. 當用戶選擇“2”號功能時,用戶可以查看選課信息(課程號和課程名); 4.當用戶選擇“3”功能時,退出選課系統(tǒng)。 這個程序按照功能來劃分兩大部分,一個是與傳送信息有關(guān)程序,二者是與界面有關(guān)的程序。由于界面相關(guān)程序由夏永同學負責,所以這里就不多說了,我們主要負責的是傳送信息有關(guān)的程序,大概如下:#define PORTTALK_TYPE 40001#define IOCTL_READ_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS)#define IOCTL_WRITE_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS)#define IOCTL_GETINTCODE_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x906, METHOD_BUFFERED, FILE_ANY_ACCESS)unsigned char OpenPortTalk(void);void ClosePortTalk(void);void outportb(unsigned short PortAddress, unsigned char byte);unsigned char inportb(unsigned short PortAddress);portb(unsigned short PortAddress); /myport.cpp#include "stdafx.h"#include "conio.h"#include "windows.h"#include <winioctl.h>#include "myport.h"HANDLE PortTalk_Handle = NULL; /*界面相關(guān)*/unsigned char OpenPortTalk()PortTalk_Handle = CreateFile(".MPNP1", GENERIC_READ | GENERIC_WRITE, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if(PortTalk_Handle = INVALID_HANDLE_VALUE)return -1;return 0;void ClosePortTalk()CloseHandle(PortTalk_Handle);void outportb(unsigned short PortAddress, unsigned char byte) /*寫字符傳到對應地 /*址的端口DWORD dwError = 0;unsigned int error;DWORD BytesReturned; unsigned char Buffer3; /*BUFFER和pBUFFER是傳送過程中的unsigned char * pBuffer; /*中間緩沖區(qū)pBuffer = (unsigned char *)&Buffer0;*pBuffer = (unsigned char)PortAddress&0x0f;Buffer2 = byte;error = DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,&Buffer,3,NULL,0,&BytesReturned,NULL);unsigned char inportb(unsigned short PortAddress) /*讀對應地址的端口的信息unsigned int error;DWORD BytesReturned;unsigned char Buffer3; /*BUFFER和pBUFFER是傳送過程中的unsigned short * pBuffer; /*中間緩沖區(qū)pBuffer = (unsigned short *)&Buffer0;*pBuffer = (unsigned char)PortAddress&0x0f;error = DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,&Buffer,2,&Buffer,1,&BytesReturned,NULL);return(Buffer0);/ class CClientDlg : public CDialogpublic:CClientDlg(CWnd* pParent = NULL);void Init8251(int state,int work); /*初始化8251芯片void Trans(int tran); /*通過8251芯片傳送數(shù)值tranint Recei(); /*接收發(fā)送到8251芯片的數(shù)值,便返回該值void set_bps(int bps); /*設置8253計數(shù)器的計數(shù)初值void sTrans(char * s); /*傳送字符串svoid sRecei(char * s); /*接受一個字符串,并存入s中void AddSC(int sid,int cid); /*添加一個選課記錄void sw(); /*檢測開關(guān)sw1有沒有按下,如沒有按下,則等待void Warning(int level); /*當用戶名和密碼不對時進行報警enum IDD = IDD_SERVER_DIALOG ;CEditm_Output; /*系統(tǒng)信息CStringm_sid; /*學生信息中的學號信息CStringm_sname; /*學生信息中的學生姓名信息CStringm_password; /*密碼信息CStringm_cid; /*課程信息中的課程號信息CStringm_cname; /*課程信息中的課程名信息CStringm_ssid; /*選課信息中的學生號信息CStringm_ccid; /*選課信息中的課程號信息/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CServerDlg)public:virtual LRESULT DisplayMessage(WPARAM wParam, LPARAM lParam) ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUALprotected:/ Generated message map functions/AFX_MSG(CServerDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnDestroy();afx_msg void OnButton1();/查詢所有課程afx_msg void OnButton2();/選課afx_msg void OnButton3();/確定/AFX_MSGDECLARE_MESSAGE_MAP();/ CClientDlg.cpp #include "StdAfx.h"#include "Server.h"#include "ServerDlg.h"#include "ServerDlg.h"#include <afxdb.h>#define factor 16 /*波特率因子16unsigned long int clk = 1193182; /*8251輸入時鐘頻率(十六進制表示)CClientDlg: CClientDlg (CWnd* pParent ): CDialog(CClientDlg:IDD, pParent)/AFX_DATA_INIT(CServerDlg)m_sid = _T("");m_password = _T("");m_cid = _T("");/AFX_DATA_INIT/以上是程序面板上文本框?qū)淖兞康亩xvoid CClientDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CServerDlg)DDX_Control(pDX, IDC_EDIT1, m_Output);DDX_Text(pDX, IDC_EDIT2, m_sid);DDX_Text(pDX, IDC_EDIT4, m_password);DDX_Text(pDX, IDC_EDIT5, m_cid);/AFX_DATA_MAP/以上是變量與資源的對應關(guān)系BEGIN_MESSAGE_MAP(CServerDlg, CDialog)/AFX_MSG_MAP(CServerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_DESTROY()ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)/AFX_MSG_MAPEND_MESSAGE_MAP()/以上是消息與按鈕對應關(guān)系的說明void CClientDlg:Init8251(int state,int work) /*8251的初始化*/outportb(IO_BASE+9, 0x0) ; /* 空操作*/outportb(IO_BASE+9, 0x40) ; /* 內(nèi)部復位(使D6=1)*/outportb(IO_BASE+9, 0x4e) ; /* 方式命令字,,查課本p180*/outportb(IO_BASE+9, 0x27) ; /*工作命令字,例子p183*/void CClientDlg:set_bps(int bps) /*計數(shù)器設置int i,sendhigh,sendlow; i=clk/bps;i=i/factor;/計算計數(shù)初值sendhigh = (i>>8)&0x00ff;sendlow = i & 0x00ff;outportb(IO_BASE+7,0xb6);outportb(IO_BASE+6,sendlow);/裝計數(shù)初值低字節(jié)outportb(IO_BASE+6,sendhigh);/裝計數(shù)初值高字節(jié)void CClientDlg:Trans(int tran)/發(fā)送字符int state;dostate=inportb(IO_BASE+9);while(!(state=state&0x01);outportb(IO_BASE+8,tran);/*發(fā)送字符*/int CClientDlg:Recei()/接收字符 int r,state; do state=inportb(IO_BASE+9); while(!(state=state&0x02); r=inportb(IO_BASE+8);/*接收字符*/ return r;void CClientDlg:sTrans(char * s)/傳送字符串 int length=strlen(s); Trans(length); int i=0; for(;i<length;i+) Trans(si);void CClientDlg:Warning(int level) /*用戶名和密碼不匹配Init8255(1);printf("Password error or User not exist!n");if(level=1) int i=0;for(;i<50;i+) outportb(IO_BASE +0,i); delay(100); void CClientDlg:sw(void) /*SW的按鍵控制*/int temp1,temp2,recv;temp1=inportb(IO_BASE +3); /*讀8255的PC0口outportb(IO_BASE +3,0x81);outportb(IO_BASE +3,0x09);/置PC4=1關(guān)閉74LS373dorecv = inportb(IO_BASE +3);while(0x01&recv)!=0);/查SW1按下outportb(IO_BASE +3,0x02);outportb(IO_BASE +3,0x08);/outportb(IO_BASE +3,temp1);void CServerDlg:sRecei(char * s)/接收字符串 int length=Recei(); int i=0; for(;i<length;i+) si=Recei();void CClientDlg:OnButton3() /選課按鈕 int cid,Rflag,iflag=1,sid,password,i,choose,exit=1,x,fflag=1,recv,cflag;char ch,*cx;while(exit) MessageBox(”請通過撥碼開關(guān)輸入你想執(zhí)行功能的代號!撥好后按sw1按鈕輸入。”); sw(); Init8255(1);choose=inportb(0x301); if(choose=1) MessageBox(”請通過撥碼開關(guān)輸入你的學號!撥好后按sw1按鈕輸入?!保? sw();Init8255(1);sid=inportb(IO_BASE +1);MessageBox(”請通過撥碼開關(guān)輸入你的密碼!撥好后按sw1按鈕輸入?!保? sw ();Init8255(1);password=inportb(IO_BASE +1);MessageBox(”請通過撥碼開關(guān)輸入你想選擇的課程代號!撥好后按sw1按鈕輸入。”); sw();Init8255(1); cid=inportb(IO_BASE +1);m_sid=sid;m_password=password;m_cid=cid;UpdateData(false);/在面板上輸出學生通過撥碼開關(guān)輸入的信息/開始傳送用戶輸入的信息至上位機set_bps(1200);Init8251(1,1);outportb(IO_BASE +3,0x80);outportb(IO_BASE +3,0x0d);/置PC6=1,打開8253-5的GATE2,開始輸出方波Trans(choose);Trans(sid);Trans(password);Rflag=Recei();if(Rflag)m_Output.ReplaceSel ("User login!n");else Warning(1);continue;Trans(cid);cflag=Recei();if(cflag)/為1說明課程存在 m_Output.ReplaceSel ("Select successfully!n");else m_Output.ReplaceSel ("Course is not exists!");/ifelse if(choose=2) set_bps(1200);Init8251(1,1);outportb(IO_BASE +3,0x80);/置PC6=1,打開8253-5的GATE2,開始輸出方波outportb(IO_BASE +3,0x0d);Trans(choose);int length,cid,i=0;char cnameLENGTH;m_Output.ReplaceSel ("The course information :rn");m_Output.ReplaceSel ("course-id course-namern");length=Recei();for(;i<length;+i)cid=Recei();sRecei(cname);m_Output.ReplaceSel ("%d ",cid);m_Output.ReplaceSel ("%sn",cname); else if(choose=3)set_bps(1200);Init8251(1,1);outportb(IO_BASE + 3,0x80);/置PC6=1,打開8253-5的GATE2,開始輸出方波outportb(IO_BASE + 3,0x0d);Trans(choose);exit=0;。 五 流程圖開 始Exit=1查詢SW1是否按下8251初始化CHOOSE=1讀8251A口賦給CHOOSE看SW1是否按下8251初始化讀8251A口賦給SID看SW1是否按下8251初始化CHOOSE=28251初始化傳給主控機選擇相應功能主控機返回相關(guān)課程信息CHOOSE=38251初始化傳給主控機選擇相應信息EXIT=0 讀8251A口賦給PASSWORD看SW1是否按下8251初始化讀8251A口賦給CID進入主控機的相應功能進行選課傳給主控機主控機傳來的RFLAG=1?主控機傳來的CFLAG=1?結(jié) 束 發(fā)出警報開 始課程錯誤 七實驗體會 如同原來的大型課設一樣,這次課設的成功也費了一番周折。開始我以為一組有那么多人,一定可以馬上就能完成,再看看題目也沒覺得有多么難。結(jié)果真正深入后才發(fā)現(xiàn)并不是我想的那么簡單,在剛接觸接口時我們做的實驗都很容易,而且都用的是匯編語言。但是如果我們這個選課系統(tǒng)還用匯編是行不通的,因為有很多判斷功能用匯編是很難的,所以大家商量了以后就用了我們比較熟悉的C語言。因為實驗機支持C語言所以開始動手并不算困難,而且有很多函數(shù)就已經(jīng)寫好了,比如:OUTPORTB,INPUTB等。我們在布置任務的第二天就已經(jīng)寫好開概程序,后來經(jīng)過調(diào)試也沒多大問題。當我們以為一切都搞好了之后實驗老師忽然說不能用臺子上的排線要自己連,想想也是,就編了個小程序就說完成了接口設是不可能的。于是我們開始動手連起來了,最開始我們試著進行開關(guān)與下位機的通信,發(fā)現(xiàn)傳的數(shù)字是錯誤的,才發(fā)現(xiàn)了原來高低位接反了。這還是個小問題,大問題是我們的SW1的確認信號怎么也傳不到下位機,老是自動有確認信號,原來開始我們都以為SW1的控制信號是通過PC1傳過去的,但仔細看看才發(fā)現(xiàn)是PC0口。程序是我們編的,發(fā)生這種事實在不應該,還有SW1要連接的74SL373要通過8255D 的PC4口連接,我們開始也沒注意。這些都是硬件問題還好解決,程序的問題更讓人頭疼,因為我們并沒有編寫界面,所以第一次檢查的時候老師并沒有讓我們通過,說作為一個系統(tǒng)界面是很重要的。于是我們又開始編寫界面,因為C語言不支持界面,所以我們只好把整個C語言程序移植到VC+中去,真的很麻煩有一些函數(shù)跟本不能使用,有一些函數(shù)在使用時與原來不同,就好像OUTPORTB等,我們的組長C+基礎很好,所以他帶著我們編,花了一天時間也就好了。而我負責的通信部分也沒有那么難移植,只用改一些細節(jié)就可以了。弄好一切后,我們的系統(tǒng)就好了,也通過了老師的檢查,但是還是有很多不足,比如功能上的欠缺,有很多功能本可以完成但實在很困難,所以沒有繼續(xù)下去,老師曾提示我們主控機針對多個下位機的情況要經(jīng)過輪詢,這才跟現(xiàn)實功能都比較接近,我們也還只是一個實驗系統(tǒng),十分脆弱,還不能運用到實際中去,我們以后會把這個作為今后的發(fā)展目標。原來做實驗最多只有兩個人一起,但是這個實驗是由我們五個人一起完成的,開始還有懷疑五個人的想法不同不好干事,但我們的組長十分有想法,他和我們商量好大概的構(gòu)想之后就分配好每個人的任務,大家在十分友好協(xié)作的氛圍中完成了課設。讓我感覺每個工程背后都是一個團隊的辛苦汗水換來的。同時也更好的理解了原來學過的接口原理,也讓我明白課設是溫習所學知識的最好方法,努力去做一定回有收獲。八源碼選課系統(tǒng)源代碼如下 說明:系統(tǒng)程序代碼采用VC的MFC編制,很多代碼是系統(tǒng)自動生成的。以下僅列出我們自己編寫的代碼部分。 程序中用到了ODBC數(shù)據(jù)源select,該數(shù)據(jù)源在控制面板中建立,用來訪問數(shù)據(jù)庫SelectCourse,該數(shù)據(jù)庫中存放有3張表,分別是St,Co,Sc,代表學生,課程,和選課記錄。以下是建立數(shù)據(jù)庫時的sql語句:create database SelectCourse;create table St(sid int not null primary key,sname char(10),password int);create table Co(cid int not null primary key,cname char(10);create table Sc(sid int,cid int,primary key (sid,cid);insert into St values(1,張浩,88);insert into St values(2,劉樹偉,88);insert into Co values(1,數(shù)學);insert into Co values(2,語文);數(shù)據(jù)源建好后,程序便可良好運行了。主控機程序代碼:/myport.h#define PORTTALK_TYPE 40001#define IOCTL_READ_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x904, METHOD_BUFFERED, FILE_ANY_ACCESS)#define IOCTL_WRITE_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x905, METHOD_BUFFERED, FILE_ANY_ACCESS)#define IOCTL_GETINTCODE_PORT_UCHAR CTL_CODE(PORTTALK_TYPE, 0x906, METHOD_BUFFERED, FILE_ANY_ACCESS)unsigned char OpenPortTalk(void);void ClosePortTalk(void);void outportb(unsigned short PortAddress, unsigned char byte);unsigned char inportb(unsigned short PortAddress);portb(unsigned short PortAddress); /myport.cpp#include "stdafx.h"#include "conio.h"#include "windows.h"#include <winioctl.h>#include "myport.h"HANDLE PortTalk_Handle = NULL; /* Handle for PortTalk Driver */unsigned char OpenPortTalk()PortTalk_Handle = CreateFile(".MPNP1", GENERIC_READ | GENERIC_WRITE, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if(PortTalk_Handle = INVALID_HANDLE_VALUE)return -1;return 0;void ClosePortTalk()CloseHandle(PortTalk_Handle);void outportb(unsigned short PortAddress, unsigned char byte)DWORD dwError = 0;unsigned int error;DWORD BytesReturned; unsigned char Buffer3;unsigned char * pBuffer;pBuffer = (unsigned char *)&Buffer0;*pBuffer = (unsigned char)PortAddress&0x0f;Buffer2 = byte;error = DeviceIoControl(PortTalk_Handle,IOCTL_WRITE_PORT_UCHAR,&Buffer,3,NULL,0,&BytesReturned,NULL);unsigned char inportb(unsigned short PortAddress)unsigned int error;DWORD BytesReturned;unsigned char Buffer3;unsigned short * pBuffer;pBuffer = (unsigned short *)&Buffer0;*pBuffer = (unsigned char)PortAddress&0x0f;error = DeviceIoControl(PortTalk_Handle,IOCTL_READ_PORT_UCHAR,&Buffer,2,&Buffer,1,&BytesReturned,NULL);return(Buffer0);/ServerDlg.h : class CServerDlg : public CDialogpublic:CServerDlg(CWnd* pParent = NULL);void Init8251(int state,int work);/初始化8251芯片void Trans(int tran);/通過8251芯片傳送數(shù)值tranint Recei();/接收發(fā)送到8251芯片的數(shù)值,便返回該值void set_bps(int bps);/設置8253計數(shù)器的計數(shù)初值int getPassword(int ssid);/返回學號為ssid的同學的密碼int checkCid(int ccid);/檢查課號為ccid的課程是否存在void sTrans(char * s);/傳送字符串svoid sRecei(char * s);/接受一個字符串,并存入s中void AddSC(int sid,int cid);/添加一個選課記錄enum IDD = IDD_SERVER_DIALOG ;CEditm_Output;CStringm_sid;CStringm_sname;CStringm_password;CStringm_cid;CStringm_cname;CStringm_ssid;CStringm_ccid;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CServerDlg)public:virtual LRESULT DisplayMessage(WPARAM wParam, LPARAM lParam) ;protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUALprotected:/ Generated message map functions/AFX_MSG(CServerDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnDestroy();afx_msg void OnButton3();afx_msg void OnButton1();afx_msg void OnButton2();afx_msg void OnButton5();afx_msg void OnButton4();afx_msg void OnButton6();afx_msg void OnButton7();afx_msg void OnButton11();afx_msg void OnButton12();/AFX_MSGDECLARE_MESSAGE_MAP();/ ServerDlg.cpp #include "StdAfx.h"#include "Server.h"#include "ServerDlg.h"#include "ServerDlg.h"#include <afxdb.h>#define factor 16 /波特率因子16unsigned long int clk = 1193182;/8251輸入時鐘頻率(十六進制表示)CServerDlg:CServerDlg(CWnd* pParent ): CDialog(CServerDlg:IDD, pParent)/AFX_DATA_INIT(CServerDlg)m_sid = _T("");m_sname = _T("");m_password = _T("");m_cid = _T("");m_cname = _T("");m_ssid = _T("");m_ccid = _T("");/AFX_DATA_INIT/以上是程序面板上文本框?qū)淖兞康亩xvoid CServerDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CServerDlg)DDX_Control(pDX, IDC_EDIT1, m_Output);DDX_Text(pDX, IDC_EDIT2, m_sid);DDX_Text(pDX, IDC_EDIT3, m_sname);DDX_Text(pDX, IDC_EDIT4, m_password);DDX_Text(pDX, IDC_EDIT5, m_cid);DDX_Text(pDX, IDC_EDIT6, m_cname);DDX_Text(pDX, IDC_EDIT7, m_ssid);DDX_Text(pDX, IDC_EDIT8, m_ccid);/AFX_DATA_MAP/以上是變量與資源的對應關(guān)系BEGIN_MESSAGE_MAP(CServerDlg, CDialog)/AFX_MSG_MAP(CServerDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_DESTROY()ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON5, OnButton5)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON6, OnButton6)ON_BN_CLICKED(IDC_BUTTON7, OnButton7)ON_BN_CLICKED(IDC_BUTTON11, OnButton11)ON_BN_CLICKED(IDC_BUTTON12, OnButton12)/AFX_MSG_MAPEND_MESSAGE_MAP()/以上是消息與按鈕對應關(guān)系的說明void CServerDlg:Init8251(int state,int work) outportb(IO_BASE+9, 0x0) ;outportb(IO_BASE+9, 0x40) ;outportb(IO_BASE+9, 0x4e) ;outportb(IO_BASE+9, 0x27) ;void CServerDlg:set_bps(int bps)int i,sendhigh,sendlow;i=clk/bps;i=i/factor;/計算計數(shù)初值sendhigh = (i>>8)&0x00ff;sendlow = i & 0x00ff;outportb(IO_BASE+7,0xb6);outportb(IO_BASE+6,sendlow);/裝計數(shù)初值低字節(jié)outportb(IO_BASE+6,sendhigh);/裝計數(shù)初值高字節(jié)void CServerDlg:Trans(int tran)/發(fā)送字符int state;dostate=inportb(IO_BASE+9);while(!(state=state&0x01);outportb(IO_BASE+8,tran);/*發(fā)送字符*/int CServerDlg:Recei()/接收字符 int r,state; do state=inportb(IO_BASE+9); while(!(state=state&0x02); r=inportb(IO_BASE+8);/*接收字符*/ return r;int CServerDlg:getPassword(int ssid)/根據(jù)學號ssid查詢數(shù)據(jù)庫中該記錄的psswordCDatabase database;database.Open(_T("select");/數(shù)據(jù)源名稱CString temp=" "int pass;CRecordset recset;recset.m_pDatabase=&database; CString str=""CDBVariant var;str.Format("%d",ssid);CString Req="SELECT * FROM St where sid="+str+""str=""recset.Open(CRecordset:forwardOnly, Req, CRecordset:readOnly);if(recset.IsEOF() m_Output.ReplaceSel("用戶不存在!");return 0;else m_Output.ReplaceSel("該用戶存在 !rn"); recset.GetFieldValue("password", var ); pass=var.m_iVal;recset.Close(); return pass;int CServerDlg:checkCid(int ccid)/檢查課程號為ccid的課程是否存在CDatabase database;database.Open(_T("select");/數(shù)據(jù)源名稱CString temp=" "CRecordset recset;recset.m_pDatabase=&database; CString str=""CDBVariant var;str.Format("%d",ccid);CString Req="SELECT * FROM Co where cid="+str+""str=""recset.Open(CRecordse

注意事項

本文(接口課設實驗報告.doc)為本站會員(jian****018)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!