找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12348|回復(fù): 33
打印 上一主題 下一主題
收起左側(cè)

51單片機DIY激光雕刻機視頻與源碼資料分享

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:384216 發(fā)表于 2018-8-8 16:37 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用兩個廢舊光驅(qū)制作的
這套代碼僅供參考,我的步進電機驅(qū)動芯片是某一個寶買的,連型號都沒有,只給了個時序圖,大家可以再我的代碼基礎(chǔ)上根據(jù)自己的驅(qū)動進行修改!

視頻:


所有資料51hei提供下載: DIY激光雕刻機.zip (8.79 MB, 下載次數(shù): 454)



評分

參與人數(shù) 2黑幣 +56 收起 理由
nanxiaohai + 6 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏30 分享淘帖 頂4 踩
回復(fù)

使用道具 舉報

來自 2#
ID:384216 發(fā)表于 2020-2-18 11:29 來自手機 | 只看該作者
上位機源碼在下面
回復(fù)

使用道具 舉報

來自 3#
ID:384216 發(fā)表于 2022-3-6 17:44 | 只看該作者
// 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];
// 用于應(yīng)用程序“關(guān)于”菜單項的 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();

        // 將“關(guān)于...”菜單項添加到系統(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)用程序主窗口不是對話框時,框架將自動
        //  執(zhí)行此操作
        SetIcon(m_hIcon, TRUE);                        // 設(shè)置大圖標(biāo)
        SetIcon(m_hIcon, FALSE);                // 設(shè)置小圖標(biāo)

                                                                        // TODO: 在此添加額外的初始化代碼

        return TRUE;  // 除非將焦點設(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)用戶拖動最小化窗口時系統(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,無校驗,8個數(shù)據(jù)位,1個停止位
        if (!m_com.get_PortOpen())
        {
                m_com.put_PortOpen(TRUE);//打開串口
                m_com.put_RThreshold(1);//每當(dāng)接收緩沖區(qū)中有1個字符,則接收串口數(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 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

地板
ID:363686 發(fā)表于 2018-8-12 12:33 | 只看該作者
學(xué)習(xí)貼收藏了,謝謝分享
回復(fù)

使用道具 舉報

5#
ID:387700 發(fā)表于 2018-8-21 21:36 | 只看該作者
求個上位機源碼 誰有啊
回復(fù)

使用道具 舉報

6#
ID:384216 發(fā)表于 2018-12-31 12:14 | 只看該作者
qq35404085 發(fā)表于 2018-8-21 21:36
求個上位機源碼 誰有啊

上位機源碼我可以發(fā)給你,是我自己寫的,雖然簡單了點但可以參考!
回復(fù)

使用道具 舉報

7#
ID:338818 發(fā)表于 2019-1-16 18:35 | 只看該作者
fox555w 發(fā)表于 2018-12-31 12:14
上位機源碼我可以發(fā)給你,是我自己寫的,雖然簡單了點但可以參考!

請問可以發(fā)給我嗎?
回復(fù)

使用道具 舉報

8#
ID:462797 發(fā)表于 2019-1-16 20:51 | 只看該作者
fox555w 發(fā)表于 2018-12-31 12:14
上位機源碼我可以發(fā)給你,是我自己寫的,雖然簡單了點但可以參考!

兄弟把上位機的代碼也發(fā)給我下唄,謝謝了。
回復(fù)

使用道具 舉報

9#
ID:471375 發(fā)表于 2019-1-23 23:54 來自手機 | 只看該作者
能發(fā)一下源碼嗎,新手制作,大佬求幫一下
回復(fù)

使用道具 舉報

10#
ID:452731 發(fā)表于 2019-1-27 23:34 | 只看該作者
那么,能否將制作過程和電路設(shè)計也貼出來呢?便于仿制啊
回復(fù)

使用道具 舉報

11#
ID:367086 發(fā)表于 2019-4-3 22:59 來自手機 | 只看該作者
上位機源碼能發(fā)我嗎 老哥
回復(fù)

使用道具 舉報

12#
ID:505153 發(fā)表于 2019-4-9 01:29 | 只看該作者
同求上位機源碼     多謝!
回復(fù)

使用道具 舉報

13#
ID:138247 發(fā)表于 2019-7-29 19:00 | 只看該作者

感謝樓主分享,正在學(xué)習(xí)。。。
回復(fù)

使用道具 舉報

14#
ID:698952 發(fā)表于 2020-2-27 11:15 | 只看該作者
高手啊,看見不錯
回復(fù)

使用道具 舉報

15#
ID:143646 發(fā)表于 2020-4-4 13:41 | 只看該作者
你好。樓主。網(wǎng)盤過過期了。麻煩再發(fā)下。 謝謝了。 那個壓縮包里面有電路圖嗎
回復(fù)

使用道具 舉報

16#
ID:116662 發(fā)表于 2020-4-4 20:10 | 只看該作者
多謝樓主分享,收藏了
回復(fù)

使用道具 舉報

17#
ID:384216 發(fā)表于 2020-8-6 11:30 來自手機 | 只看該作者
qxuem 發(fā)表于 2020-4-4 13:41
你好。樓主。網(wǎng)盤過過期了。麻煩再發(fā)下。 謝謝了。 那個壓縮包里面有電路圖嗎

等我有時間了,整理個詳細(xì)一點的資料發(fā)一下。
回復(fù)

使用道具 舉報

18#
ID:94393 發(fā)表于 2020-8-9 01:02 | 只看該作者
剛接觸,學(xué)習(xí)了解下,感謝分享
回復(fù)

使用道具 舉報

19#
ID:624444 發(fā)表于 2020-8-24 11:41 | 只看該作者
fox555w 發(fā)表于 2020-8-6 11:30
等我有時間了,整理個詳細(xì)一點的資料發(fā)一下。

哇,都快兩年了,老哥還在回復(fù),支持,點贊
回復(fù)

使用道具 舉報

20#
ID:767007 發(fā)表于 2020-8-27 01:43 | 只看該作者
發(fā)下上位機源程序謝謝
回復(fù)

使用道具 舉報

21#
ID:528517 發(fā)表于 2020-9-15 20:44 | 只看該作者

發(fā)下上位機源程序謝謝
回復(fù)

使用道具 舉報

22#
ID:613432 發(fā)表于 2020-12-18 16:58 | 只看該作者
你好,可以發(fā)個上位機源碼嗎?謝謝啦
回復(fù)

使用道具 舉報

23#
ID:557411 發(fā)表于 2021-3-20 16:44 | 只看該作者
非常不錯,上位機過期了
回復(fù)

使用道具 舉報

24#
ID:285863 發(fā)表于 2021-3-20 18:30 | 只看該作者
發(fā)個上位機源碼可以嗎?謝謝啦
回復(fù)

使用道具 舉報

25#
ID:161033 發(fā)表于 2021-4-6 23:29 | 只看該作者
可以發(fā)下整套資料嗎?非常感謝。
回復(fù)

使用道具 舉報

26#
ID:889854 發(fā)表于 2021-5-7 09:59 | 只看該作者
老哥 上位機源碼鏈接過期了 能補發(fā)一下嗎   想學(xué)習(xí)一下
回復(fù)

使用道具 舉報

27#
ID:549934 發(fā)表于 2021-5-7 20:37 | 只看該作者

老哥 上位機源碼鏈接過期了 能補發(fā)一下嗎   想學(xué)習(xí)一下
回復(fù)

使用道具 舉報

28#
ID:549934 發(fā)表于 2021-5-7 20:37 | 只看該作者
上位機源碼鏈接過期了 能補發(fā)一下嗎   想學(xué)習(xí)一下,謝謝啦
回復(fù)

使用道具 舉報

29#
ID:853034 發(fā)表于 2021-7-11 10:37 | 只看該作者
上午機源碼發(fā)一下謝謝!
回復(fù)

使用道具 舉報

30#
ID:853034 發(fā)表于 2021-7-11 10:39 | 只看該作者
上位機源碼鏈接過期了 能補發(fā)一下嗎   想學(xué)習(xí)一下,謝謝啦
回復(fù)

使用道具 舉報

31#
ID:963717 發(fā)表于 2022-2-13 00:36 | 只看該作者
收藏了,謝謝分享
回復(fù)

使用道具 舉報

32#
ID:884815 發(fā)表于 2022-2-22 10:32 | 只看該作者
大哥 上位機源碼鏈接過期了 能補發(fā)一下嗎
回復(fù)

使用道具 舉報

33#
ID:1052836 發(fā)表于 2022-11-19 21:14 | 只看該作者
不錯,很有借鑒意義
回復(fù)

使用道具 舉報

34#
ID:1055791 發(fā)表于 2022-12-5 20:52 | 只看該作者
必須支持,其實重要的是過程+
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表