smart kids

【嵌入式】学习C#一周,做了小工具一个原理图引脚放置工具

0
阅读(4443)

    学习是让我们了解更多我们未知的东西,然后用这些东西更好的帮助我们学习和工作,为什么我会归结在嵌入式里面呢?因为我学C#本意是为了做wince 的APP 开发,然后顺便做了一个工具,给大家分享。

          首先说下神器的功能:是导入excel后,把DXP放置在倒数第二层,神器在第一层,然后点击放置,就坐等电脑放置了。

学习C# 是一个机缘巧合,由于公司需要用平板电脑开发界面程序,本人只会一点C语言,因此四处寻找一本C#的书,开始了C#学习之旅。

首先是边看书,边在电脑上面演示他的例子,书非常的厚,适合我们这种现学现用的,哈哈。书的光盘如下


 

在经过3天时间后,我从从没接触过C#到了做出了一个wince
的界面操作软件,回想下其实很简单的。我用的是VS2008,做好了wince 的界面软件后,我又在想是不是我要用这个软件做一些我们用的一些工具,来帮助我干一些事呢?也不枉费我浪费近一周的时间来学习撒,哈哈。有了这个想法,我就很快地行动了,首先让我们见识下我的神器软件------Dxp_sch_Tools,看到名字就知道了,是帮我们画SCHlib 的工具,里面的各个按键可以指定坐标,方便我们进行不同分辨率,不同软件版本的兼容,但是有些繁琐,请大家见谅,

让我们上神器的照片。

基本操作流程如下:

(1)       首先建立一个excel 文件,然后在excel 的第一列是用来我们放置1----XX
的序号,我们手工设置的,方便我们统计引脚数目,因为我们在做BGA 的时候,他的引脚不是1,2,3,因此我们专门用第一列来放置我们的统计数据,当然我们也可以不放,只要你知道就好。

(2)       下面一步,就是拷贝我们PDF里面的引脚和编号,到excel 中,其中引脚序号放在第2列,引脚名称放在第三列

 

(3) 用神器导入excel ,然后设置好我们需要放置的引脚数目,放置的引脚之间的步进,这个步进是像素点的步进。就是2个引脚之间的像素点步进我们可以用截图工具获取。如果你不知道怎么获取或者不知道具体像素,你可以设置成20,40这些数据,设置的就比较大,然后看他们放置的情况进行缩放


 
 

(4)设置右边各个菜单的像素点,这些像素点都是以屏幕的左上角为参考原点得到的,如下图示例设置右边各个菜单的像素点,这些像素点都是以屏幕的左上角为参考原点得到的,如下图示例

(5) 然后点击开始绘图,就开始放置引脚了,放置好引脚后我们还需要调整一下引脚让他变得更漂亮,然后我们的lib就绘制完成



 

总结:神器总的制作时间其实就只有3天,它的功能其实就是帮我们放置引脚,因为当我们面临几百、几千个引脚的时候,一个一个的手工放置,是不是难免出错呢?那么我们拷贝官方的pdf 引脚序列,然后让神器帮我们完成,那么是不是又快准确率又高呢?  

由于博客传不了工程,有需要工程的,可以单独Q 我。 

readexcel.rar      附件如 左边!!

 

上传源码文件如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.OleDb;
using Microsoft.Office.Interop.Excel;
using System.IO;
using System.Runtime.InteropServices;
using System.Timers;
using System.Diagnostics;

namespace readexcel
{
    public partial class Form1 : Form
    {
        [DllImport("User32")]
        public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);

        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);

        [System.Runtime.InteropServices.DllImport("user32")]
        private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 

    
        const int MOUSEEVENTF_MOVE = 0x0001; //移动鼠标 
        const int MOUSEEVENTF_LEFTDOWN = 0x0002;// 模拟鼠标左键按下 
        const int MOUSEEVENTF_LEFTUP = 0x0004; //模拟鼠标左键抬起 
        const int MOUSEEVENTF_RIGHTDOWN = 0x0008; //模拟鼠标右键按下 
        const int MOUSEEVENTF_RIGHTUP = 0x0010; //模拟鼠标右键抬起 
        const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; //模拟鼠标中键按下 
        const int MOUSEEVENTF_MIDDLEUP = 0x0040; //模拟鼠标中键抬起 
        const int MOUSEEVENTF_ABSOLUTE = 0x8000; //标示是否采用绝对坐标 

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button1.Text = "打开文件";
            button2.Text = "开始绘图";
            button3.Text = "Exit";

            textBox1.Text = "";// 清空显示   
            textBox2.Text = "1";

            textBox3.Text = "260";// 初始化坐标点
            textBox4.Text = "36";

            textBox5.Text = "280";
            textBox6.Text = "88";

            textBox7.Text = "830";
            textBox8.Text = "665";

            textBox10.Text = "602";
            textBox11.Text = "112";

            textBox9.Text = "5";
        }

// 读取文件以及调用填充
        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.AddExtension = true;//设置是否自动在文件中添加扩展名
            openFileDialog1.CheckFileExists = true;//检查文件
            openFileDialog1.Filter = "Excel文件(.xls)|*.xls";
            openFileDialog1.FileName = "";// 清空默认名

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
               textBox1.Text = openFileDialog1.FileName;
                dgExcel.DataSource = GetExcelData("openFileDialog1.FileName ");

            }

        }
// 读取excel 填充gridview
        private System.Data.DataTable GetExcelData(string path)
        {
            // string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
            string strCon = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=NO;IMEX=1';", openFileDialog1.FileName);

            OleDbConnection conn = new OleDbConnection(strCon);
            string strCom = "select * from [sheet1$]";
            OleDbDataAdapter oda = new OleDbDataAdapter(strCom, strCon);

            System.Data.DataTable dt = new System.Data.DataTable();
            try
            {
                oda.Fill(dt);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);

            }
            return dt;
        }
// 放置引脚助程序
        System.Timers.Timer myTimer;
        string aa, bb;
        int x,pin_numb;
        int place_x,place_y,pin_x,pin_y,ok_x,ok_y;
        int step, origin_x, origin_y;
        private void button2_Click(object sender, EventArgs e)
        {
            pin_numb = Convert.ToInt32(textBox2.Text);
            place_x = Convert.ToInt32(textBox3.Text);
            place_y = Convert.ToInt32(textBox4.Text);
            pin_x = Convert.ToInt32(textBox5.Text);
            pin_y = Convert.ToInt32(textBox6.Text);
            ok_x = Convert.ToInt32(textBox7.Text);
            ok_y = Convert.ToInt32(textBox8.Text);
            step = Convert.ToInt32(textBox9.Text);
            origin_x = Convert.ToInt32(textBox10.Text);
            origin_y = Convert.ToInt32(textBox11.Text);

            SetCursorPos(260, 36);//Place工具位置坐标
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            System.Threading.Thread.Sleep(100);

            SetCursorPos(280, 88);// Pin位置坐标
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            System.Threading.Thread.Sleep(100);

            for (x = 0; x < pin_numb; x++)
            {

                SendKeys.Send("{TAB}");
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();
                SendKeys.Send("{BKSP}");//  多删除几次以保万一
                 System.Threading.Thread.Sleep(100);
                SendKeys.Flush();
                SendKeys.Send("{BKSP}");
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();
                SendKeys.Send("{BKSP}");
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();

                aa = dgExcel.Rows[x].Cells[2].EditedFormattedValue.ToString();
                SendKeys.Send( aa );
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();

                SendKeys.Send("{TAB}");
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();
                SendKeys.Send("{BKSP}");
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();
                SendKeys.Send("{BKSP}");
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();
                SendKeys.Send("{BKSP}");
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();

                bb = dgExcel.Rows[x].Cells[1].EditedFormattedValue.ToString();
                SendKeys.Send( bb );
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();

                SetCursorPos(ok_x, ok_y);// OK 坐标
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                System.Threading.Thread.Sleep(1000);

                SetCursorPos(origin_x, origin_y);// 放置引脚位置坐标
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                System.Threading.Thread.Sleep(100);
                origin_y = origin_y + step;

            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}