熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2018-8-8 16:37
正文摘要:用兩個(gè)廢舊光驅(qū)制作的 這套代碼僅供參考,我的步進(jìn)電機(jī)驅(qū)動芯片是某一個(gè)寶買的,連型號都沒有,只給了個(gè)時(shí)序圖,大家可以再我的代碼基礎(chǔ)上根據(jù)自己的驅(qū)動進(jìn)行修改! 視頻: |
| 上位機(jī)源碼在下面 |
|
// MFCdkjceshiDlg.cpp : 實(shí)現(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]; // 用于應(yīng)用程序“關(guān)于”菜單項(xiàng)的 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 支持 // 實(shí)現(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(); // 將“關(guān)于...”菜單項(xiàng)添加到系統(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); } } // 設(shè)置此對話框的圖標(biāo)。 當(dāng)應(yīng)用程序主窗口不是對話框時(shí),框架將自動 // 執(zhí)行此操作 SetIcon(m_hIcon, TRUE); // 設(shè)置大圖標(biāo) SetIcon(m_hIcon, FALSE); // 設(shè)置小圖標(biāo) // TODO: 在此添加額外的初始化代碼 return TRUE; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE } void CMFCdkjceshiDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼 // 來繪制該圖標(biāo)。 對于使用文檔/視圖模型的 MFC 應(yīng)用程序, // 這將由框架自動完成。 void CMFCdkjceshiDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于繪制的設(shè)備上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使圖標(biāo)在工作區(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; // 繪制圖標(biāo) dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //當(dāng)用戶拖動最小化窗口時(shí)系統(tǒng)調(diào)用此函數(shù)取得光標(biāo) //顯示。 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"準(zhǔn)備完畢"); 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)串口原來是打開的,關(guān)閉串口 m_com.put_PortOpen(FALSE); m_com.put_CommPort(b);//選擇COM1端口 m_com.put_InBufferSize(1024);//設(shè)置輸入緩沖區(qū)大小 m_com.put_OutBufferSize(512);//設(shè)置輸出緩沖區(qū)大小 m_com.put_Settings(L"9600,n,8,1");//設(shè)置波特率9600,無校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位 if (!m_com.get_PortOpen()) { m_com.put_PortOpen(TRUE);//打開串口 m_com.put_RThreshold(1);//每當(dāng)接收緩沖區(qū)中有1個(gè)字符,則接收串口數(shù)據(jù) m_com.put_InputLen(0);//設(shè)置當(dāng)前緩沖區(qū)長度為0 m_com.get_Input();//預(yù)讀緩沖區(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 | 回帖助人的獎勵! |
| 必須支持,其實(shí)重要的是過程+ |
| 不錯(cuò),很有借鑒意義 |
| 大哥 上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎 |
| 收藏了,謝謝分享 |
| 上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎 想學(xué)習(xí)一下,謝謝啦 |
| 上午機(jī)源碼發(fā)一下謝謝! |
| 上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎 想學(xué)習(xí)一下,謝謝啦 |
|
老哥 上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎 想學(xué)習(xí)一下 |
| 老哥 上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎 想學(xué)習(xí)一下 |
| 可以發(fā)下整套資料嗎?非常感謝。 |
| 發(fā)個(gè)上位機(jī)源碼可以嗎?謝謝啦 |
| 非常不錯(cuò),上位機(jī)過期了 |
| 你好,可以發(fā)個(gè)上位機(jī)源碼嗎?謝謝啦 |
|
發(fā)下上位機(jī)源程序謝謝 |
|
發(fā)下上位機(jī)源程序謝謝 |
fox555w 發(fā)表于 2020-8-6 11:30 哇,都快兩年了,老哥還在回復(fù),支持,點(diǎn)贊 ![]() |
| 剛接觸,學(xué)習(xí)了解下,感謝分享 |
qxuem 發(fā)表于 2020-4-4 13:41 等我有時(shí)間了,整理個(gè)詳細(xì)一點(diǎn)的資料發(fā)一下。 |
| 多謝樓主分享,收藏了 |
| 你好。樓主。網(wǎng)盤過過期了。麻煩再發(fā)下。 謝謝了。 那個(gè)壓縮包里面有電路圖嗎 |
| 高手啊,看見不錯(cuò) |
|
感謝樓主分享,正在學(xué)習(xí)。。。 ![]() |
| 同求上位機(jī)源碼 多謝! |
| 上位機(jī)源碼能發(fā)我嗎 老哥 |
| 那么,能否將制作過程和電路設(shè)計(jì)也貼出來呢?便于仿制啊 |
| 能發(fā)一下源碼嗎,新手制作,大佬求幫一下 |
fox555w 發(fā)表于 2018-12-31 12:14 兄弟把上位機(jī)的代碼也發(fā)給我下唄,謝謝了。 |
fox555w 發(fā)表于 2018-12-31 12:14 請問可以發(fā)給我嗎? |
qq35404085 發(fā)表于 2018-8-21 21:36 上位機(jī)源碼我可以發(fā)給你,是我自己寫的,雖然簡單了點(diǎn)但可以參考! |
| 求個(gè)上位機(jī)源碼 誰有啊 |
| 學(xué)習(xí)貼收藏了,謝謝分享 |
Powered by 單片機(jī)教程網(wǎng)