《接口課設(shè)實(shí)驗(yàn)報(bào)告.doc》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《接口課設(shè)實(shí)驗(yàn)報(bào)告.doc(33頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
接口課設(shè)實(shí)驗(yàn)報(bào)告
計(jì)算機(jī)0206班 熊蘭君(012002013804)
一.緒論
本實(shí)驗(yàn)是一個(gè)利用接口硬件平臺(tái)開(kāi)發(fā)的微機(jī)模擬系統(tǒng),它不僅考查了我們的對(duì)接口硬件的掌握和理解程度,同樣了鍛煉了我們的編程能力。在組長(zhǎng)的帶領(lǐng)下我們順利完成了這次實(shí)驗(yàn)課設(shè),并收獲了很多的相關(guān)知識(shí),而且鍛煉了我們的團(tuán)隊(duì)精神,受益匪淺。
二.實(shí)驗(yàn)?zāi)康?
掌握接口硬件開(kāi)發(fā)平臺(tái)的使用方法,利用現(xiàn)有的實(shí)驗(yàn)平臺(tái)和PC機(jī),組成一個(gè)微機(jī)模擬應(yīng)用系統(tǒng);
掌握基本接口電路的綜合應(yīng)用
掌握接口電路的驅(qū)動(dòng)程序和界面軟件的設(shè)計(jì)與編制,學(xué)會(huì)調(diào)試與測(cè)試接口軟件的一般方法
微機(jī)接口技術(shù)及接口芯片的綜合應(yīng)用(重點(diǎn))
三. 實(shí)驗(yàn)題目及要求
選課系統(tǒng)
學(xué)生通過(guò)下位機(jī)進(jìn)行選課,上位機(jī)對(duì)選課信息進(jìn)行統(tǒng)計(jì)。進(jìn)入系統(tǒng)需要密碼,密碼錯(cuò)誤或者操作錯(cuò)誤時(shí)報(bào)警。
系統(tǒng)由一個(gè)主控機(jī)監(jiān)控和若干個(gè)下位機(jī)組成,主控機(jī)負(fù)責(zé)數(shù)據(jù)處理,下位機(jī)負(fù)責(zé)訪(fǎng)問(wèn)接口。
四. 實(shí)驗(yàn)內(nèi)容
這次我們所做的選課系統(tǒng)功能還比較強(qiáng)大,它主要由主控機(jī),下位機(jī),執(zhí)行部件構(gòu)成。
1.機(jī)實(shí)現(xiàn)管理員的功能,界面如下:
主界面主要是方便管理員管理學(xué)生基本信息,課程基本信息,選課基本信息。它的功能有:1.增加基本信息;2.刪除基本信息;3.查詢(xún)基本信息。注意,所有的數(shù)據(jù)信息都存放在Sql server 數(shù)據(jù)庫(kù)上,程序先分析管理員的指令,然后通過(guò)ODBC(Open DataBase Connecttion)接口操作數(shù)據(jù)庫(kù)。另外,主控機(jī)程序?qū)崿F(xiàn)的另一個(gè)功能,也就是本程序的核心功能,就是接受下位機(jī)的選課信息。當(dāng)操作員按下“接受選課”按鈕后,主控機(jī)程序開(kāi)始接受遠(yuǎn)程選課信息,接收后會(huì)將該信息存入Sql server 數(shù)據(jù)庫(kù)中。
2.下位機(jī)是給選課學(xué)生的信息窗口,它同時(shí)也起到了主控機(jī)和執(zhí)行部件信息傳送的作用,而實(shí)現(xiàn)這個(gè)功能是通過(guò)接口實(shí)驗(yàn)臺(tái)上的可編程串行接口芯片8251。
但是選課還是通過(guò)執(zhí)行部件,而不是通過(guò)下位機(jī),這一點(diǎn)是十分重要的。以下就下位機(jī)的界面:
下位機(jī)程序的功能是接受用戶(hù)選課信息,然后將該信息發(fā)送給上位機(jī)。需要選課的學(xué)生,可以先點(diǎn)擊“開(kāi)始選課”的按鈕,然后用撥碼開(kāi)關(guān)輸入想要選擇的功能。
功能1代表選課,功能2代表查詢(xún)所有課程,功能3表示結(jié)束選課。
選功能2后,程序會(huì)通過(guò)文本框輸出所有可供選擇的課程的相關(guān)信息。選功能1后,程序會(huì)一步一步提示用戶(hù)來(lái)操作。這里有兩個(gè)問(wèn)題,第一是如果學(xué)生輸入的密碼錯(cuò)誤,上位機(jī)會(huì)發(fā)送回代表錯(cuò)誤的信息,下位機(jī)根據(jù)該信息驅(qū)動(dòng)LED顯示燈報(bào)警;第二,如果學(xué)生所選的課程不存在,上位機(jī)亦會(huì)發(fā)送回相應(yīng)錯(cuò)誤代號(hào),下位機(jī)根據(jù)該代號(hào)啟動(dòng)報(bào)警程序。
3執(zhí)行部件由接口實(shí)驗(yàn)臺(tái)上的芯片:可編程的并行I/O接口芯片8255,可編程計(jì)數(shù)器8253,LED顯示燈,手動(dòng)開(kāi)關(guān)和一個(gè)按鈕開(kāi)關(guān)組成。它主要做為學(xué)生選課的輸入和警報(bào)提示。
學(xué)生通過(guò)手動(dòng)開(kāi)關(guān)撥出用戶(hù)名密碼,還有想選的課程號(hào),按下按鈕表示確定。還可以選擇查看課程號(hào)和課程名。
以上就是本系統(tǒng)的大致功能,當(dāng)然這只是一個(gè)模擬的系統(tǒng),它實(shí)現(xiàn)的功能都很簡(jiǎn)單。真正要達(dá)到實(shí)用的階段,還有很多細(xì)節(jié)需要完善。但基本的框架,在本系統(tǒng)中已經(jīng)得到了體現(xiàn)。
五.實(shí)施計(jì)劃及分工
分工如下:首先夏永同學(xué)負(fù)責(zé)整個(gè)系統(tǒng)框架的設(shè)計(jì),odbc數(shù)據(jù)源的配置以及界面的設(shè)計(jì)。吳莎同學(xué)和武孟夢(mèng)同學(xué)負(fù)責(zé)上位機(jī)各個(gè)功能的實(shí)現(xiàn)以及與下位機(jī)的通信。我和賈玉芳同學(xué)負(fù)責(zé)下位機(jī)各個(gè)功能的實(shí)現(xiàn)以及硬件連接。同時(shí)我們所有人都參與了系統(tǒng)的測(cè)試工作。
首先是硬件的連接,按照我們的大概的設(shè)計(jì),下位機(jī)有一個(gè)很重要的的功能,就是反饋執(zhí)行部件的選擇信息,而這項(xiàng)功能除了軟件的設(shè)計(jì)外,最重要的就是硬件連接。對(duì)于執(zhí)行部件與下位機(jī)的通信重要是靠可編程并口8255實(shí)現(xiàn)的,對(duì)于8255我們用到了它的A口進(jìn)行輸出,B口進(jìn)行輸入,C口作為控制口。PA0~PA7依次連接的是實(shí)驗(yàn)臺(tái)上的八個(gè)燈,其作用是當(dāng)用戶(hù)名和密碼不符合主控機(jī)中已存的相應(yīng)的用戶(hù)名和密碼時(shí),這八個(gè)燈就會(huì)輪回閃爍產(chǎn)生報(bào)警的效果。PB0~PB7依次與實(shí)驗(yàn)臺(tái)上八個(gè)撥碼開(kāi)關(guān)連接,當(dāng)用戶(hù)要輸入數(shù)字信息時(shí),通過(guò)這八個(gè)開(kāi)關(guān)進(jìn)行輸入(注意這里的數(shù)字是用二進(jìn)制輸入而不是八位十進(jìn)制數(shù)字),開(kāi)始的時(shí)候我們將高低位接反了,直接導(dǎo)致整個(gè)系統(tǒng)混亂,因?yàn)楣δ茼?xiàng)輸入錯(cuò)誤。PC0口作為SW1的輸入口,當(dāng)SW1按下時(shí),會(huì)給PC0一個(gè)電平,程序輪詢(xún)查看,若發(fā)現(xiàn)PC0口變?yōu)椤?”時(shí),就將撥碼開(kāi)關(guān)的數(shù)字傳送給下位機(jī)進(jìn)行處理,所以這里PC0作為控制作用,這里還要注意在連接SW1時(shí),還要經(jīng)過(guò)一個(gè)74SL373芯片,這個(gè)芯片的OE#口必須和8255的PC4口連接,用PC4口來(lái)控制74SL373,當(dāng)PC4等于“1”時(shí),74SL373關(guān)閉,這時(shí)SW1就沒(méi)有任何作用了。還有就是負(fù)責(zé)雙機(jī)通信的8251芯片,這里我們用一根連接線(xiàn)將主控機(jī)和下位機(jī)到26芯插座連接起來(lái)進(jìn)行近距離通信,這個(gè)在實(shí)驗(yàn)平臺(tái)已經(jīng)完成好了,所以不再贅述。控制8251時(shí)鐘的是8253芯片,它的OUT2端與 8251的 TxC和RxC相連進(jìn)行控制,
而8253的時(shí)鐘脈沖端CLK2與1MHZ脈沖信號(hào)進(jìn)行連接,至于它的GATE2與8255的PC6口連接進(jìn)行脈沖源的控制,以上就是下位機(jī)與執(zhí)行部件的硬件連接。
接下來(lái)就是程序的設(shè)計(jì)了,我們開(kāi)始用的C語(yǔ)言進(jìn)行編寫(xiě),后來(lái)因?yàn)橐M(jìn)一步完善系統(tǒng)功能,要用到ODBC連接數(shù)據(jù)庫(kù),還有界面的編寫(xiě)就將持續(xù)移植到VC上使用C++語(yǔ)言。程序主要實(shí)現(xiàn)的功能有:1.將用戶(hù)名和密碼輸入并傳給主控機(jī)進(jìn)行正確性的判斷;2. 當(dāng)用戶(hù)選擇“1”號(hào)功能時(shí),用戶(hù)可以進(jìn)行選課,下位機(jī)將選課信息(學(xué)生號(hào)和課程號(hào))傳給主控機(jī)并存儲(chǔ)起來(lái);3. 當(dāng)用戶(hù)選擇“2”號(hào)功能時(shí),用戶(hù)可以查看選課信息(課程號(hào)和課程名); 4.當(dāng)用戶(hù)選擇“3”功能時(shí),退出選課系統(tǒng)。
這個(gè)程序按照功能來(lái)劃分兩大部分,一個(gè)是與傳送信息有關(guān)程序,二者是與界面有關(guān)的程序。由于界面相關(guān)程序由夏永同學(xué)負(fù)責(zé),所以這里就不多說(shuō)了,我們主要負(fù)責(zé)的是傳送信息有關(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
#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) /*寫(xiě)字符傳到對(duì)應(yīng)地
{ /*址的端口
DWORD dwError = 0;
unsigned int error;
DWORD BytesReturned;
unsigned char Buffer[3]; /*BUFFER和pBUFFER是傳送過(guò)程中的
unsigned char * pBuffer; /*中間緩沖區(qū)
pBuffer = (unsigned char *)&Buffer[0];
*pBuffer = (unsigned char)PortAddress&0x0f;
Buffer[2] = byte;
error = DeviceIoControl(PortTalk_Handle,
IOCTL_WRITE_PORT_UCHAR,
&Buffer,
3,
NULL,
0,
&BytesReturned,
NULL);
}
unsigned char inportb(unsigned short PortAddress) /*讀對(duì)應(yīng)地址的端口的信息
{
unsigned int error;
DWORD BytesReturned;
unsigned char Buffer[3]; /*BUFFER和pBUFFER是傳送過(guò)程中的
unsigned short * pBuffer; /*中間緩沖區(qū)
pBuffer = (unsigned short *)&Buffer[0];
*pBuffer = (unsigned char)PortAddress&0x0f;
error = DeviceIoControl(PortTalk_Handle,
IOCTL_READ_PORT_UCHAR,
&Buffer,
2,
&Buffer,
1,
&BytesReturned,
NULL);
return(Buffer[0]);
}
// class CClientDlg : public CDialog
{
public:
CClientDlg(CWnd* pParent = NULL);
void Init8251(int state,int work); /*初始化8251芯片
void Trans(int tran); /*通過(guò)8251芯片傳送數(shù)值tran
int Recei(); /*接收發(fā)送到8251芯片的數(shù)值,便返回該值
void set_bps(int bps); /*設(shè)置8253計(jì)數(shù)器的計(jì)數(shù)初值
void sTrans(char * s); /*傳送字符串s
void sRecei(char * s); /*接受一個(gè)字符串,并存入s中
void AddSC(int sid,int cid); /*添加一個(gè)選課記錄
void sw(); /*檢測(cè)開(kāi)關(guān)sw1有沒(méi)有按下,如沒(méi)有按下,則等待
void Warning(int level); /*當(dāng)用戶(hù)名和密碼不對(duì)時(shí)進(jìn)行報(bào)警
enum { IDD = IDD_SERVER_DIALOG };
CEdit m_Output; /*系統(tǒng)信息
CString m_sid; /*學(xué)生信息中的學(xué)號(hào)信息
CString m_sname; /*學(xué)生信息中的學(xué)生姓名信息
CString m_password; /*密碼信息
CString m_cid; /*課程信息中的課程號(hào)信息
CString m_cname; /*課程信息中的課程名信息
CString m_ssid; /*選課信息中的學(xué)生號(hào)信息
CString m_ccid; /*選課信息中的課程號(hào)信息
//}}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_VIRTUAL
protected:
// 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();//查詢(xún)所有課程
afx_msg void OnButton2();//選課
afx_msg void OnButton3();//確定
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
// CClientDlg.cpp
#include "StdAfx.h"
#include "Server.h"
#include "ServerDlg.h"
#include "ServerDlg.h"
#include
#define factor 16 /*波特率因子16
unsigned long int clk = 1193182; /*8251輸入時(shí)鐘頻率(十六進(jìn)制表示)
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ū)?yīng)的變量的定義
void 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
}
//以上是變量與資源的對(duì)應(yīng)關(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_MAP
END_MESSAGE_MAP()
//以上是消息與按鈕對(duì)應(yīng)關(guān)系的說(shuō)明
void CClientDlg::Init8251(int state,int work){ /*8251的初始化*/
outportb(IO_BASE+9, 0x0) ; /* 空操作*/
outportb(IO_BASE+9, 0x40) ; /* 內(nèi)部復(fù)位(使D6=1)*/
outportb(IO_BASE+9, 0x4e) ; /* 方式命令字,,查課本p180*/
outportb(IO_BASE+9, 0x27) ; /*工作命令字,例子p183*/
}
void CClientDlg::set_bps(int bps){ /*計(jì)數(shù)器設(shè)置
int i,sendhigh,sendlow;
i=clk/bps;
i=i/factor;//計(jì)算計(jì)數(shù)初值
sendhigh = (i>>8)&0x00ff;
sendlow = i & 0x00ff;
outportb(IO_BASE+7,0xb6);
outportb(IO_BASE+6,sendlow);//裝計(jì)數(shù)初值低字節(jié)
outportb(IO_BASE+6,sendhigh);//裝計(jì)數(shù)初值高字節(jié)
}
void CClientDlg::Trans(int tran){//發(fā)送字符
int state;
do
state=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
#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 Buffer[3];
unsigned char * pBuffer;
pBuffer = (unsigned char *)&Buffer[0];
*pBuffer = (unsigned char)PortAddress&0x0f;
Buffer[2] = 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 Buffer[3];
unsigned short * pBuffer;
pBuffer = (unsigned short *)&Buffer[0];
*pBuffer = (unsigned char)PortAddress&0x0f;
error = DeviceIoControl(PortTalk_Handle,
IOCTL_READ_PORT_UCHAR,
&Buffer,
2,
&Buffer,
1,
&BytesReturned,
NULL);
return(Buffer[0]);
}
//ServerDlg.h :
class CServerDlg : public CDialog
{
public:
CServerDlg(CWnd* pParent = NULL);
void Init8251(int state,int work);//初始化8251芯片
void Trans(int tran);//通過(guò)8251芯片傳送數(shù)值tran
int Recei();//接收發(fā)送到8251芯片的數(shù)值,便返回該值
void set_bps(int bps);//設(shè)置8253計(jì)數(shù)器的計(jì)數(shù)初值
int getPassword(int ssid);//返回學(xué)號(hào)為ssid的同學(xué)的密碼
int checkCid(int ccid);//檢查課號(hào)為ccid的課程是否存在
void sTrans(char * s);//傳送字符串s
void sRecei(char * s);//接受一個(gè)字符串,并存入s中
void AddSC(int sid,int cid);//添加一個(gè)選課記錄
enum { IDD = IDD_SERVER_DIALOG };
CEdit m_Output;
CString m_sid;
CString m_sname;
CString m_password;
CString m_cid;
CString m_cname;
CString m_ssid;
CString m_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_VIRTUAL
protected:
// 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_MSG
DECLARE_MESSAGE_MAP()
};
// ServerDlg.cpp
#include "StdAfx.h"
#include "Server.h"
#include "ServerDlg.h"
#include "ServerDlg.h"
#include
#define factor 16 //波特率因子16
unsigned long int clk = 1193182;//8251輸入時(shí)鐘頻率(十六進(jìn)制表示)
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ū)?yīng)的變量的定義
void 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
}
//以上是變量與資源的對(duì)應(yīng)關(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_MAP
END_MESSAGE_MAP()
//以上是消息與按鈕對(duì)應(yīng)關(guān)系的說(shuō)明
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;//計(jì)算計(jì)數(shù)初值
sendhigh = (i>>8)&0x00ff;
sendlow = i & 0x00ff;
outportb(IO_BASE+7,0xb6);
outportb(IO_BASE+6,sendlow);//裝計(jì)數(shù)初值低字節(jié)
outportb(IO_BASE+6,sendhigh);//裝計(jì)數(shù)初值高字節(jié)
}
void CServerDlg::Trans(int tran){//發(fā)送字符
int state;
do
state=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ù)學(xué)號(hào)ssid查詢(xún)數(shù)據(jù)庫(kù)中該記錄的pssword
CDatabase database;
database.Open(_T("select"));//數(shù)據(jù)源名稱(chēng)
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("用戶(hù)不存在!");
return 0;
}else{
m_Output.ReplaceSel("該用戶(hù)存在 !\r\n");
recset.GetFieldValue("password", var );
pass=var.m_iVal;
recset.Close();
return pass;
}
}
int CServerDlg::checkCid(int ccid){
//檢查課程號(hào)為ccid的課程是否存在
CDatabase database;
database.Open(_T("select"));//數(shù)據(jù)源名稱(chēng)
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
鏈接地址:http://www.820124.com/p-9044376.html