找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12627|回復(fù): 33
收起左側(cè)

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

  [復(fù)制鏈接]
ID:384216 發(fā)表于 2018-8-8 16:37 | 顯示全部樓層 |閱讀模式
用兩個(gè)廢舊光驅(qū)制作的
這套代碼僅供參考,我的步進(jìn)電機(jī)驅(qū)動(dòng)芯片是某一個(gè)寶買的,連型號都沒有,只給了個(gè)時(shí)序圖,大家可以再我的代碼基礎(chǔ)上根據(jù)自己的驅(qū)動(dòng)進(jìn)行修改!

視頻:
0.png 0.png

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



評分

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

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:384216 發(fā)表于 2020-2-18 11:29 來自觸屏版 | 顯示全部樓層
上位機(jī)源碼在下面
回復(fù)

使用道具 舉報(bào)

ID:384216 發(fā)表于 2022-3-6 17:44 | 顯示全部樓層
// 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í),框架將自動(dòng)
        //  執(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)用程序,
//  這將由框架自動(dò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)用戶拖動(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 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:363686 發(fā)表于 2018-8-12 12:33 | 顯示全部樓層
學(xué)習(xí)貼收藏了,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:387700 發(fā)表于 2018-8-21 21:36 | 顯示全部樓層
求個(gè)上位機(jī)源碼 誰有啊
回復(fù)

使用道具 舉報(bào)

ID:384216 發(fā)表于 2018-12-31 12:14 | 顯示全部樓層
qq35404085 發(fā)表于 2018-8-21 21:36
求個(gè)上位機(jī)源碼 誰有啊

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

使用道具 舉報(bào)

ID:338818 發(fā)表于 2019-1-16 18:35 | 顯示全部樓層
fox555w 發(fā)表于 2018-12-31 12:14
上位機(jī)源碼我可以發(fā)給你,是我自己寫的,雖然簡單了點(diǎn)但可以參考!

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

使用道具 舉報(bào)

ID:462797 發(fā)表于 2019-1-16 20:51 | 顯示全部樓層
fox555w 發(fā)表于 2018-12-31 12:14
上位機(jī)源碼我可以發(fā)給你,是我自己寫的,雖然簡單了點(diǎn)但可以參考!

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

使用道具 舉報(bào)

ID:471375 發(fā)表于 2019-1-23 23:54 來自觸屏版 | 顯示全部樓層
能發(fā)一下源碼嗎,新手制作,大佬求幫一下
回復(fù)

使用道具 舉報(bào)

ID:452731 發(fā)表于 2019-1-27 23:34 | 顯示全部樓層
那么,能否將制作過程和電路設(shè)計(jì)也貼出來呢?便于仿制啊
回復(fù)

使用道具 舉報(bào)

ID:367086 發(fā)表于 2019-4-3 22:59 來自觸屏版 | 顯示全部樓層
上位機(jī)源碼能發(fā)我嗎 老哥
回復(fù)

使用道具 舉報(bào)

ID:505153 發(fā)表于 2019-4-9 01:29 | 顯示全部樓層
同求上位機(jī)源碼     多謝!
回復(fù)

使用道具 舉報(bào)

ID:138247 發(fā)表于 2019-7-29 19:00 | 顯示全部樓層

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

使用道具 舉報(bào)

ID:698952 發(fā)表于 2020-2-27 11:15 | 顯示全部樓層
高手啊,看見不錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:143646 發(fā)表于 2020-4-4 13:41 | 顯示全部樓層
你好。樓主。網(wǎng)盤過過期了。麻煩再發(fā)下。 謝謝了。 那個(gè)壓縮包里面有電路圖嗎
回復(fù)

使用道具 舉報(bào)

ID:116662 發(fā)表于 2020-4-4 20:10 | 顯示全部樓層
多謝樓主分享,收藏了
回復(fù)

使用道具 舉報(bào)

ID:384216 發(fā)表于 2020-8-6 11:30 來自觸屏版 | 顯示全部樓層
qxuem 發(fā)表于 2020-4-4 13:41
你好。樓主。網(wǎng)盤過過期了。麻煩再發(fā)下。 謝謝了。 那個(gè)壓縮包里面有電路圖嗎

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

使用道具 舉報(bào)

ID:94393 發(fā)表于 2020-8-9 01:02 | 顯示全部樓層
剛接觸,學(xué)習(xí)了解下,感謝分享
回復(fù)

使用道具 舉報(bào)

ID:624444 發(fā)表于 2020-8-24 11:41 | 顯示全部樓層
fox555w 發(fā)表于 2020-8-6 11:30
等我有時(shí)間了,整理個(gè)詳細(xì)一點(diǎn)的資料發(fā)一下。

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

使用道具 舉報(bào)

ID:767007 發(fā)表于 2020-8-27 01:43 | 顯示全部樓層
發(fā)下上位機(jī)源程序謝謝
回復(fù)

使用道具 舉報(bào)

ID:528517 發(fā)表于 2020-9-15 20:44 | 顯示全部樓層

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

使用道具 舉報(bào)

ID:613432 發(fā)表于 2020-12-18 16:58 | 顯示全部樓層
你好,可以發(fā)個(gè)上位機(jī)源碼嗎?謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:557411 發(fā)表于 2021-3-20 16:44 | 顯示全部樓層
非常不錯(cuò),上位機(jī)過期了
回復(fù)

使用道具 舉報(bào)

ID:285863 發(fā)表于 2021-3-20 18:30 | 顯示全部樓層
發(fā)個(gè)上位機(jī)源碼可以嗎?謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:161033 發(fā)表于 2021-4-6 23:29 | 顯示全部樓層
可以發(fā)下整套資料嗎?非常感謝。
回復(fù)

使用道具 舉報(bào)

ID:889854 發(fā)表于 2021-5-7 09:59 | 顯示全部樓層
老哥 上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎   想學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:549934 發(fā)表于 2021-5-7 20:37 | 顯示全部樓層

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

使用道具 舉報(bào)

ID:549934 發(fā)表于 2021-5-7 20:37 | 顯示全部樓層
上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎   想學(xué)習(xí)一下,謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:853034 發(fā)表于 2021-7-11 10:37 | 顯示全部樓層
上午機(jī)源碼發(fā)一下謝謝!
回復(fù)

使用道具 舉報(bào)

ID:853034 發(fā)表于 2021-7-11 10:39 | 顯示全部樓層
上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎   想學(xué)習(xí)一下,謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:963717 發(fā)表于 2022-2-13 00:36 | 顯示全部樓層
收藏了,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:884815 發(fā)表于 2022-2-22 10:32 | 顯示全部樓層
大哥 上位機(jī)源碼鏈接過期了 能補(bǔ)發(fā)一下嗎
回復(fù)

使用道具 舉報(bào)

ID:1052836 發(fā)表于 2022-11-19 21:14 | 顯示全部樓層
不錯(cuò),很有借鑒意義
回復(fù)

使用道具 舉報(bào)

ID:1055791 發(fā)表于 2022-12-5 20:52 | 顯示全部樓層
必須支持,其實(shí)重要的是過程+
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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