![]() |
發(fā)布時間: 2018-8-8 16:37
正文摘要:用兩個廢舊光驅(qū)制作的 這套代碼僅供參考,我的步進電機驅(qū)動芯片是某一個寶買的,連型號都沒有,只給了個時序圖,大家可以再我的代碼基礎上根據(jù)自己的驅(qū)動進行修改! 視頻: |
上位機源碼在下面 |
// MFCdkjceshiDlg.cpp : 實現(xiàn)文件 // #include "stdafx.h" #include "MFCdkjceshi.h" #include "MFCdkjceshiDlg.h" #include "afxdialogex.h" #include"Resource.h" #ifdef _DEBUG #define new DEBUG_NEW #endif int xssz[160][240]; HDC dcc; int dydata = 0; int zljs = 0; int yddata[38401]; CString str9; LPCTSTR zhilingbiao[8000000]; // 用于應用程序“關于”菜單項的 CAboutDlg 對話框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 對話框數(shù)據(jù) #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 實現(xiàn) protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CMFCdkjceshiDlg 對話框 CMFCdkjceshiDlg::CMFCdkjceshiDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_MFCDKJCESHI_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCdkjceshiDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_MSCOMM1, m_com); } BEGIN_MESSAGE_MAP(CMFCdkjceshiDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON2, &CMFCdkjceshiDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, &CMFCdkjceshiDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON1, &CMFCdkjceshiDlg::OnBnClickedButton1) END_MESSAGE_MAP() // CMFCdkjceshiDlg 消息處理程序 BOOL CMFCdkjceshiDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 將“關于...”菜單項添加到系統(tǒng)菜單中。 // IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 設置此對話框的圖標。 當應用程序主窗口不是對話框時,框架將自動 // 執(zhí)行此操作 SetIcon(m_hIcon, TRUE); // 設置大圖標 SetIcon(m_hIcon, FALSE); // 設置小圖標 // TODO: 在此添加額外的初始化代碼 return TRUE; // 除非將焦點設置到控件,否則返回 TRUE } void CMFCdkjceshiDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼 // 來繪制該圖標。 對于使用文檔/視圖模型的 MFC 應用程序, // 這將由框架自動完成。 void CMFCdkjceshiDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于繪制的設備上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使圖標在工作區(qū)矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 繪制圖標 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //當用戶拖動最小化窗口時系統(tǒng)調(diào)用此函數(shù)取得光標 //顯示。 HCURSOR CMFCdkjceshiDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCdkjceshiDlg::OnBnClickedButton2()// 選擇并打開圖像 { CString strFile = _T(""); CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"), NULL); if (dlgFile.DoModal()) { strFile = dlgFile.GetPathName(); } //以指定大小顯示圖像 CImage image; int iii,jjj,ccc,ddd; image.Load(strFile); dcc = GetDC()->m_hDC; image.Draw(dcc, CRect(0, 0,240,160)); int xsx, xsy, js = 0; int xsx1, xsy1=0;//////// int wzjs = 0; for (xsy = 0; xsy <240; xsy++) { for (xsx = 0; xsx <160; xsx++) { if (GetPixel(dcc, xsy, xsx)<9000000) { xssz[xsx][xsy] = 1; } else { xssz[xsx][xsy] = 2; } } } int aaaa; /*************************************************************************/ for (aaaa = 0; aaaa < 80; aaaa++) { for (xsx1 = 0; xsx1 <240; xsx1++) { if (xssz[xsy1][xsx1] == 1) { if (xsx1 == wzjs) { zhilingbiao[zljs] = L"A"; zljs++; } else { if (xsx1 < wzjs) { ccc = wzjs - xsx1; for (iii = 0; iii < ccc; iii++) { zhilingbiao[zljs] = L"C"; zljs++; wzjs--; } zhilingbiao[zljs] = L"A"; zljs++; } else { ccc = xsx1 - wzjs; for (iii = 0; iii < ccc; iii++) { zhilingbiao[zljs] = L"B"; zljs++; wzjs++; } zhilingbiao[zljs] = L"A"; zljs++; } } } } zhilingbiao[zljs] = L"D"; zljs++; xsy1++; for (xsx1 = 240; xsx1>0; xsx1--) { jjj = xsx1 - 1; if (xssz[xsy1][jjj] == 1) { if (jjj == wzjs) { zhilingbiao[zljs] = L"A"; zljs++; } else { if (jjj < wzjs) { ddd = wzjs - jjj; for (iii = 0; iii < ddd; iii++) { zhilingbiao[zljs] = L"C"; zljs++; wzjs--; } zhilingbiao[zljs] = L"A"; zljs++; } else { ddd = jjj - wzjs; for (iii = 0; iii < ddd; iii++) { zhilingbiao[zljs] = L"B"; zljs++; wzjs++; } zhilingbiao[zljs] = L"A"; zljs++; } } } } zhilingbiao[zljs] = L"D"; zljs++; xsy1++; } zhilingbiao[zljs] = L"E"; zljs++; /*************************************************************************/ str9.Format(_T("%d"), zljs); SetDlgItemText(IDC_STATIC5, str9); SetDlgItemText(IDC_STATIC3, L"準備完畢"); zljs = 0; } BEGIN_EVENTSINK_MAP(CMFCdkjceshiDlg, CDialogEx) ON_EVENT(CMFCdkjceshiDlg, IDC_MSCOMM1, 1, CMFCdkjceshiDlg::OnCommMscomm1, VTS_NONE) END_EVENTSINK_MAP() void CMFCdkjceshiDlg::OnCommMscomm1()// 接收事件處理函數(shù) { VARIANT variant_inp; COleSafeArray safearray_inp; CString strInput; if (m_com.get_CommEvent() == 2)//值為2表示接收緩沖區(qū)內(nèi)有字符 { variant_inp = m_com.get_Input();//讀取緩沖區(qū)消息 str9.Format(_T("%d"), dydata); SetDlgItemText(IDC_STATIC5, str9); panduan(); } } void CMFCdkjceshiDlg::OnBnClickedButton3()//打開串口 { CString Data; GetDlgItem(IDC_COMBO1)->GetWindowText(Data); int b = _ttoi(Data); if (m_com.get_PortOpen())//如果發(fā)現(xiàn)串口原來是打開的,關閉串口 m_com.put_PortOpen(FALSE); m_com.put_CommPort(b);//選擇COM1端口 m_com.put_InBufferSize(1024);//設置輸入緩沖區(qū)大小 m_com.put_OutBufferSize(512);//設置輸出緩沖區(qū)大小 m_com.put_Settings(L"9600,n,8,1");//設置波特率9600,無校驗,8個數(shù)據(jù)位,1個停止位 if (!m_com.get_PortOpen()) { m_com.put_PortOpen(TRUE);//打開串口 m_com.put_RThreshold(1);//每當接收緩沖區(qū)中有1個字符,則接收串口數(shù)據(jù) m_com.put_InputLen(0);//設置當前緩沖區(qū)長度為0 m_com.get_Input();//預讀緩沖區(qū)以清除殘留數(shù)據(jù) SetDlgItemText(IDC_STATIC2, L"連接成功!"); } else { SetDlgItemText(IDC_STATIC2, L"連接失敗!"); } } void CMFCdkjceshiDlg::OnBnClickedButton1()//開始雕刻 { SetDlgItemText(IDC_STATIC4, L"正在工作中"); m_com.put_Output(COleVariant(L"Q"));//發(fā)送握手指令 } void CMFCdkjceshiDlg::panduan() { if (zhilingbiao[dydata] == L"E") { m_com.put_Output(COleVariant(zhilingbiao[dydata])); //發(fā)送指令 MessageBox(L"打印完畢"); dydata = 0; } else { m_com.put_Output(COleVariant(zhilingbiao[dydata])); //發(fā)送指令 dydata++; } } |
參與人數(shù) 1 | 黑幣 +40 | 收起 理由 |
---|---|---|
![]() | + 40 | 回帖助人的獎勵! |
必須支持,其實重要的是過程+ |
不錯,很有借鑒意義 |
大哥 上位機源碼鏈接過期了 能補發(fā)一下嗎 |
收藏了,謝謝分享 |
上位機源碼鏈接過期了 能補發(fā)一下嗎 想學習一下,謝謝啦 |
上午機源碼發(fā)一下謝謝! |
上位機源碼鏈接過期了 能補發(fā)一下嗎 想學習一下,謝謝啦 |
老哥 上位機源碼鏈接過期了 能補發(fā)一下嗎 想學習一下 |
老哥 上位機源碼鏈接過期了 能補發(fā)一下嗎 想學習一下 |
可以發(fā)下整套資料嗎?非常感謝。 |
發(fā)個上位機源碼可以嗎?謝謝啦 |
非常不錯,上位機過期了 |
你好,可以發(fā)個上位機源碼嗎?謝謝啦 |
發(fā)下上位機源程序謝謝 |
發(fā)下上位機源程序謝謝 |
fox555w 發(fā)表于 2020-8-6 11:30 哇,都快兩年了,老哥還在回復,支持,點贊 ![]() |
剛接觸,學習了解下,感謝分享 |
qxuem 發(fā)表于 2020-4-4 13:41 等我有時間了,整理個詳細一點的資料發(fā)一下。 |
多謝樓主分享,收藏了 |
你好。樓主。網(wǎng)盤過過期了。麻煩再發(fā)下。 謝謝了。 那個壓縮包里面有電路圖嗎 |
高手啊,看見不錯 |
感謝樓主分享,正在學習。。。 ![]() |
同求上位機源碼 多謝! |
上位機源碼能發(fā)我嗎 老哥 |
那么,能否將制作過程和電路設計也貼出來呢?便于仿制啊 |
能發(fā)一下源碼嗎,新手制作,大佬求幫一下 |
fox555w 發(fā)表于 2018-12-31 12:14 兄弟把上位機的代碼也發(fā)給我下唄,謝謝了。 |
fox555w 發(fā)表于 2018-12-31 12:14 請問可以發(fā)給我嗎? |
qq35404085 發(fā)表于 2018-8-21 21:36 上位機源碼我可以發(fā)給你,是我自己寫的,雖然簡單了點但可以參考! |
求個上位機源碼 誰有啊 |
學習貼收藏了,謝謝分享 |
Powered by 單片機教程網(wǎng)