(玩電子) 電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

學習C#一周,做了小工具一個原理圖引腳放置工具

作者:佚名   來源:本站原創   點擊數:x  更新時間:2013年06月17日   【字體:

   學習是讓我們了解更多我們未知的東西,然后用這些東西更好的幫助我們學習和工作,為什么我會歸結在嵌入式里面呢?因為我學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 我。 
上傳源碼文件如下:
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();
        }
    }
}


 

發表評論】【告訴好友】【收藏此文】【關閉窗口

文章評論

相關文章

全天计划时时彩