找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10236|回复: 33
收起左侧

51单片机DIY激光雕刻机视频与源码资料分享

  [复制链接]
ID:384216 发表于 2018-8-8 16:37 | 显示全部楼层 |阅读模式
用两个废旧光驱制作的
这套代码仅供参考,我的步进电机驱动芯片是某一个宝买的,连型号都没有,只给了个时序图,大家可以再我的代码基础上根据自己的驱动进行修改!

视频:
0.png 0.png

所有资料51hei提供下载: DIY激光雕刻机.zip (8.79 MB, 下载次数: 451)

评分

参与人数 2黑币 +56 收起 理由
nanxiaohai + 6 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:384216 发表于 2020-2-18 11:29 来自手机 | 显示全部楼层
上位机源码在下面
回复

使用道具 举报

ID:384216 发表于 2022-3-6 17:44 | 显示全部楼层
// MFCdkjceshiDlg.cpp : 实现文件
//

#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();

        // 对话框数据
#ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_ABOUTBOX };
#endif

protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

                                                                                                                // 实现
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();

        // 将“关于...”菜单项添加到系统菜单中。

        // IDM_ABOUTBOX 必须在系统命令范围内。
        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);
                }
        }

        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        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);
        }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CMFCdkjceshiDlg::OnPaint()
{
        if (IsIconic())
        {
                CPaintDC dc(this); // 用于绘制的设备上下文

                SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

                // 使图标在工作区矩形中居中
                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();
        }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
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()// 接收事件处理函数
{
        VARIANT variant_inp;
        COleSafeArray safearray_inp;
        CString strInput;
        if (m_com.get_CommEvent() == 2)//值为2表示接收缓冲区内有字符
        {
                variant_inp = m_com.get_Input();//读取缓冲区消息               
                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())//如果发现串口原来是打开的,关闭串口
                m_com.put_PortOpen(FALSE);
        m_com.put_CommPort(b);//选择COM1端口
        m_com.put_InBufferSize(1024);//设置输入缓冲区大小
        m_com.put_OutBufferSize(512);//设置输出缓冲区大小
        m_com.put_Settings(L"9600,n,8,1");//设置波特率9600,无校验,8个数据位,1个停止位
        if (!m_com.get_PortOpen())
        {
                m_com.put_PortOpen(TRUE);//打开串口
                m_com.put_RThreshold(1);//每当接收缓冲区中有1个字符,则接收串口数据
                m_com.put_InputLen(0);//设置当前缓冲区长度为0
                m_com.get_Input();//预读缓冲区以清除残留数据
                SetDlgItemText(IDC_STATIC2, L"连接成功!");
        }
        else
        {
                SetDlgItemText(IDC_STATIC2, L"连接失败!");
        }
}

void CMFCdkjceshiDlg::OnBnClickedButton1()//开始雕刻
{
        SetDlgItemText(IDC_STATIC4, L"正在工作中");
        m_com.put_Output(COleVariant(L"Q"));//发送握手指令
}

void CMFCdkjceshiDlg::panduan()
{

        if (zhilingbiao[dydata] == L"E")
        {
               
                m_com.put_Output(COleVariant(zhilingbiao[dydata]));  //发送指令
                MessageBox(L"打印完毕");
                dydata = 0;
        }
        else
        {
                m_com.put_Output(COleVariant(zhilingbiao[dydata]));  //发送指令
                dydata++;
        }

}

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:363686 发表于 2018-8-12 12:33 | 显示全部楼层
学习贴收藏了,谢谢分享
回复

使用道具 举报

ID:387700 发表于 2018-8-21 21:36 | 显示全部楼层
求个上位机源码 谁有啊
回复

使用道具 举报

ID:384216 发表于 2018-12-31 12:14 | 显示全部楼层
qq35404085 发表于 2018-8-21 21:36
求个上位机源码 谁有啊

上位机源码我可以发给你,是我自己写的,虽然简单了点但可以参考!
回复

使用道具 举报

ID:338818 发表于 2019-1-16 18:35 | 显示全部楼层
fox555w 发表于 2018-12-31 12:14
上位机源码我可以发给你,是我自己写的,虽然简单了点但可以参考!

请问可以发给我吗?
回复

使用道具 举报

ID:462797 发表于 2019-1-16 20:51 | 显示全部楼层
fox555w 发表于 2018-12-31 12:14
上位机源码我可以发给你,是我自己写的,虽然简单了点但可以参考!

兄弟把上位机的代码也发给我下呗,谢谢了。
回复

使用道具 举报

ID:471375 发表于 2019-1-23 23:54 来自手机 | 显示全部楼层
能发一下源码吗,新手制作,大佬求帮一下
回复

使用道具 举报

ID:452731 发表于 2019-1-27 23:34 | 显示全部楼层
那么,能否将制作过程和电路设计也贴出来呢?便于仿制啊
回复

使用道具 举报

ID:367086 发表于 2019-4-3 22:59 来自手机 | 显示全部楼层
上位机源码能发我吗 老哥
回复

使用道具 举报

ID:505153 发表于 2019-4-9 01:29 | 显示全部楼层
同求上位机源码     多谢!
回复

使用道具 举报

ID:138247 发表于 2019-7-29 19:00 | 显示全部楼层

感谢楼主分享,正在学习。。。
回复

使用道具 举报

ID:698952 发表于 2020-2-27 11:15 | 显示全部楼层
高手啊,看见不错
回复

使用道具 举报

ID:143646 发表于 2020-4-4 13:41 | 显示全部楼层
你好。楼主。网盘过过期了。麻烦再发下。 谢谢了。 那个压缩包里面有电路图吗
回复

使用道具 举报

ID:116662 发表于 2020-4-4 20:10 | 显示全部楼层
多谢楼主分享,收藏了
回复

使用道具 举报

ID:384216 发表于 2020-8-6 11:30 来自手机 | 显示全部楼层
qxuem 发表于 2020-4-4 13:41
你好。楼主。网盘过过期了。麻烦再发下。 谢谢了。 那个压缩包里面有电路图吗

等我有时间了,整理个详细一点的资料发一下。
回复

使用道具 举报

ID:94393 发表于 2020-8-9 01:02 | 显示全部楼层
刚接触,学习了解下,感谢分享
回复

使用道具 举报

ID:624444 发表于 2020-8-24 11:41 | 显示全部楼层
fox555w 发表于 2020-8-6 11:30
等我有时间了,整理个详细一点的资料发一下。

哇,都快两年了,老哥还在回复,支持,点赞
回复

使用道具 举报

ID:767007 发表于 2020-8-27 01:43 | 显示全部楼层
发下上位机源程序谢谢
回复

使用道具 举报

ID:528517 发表于 2020-9-15 20:44 | 显示全部楼层

发下上位机源程序谢谢
回复

使用道具 举报

ID:613432 发表于 2020-12-18 16:58 | 显示全部楼层
你好,可以发个上位机源码吗?谢谢啦
回复

使用道具 举报

ID:557411 发表于 2021-3-20 16:44 | 显示全部楼层
非常不错,上位机过期了
回复

使用道具 举报

ID:285863 发表于 2021-3-20 18:30 | 显示全部楼层
发个上位机源码可以吗?谢谢啦
回复

使用道具 举报

ID:161033 发表于 2021-4-6 23:29 | 显示全部楼层
可以发下整套资料吗?非常感谢。
回复

使用道具 举报

ID:889854 发表于 2021-5-7 09:59 | 显示全部楼层
老哥 上位机源码链接过期了 能补发一下吗   想学习一下
回复

使用道具 举报

ID:549934 发表于 2021-5-7 20:37 | 显示全部楼层

老哥 上位机源码链接过期了 能补发一下吗   想学习一下
回复

使用道具 举报

ID:549934 发表于 2021-5-7 20:37 | 显示全部楼层
上位机源码链接过期了 能补发一下吗   想学习一下,谢谢啦
回复

使用道具 举报

ID:853034 发表于 2021-7-11 10:37 | 显示全部楼层
上午机源码发一下谢谢!
回复

使用道具 举报

ID:853034 发表于 2021-7-11 10:39 | 显示全部楼层
上位机源码链接过期了 能补发一下吗   想学习一下,谢谢啦
回复

使用道具 举报

ID:963717 发表于 2022-2-13 00:36 | 显示全部楼层
收藏了,谢谢分享
回复

使用道具 举报

ID:884815 发表于 2022-2-22 10:32 | 显示全部楼层
大哥 上位机源码链接过期了 能补发一下吗
回复

使用道具 举报

ID:1052836 发表于 2022-11-19 21:14 | 显示全部楼层
不错,很有借鉴意义
回复

使用道具 举报

ID:1055791 发表于 2022-12-5 20:52 | 显示全部楼层
必须支持,其实重要的是过程+
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表