基于MINIGUI的LED簡(jiǎn)易控制_第1頁(yè)
基于MINIGUI的LED簡(jiǎn)易控制_第2頁(yè)
基于MINIGUI的LED簡(jiǎn)易控制_第3頁(yè)
基于MINIGUI的LED簡(jiǎn)易控制_第4頁(yè)
基于MINIGUI的LED簡(jiǎn)易控制_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式系統(tǒng)課程設(shè)計(jì)報(bào)告書(shū) 課 題 基于MINIGUI的LED簡(jiǎn)易控制專(zhuān) 業(yè) 通信工程 班 級(jí) 學(xué) 號(hào) 姓 名 指導(dǎo)教師 信息科學(xué)與工程學(xué)院 2013年6月15日目錄Ø 一、設(shè)計(jì)課題2Ø 二、設(shè)計(jì)目的2Ø 三、設(shè)計(jì)任務(wù)及要求2Ø 四、設(shè)計(jì)流程及時(shí)間安排2Ø 五、設(shè)計(jì)思路3Ø 六、設(shè)計(jì)流程4Ø 6.1MiniGUI在X86上的安裝和運(yùn)行4Ø 6.2MiniGUI交叉編譯環(huán)境的建立6Ø 6.3建立超級(jí)終端8Ø 6.4移植8Ø 七、界面編程10Ø 八、調(diào)試結(jié)果15Ø 九、設(shè)

2、計(jì)總結(jié)16Ø 附錄.17Ø 附錄一:程序17Ø 附錄二:設(shè)計(jì)參考文獻(xiàn)27一、設(shè)計(jì)課題:基于MINIGUI的LED簡(jiǎn)易控制二、設(shè)計(jì)目的:1進(jìn)一步鞏固嵌入式系統(tǒng)的基本知識(shí);2掌握嵌入式應(yīng)用系統(tǒng)的基本結(jié)構(gòu);3掌握嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境建立和使用;4掌握MINIGUI界面程序編程;5. 掌握Linux下硬件驅(qū)動(dòng)的編程;5學(xué)會(huì)查閱有關(guān)專(zhuān)業(yè)資料及設(shè)計(jì)手冊(cè);三、設(shè)計(jì)任務(wù)及要求:1、掌握嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境建立和使用;2、掌握嵌入式系統(tǒng)基本驅(qū)動(dòng)、應(yīng)用程序的設(shè)計(jì)調(diào)試和編譯移植方法;3、MiniGUI在PC上的安裝、移植4、Linux基本輸入輸出驅(qū)動(dòng)程序設(shè)計(jì)編譯與移植5、基于MiniGUI

3、的基本輸入輸出應(yīng)用編程編譯與移植6、編寫(xiě)設(shè)計(jì)說(shuō)明書(shū)(方案的確定、設(shè)計(jì)環(huán)節(jié)的考慮及必要說(shuō)明等)及設(shè)備的使用說(shuō)明;7、結(jié)合課程設(shè)計(jì),繪制有關(guān)圖紙,并詳細(xì)分析.四、設(shè)計(jì)流程與時(shí)間安排1、 工作流程 工作流程主要有開(kāi)發(fā)環(huán)境搭建、驅(qū)動(dòng)程序設(shè)計(jì)、應(yīng)用程序設(shè)計(jì)及最終調(diào)試。2、設(shè)計(jì)時(shí)間安排: (共1.5周)序號(hào)項(xiàng)目具 體 內(nèi) 容時(shí)間(天)1基礎(chǔ)知識(shí)1)講解設(shè)計(jì)任務(wù);2)熟悉Ubuntu的使用;3)熟悉TQ2440試驗(yàn)系統(tǒng)的使用;4)掌握嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境建立和使用;12MINIGUI的環(huán)境搭建及編程1) minigui的環(huán)境搭建2) minigui的移植(IAL,GAL)3) minigui的編程的學(xué)習(xí)43驅(qū)

4、動(dòng)程序的編寫(xiě)1)LED驅(qū)動(dòng)程序的編寫(xiě)及移植2)鍵盤(pán)驅(qū)動(dòng),成為Minigui的IAL實(shí)現(xiàn)4個(gè)按鍵,一個(gè)enter,一個(gè)tab,一個(gè)向上鍵,一個(gè)向下鍵14界面應(yīng)用程序的編寫(xiě)1)界面程序的編寫(xiě)界面的內(nèi)容與LED控制有關(guān)2)定時(shí)器編程25軟硬件調(diào)試設(shè)計(jì)綜合調(diào)試16完成設(shè)計(jì)說(shuō)明書(shū)設(shè)計(jì)說(shuō)明書(shū)1五、設(shè)計(jì)思路:基礎(chǔ)知識(shí)的回顧復(fù)習(xí),包括:嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境建立和使用,嵌入式系統(tǒng)基本驅(qū)動(dòng)、應(yīng)用程序的設(shè)計(jì)調(diào)試和編譯移植方法.。MiniGUI在pc機(jī)上的安裝。(可參照minigui用戶(hù)手冊(cè))參照Minigui技術(shù)白皮書(shū)和Minigui編程指南學(xué)習(xí)基于 MiniGUI的應(yīng)用界面編程方法。運(yùn)行minigui演示程序,設(shè)計(jì)

5、界面,開(kāi)始界面編程。交叉編譯環(huán)境的建立,及MiniGui在TQ2440上的移植開(kāi)始綜合調(diào)試六、設(shè)計(jì)流程:6.1、 MiniGUI在X86上安裝和運(yùn)行1、準(zhǔn)備工作建立工作目錄:mkdir /minigui-free cd /minigui-free復(fù)制源文件壓縮包到工作目錄:cp /mnt/hgfs/D/* /minigui-free解壓文件:tar zxvf libminigui-1.6.10.tar.gztar zxvf minigui-res-1.6.10.tar.gztar zxvf mg-samples-1.6.10.tar.gz2、MiniGUI庫(kù)安裝 進(jìn)入目錄:cd libmini

6、gui-1.6.10/ 配置:./configure 在x86上運(yùn)行只需默認(rèn)配置即可,配置完成后即可生成Makefile 編譯:make 成功后即可生成必要的庫(kù)文件等。 安裝:make install 在x86上安裝庫(kù)文件。3、MiniGUI資源安裝進(jìn)入目錄:cd minigui-res-1.6.10/安裝:make install必要資源文件的復(fù)制安裝等操作。4、MiniGUI例子編譯 進(jìn)入目錄:cd mg-samples-1.6.10/ 編譯:make編譯src目錄下的例子程序,用于驗(yàn)證MiniGUI是否安裝成功。即可在src目錄下生成可執(zhí)行文件5、安裝qvfb 使用qt的qvfbapt-

7、get install qt3-dev-tools-embedded6、配置MiniGUI.cfgvi /usr/local/etc/MiniGUI.cfg 修改如下部分為system# GAL engine and default optionsgal_engine=qvfbdefaultmode=800x480-16bpp# IAL engineial_engine=qvfbmdev=/dev/input/micemtype=IMPS2fbcondefaultmode=800x480-16bppqvfbdefaultmode=800x480-16bppdisplay=07運(yùn)行MiniGUI

8、例子程序 打開(kāi)qvfb:qvfb -width 800 -height 480 & 運(yùn)行helloword:src/helloworld 出現(xiàn)此窗口說(shuō)明運(yùn)行成功。8、問(wèn)題1.錯(cuò)誤1:Permission denied解決方法:權(quán)限不夠,使用root用戶(hù)登錄。2.錯(cuò)誤2: 出現(xiàn)符號(hào)未找到等編譯錯(cuò)誤 解決方法:make clean 后在make6.2、Minigui交叉編譯環(huán)境的建立1、安裝交叉編譯器arm-linux-gcc2、在/ minigui-free下新建目錄nfsroot #cd / minigui-free#mkdir nfsroot3、建立交叉編譯的lib修改libmini

9、gui -1.6.10下的configure文件,在文件頭添加CC= arm-linux-gccCPP= arm-linux-cppLD= arm-linux-ldAR= arm-linux-arRANLIB= arm-linux-ranlibSTRIP= arm-linux-strip將libcorss.sh拷到libminigui -1.6.10文件夾中l(wèi)ibcorss.sh文件內(nèi)容如下:#/bin/sh./configure -prefix=/minigui-free/nfsroot/ -host=arm-linux -target=arm-linuxmakemake install運(yùn)行

10、腳本#./ libcorss.sh之后可以查看到/ minigui-free/nfsroot下面生成了etc、lib、include三個(gè)目錄4、建立交叉編譯的res修改minigui-res-1.6.10下的config.linux文件的第11行TOPDIR=/home/nick/minigui-free/nfsroot將rescorss.sh 拷到minigui-res-1.6.10文件夾中rescorss.sh文件內(nèi)容如下:#!/bin/shmake install運(yùn)行腳本#./ rescorss.sh可以查看/ minigui-free/nfsroot下面生成usr目錄5、修改mg-sa

11、mples-1.6.10下的configure文件,在文件頭添加CC= arm-linux-gccCPP= arm-linux-cppLD= arm-linux-ldAR= arm-linux-arRANLIB= arm-linux-ranlibSTRIP= arm-linux-strip將samplecorss.sh拷到mg-samples-1.6.10文件夾中samplecorss.sh文件內(nèi)容如下:#!/bin/sh./configure -host=arm-linux -target=arm-linux -prefix=/minigui-free/nfsroot/ LDFLAGS=-L

12、/opt/minigui/temp/lib CPPFLAGS=-I/minigui-free/nfsroot/include CFLAGS=-I/opt/minigui-free/nfsroot/includeMake運(yùn)行腳本#./ simplecorss.sh可以查看/ minigui-free/ mg-samples-1.6.10/src下生成了可執(zhí)行文件6.3、建立超級(jí)終端1)pc機(jī)與開(kāi)發(fā)板串口相連2)開(kāi)始-附件-通信-超級(jí)終端(波特率115200,數(shù)據(jù)位8,奇偶校驗(yàn):無(wú),停止位1,數(shù)據(jù)控制流:無(wú))6.4、移植1)將/ minigui-free/nfsroot/etc下的Mingui.c

13、fg文件拷到開(kāi)發(fā)板/etc目錄下。2)將/ minigui-free/nfsroot /lib下的所有文件拷貝到開(kāi)發(fā)板/usr/lib目錄下3)將pc機(jī)/ minigui-free/nfsroot/usr/local/lib中所有內(nèi)容拷貝到開(kāi)發(fā)板的/usr/local/lib下12、把/ minigui-free /mg-samples-1.6.10/src中任意可執(zhí)行文件和資源文件拷貝到開(kāi)發(fā)板的/usr/minigui下面,沒(méi)有這個(gè)目錄自己建一個(gè),最后運(yùn)行科執(zhí)行程序,觀察開(kāi)發(fā)板上的lcd顯示情況,若能出現(xiàn)相應(yīng)串口,則證明移植成功。問(wèn)題1.環(huán)境變量為無(wú)效路徑:先用echo $PATH查詢(xún)環(huán)境變

14、量,發(fā)現(xiàn)無(wú)效路徑后,在$ vi .bash_profile         #修改用戶(hù)環(huán)境變量文件, 環(huán)境變量更改后,在用戶(hù)下次登陸時(shí)生效。如果想立刻生效,則可執(zhí)行下面的語(yǔ)句:$source .bash_profile 用VI在文件/etc/profile文件中增加變量,該變量將會(huì)對(duì)Linux下所有用戶(hù)有效,并且是“永久的”2.在移植文件時(shí)要注意文件所在位置,如將/ minigui-free/nfsroot /lib下的所有文件拷貝到開(kāi)發(fā)板/usr/lib

15、目錄下時(shí)要注意是將lib下的所有文件拷貝到開(kāi)發(fā)板/usr/lib目錄下,而不是拷貝lib文件夾七、界面編程7.1基本的編程概念MiniGUI是一個(gè)圖形用戶(hù)界面支持的系統(tǒng),通常的GUI編程概念均適用于MiniGUI編程,如窗口和事件驅(qū)動(dòng)編程等。7.2頭文件Com.c的開(kāi)始所包括的四個(gè)頭文件分別是:<minigui/common.h> <minigui/minigui.h> <minigui/gdi.h> <minigui/window.h> 他們是所有的MiniGUI應(yīng)用程序都必須包括的頭文件。7.3程序入口點(diǎn)一個(gè)C程序的入口點(diǎn)為main函數(shù),而一

16、個(gè)MiniGUI程序的入口點(diǎn)為MiniGUIMain,該函數(shù)原型如下:int MiniGUIMain (int argc, const char* argv)main函數(shù)已經(jīng)在MiniGUI的函數(shù)庫(kù)中定義了,該函數(shù)在進(jìn)行一些MiniGUI的出始化工作之后調(diào)用MiniGUIMain函數(shù)。7.4進(jìn)入消息循環(huán)在函DialogBoxIndirectParam (&DlgInitProgress,hWnd,DialogBoxProc,0L) 和函數(shù)static int DialogBoxProc (HWND hWnd, int message, WPARAM wParam, LPARAM lPa

17、ram)的MSG_INITDIALOG進(jìn)行消息的循環(huán)。其中: 1、hwnd 消息發(fā)往的窗口的句柄。 2、message 消息標(biāo)識(shí)符。 3、wParam 一個(gè)32位的消息參數(shù),其含義是根據(jù)消息的不同而不同。 4、IParam 一個(gè)32位的消息參數(shù),去含義是取決于消息的類(lèi)型。7.5窗口過(guò)程函數(shù)窗口過(guò)程函數(shù)是MiniGUI程序的主體部分,應(yīng)用程序?qū)嶋H所做的工作大部分都發(fā)生在窗口的過(guò)程函數(shù)中,以為GUI程序的主要任務(wù)是接收和處理窗口收的各種消息。7.6程序的推出用戶(hù)單擊窗口右上角的關(guān)閉按鈕時(shí)窗口過(guò)程函數(shù)將收到一個(gè)MSG_CLOSE消息。7.7對(duì)話框編程基礎(chǔ)在MiniGUI中,對(duì)話框是一類(lèi)特殊的主窗口,

18、這中主窗口只關(guān)注與用戶(hù)的交互向用戶(hù)提供輸出消息,但更多的是用于用戶(hù)輸入。對(duì)話框可以理解為子類(lèi)化之后的主窗口。它針對(duì)對(duì)話框的特殊性進(jìn)行了特殊設(shè)計(jì)。/* *對(duì)話框定義*static DLGTEMPLATE DlgInitProgress= /*定義對(duì)話框模板. 用static類(lèi)型數(shù)據(jù),使該數(shù)據(jù)的定義只在所在文件中有效,以免因?yàn)槊挚臻g污染造成潛在的編譯或連接錯(cuò)誤*/ WS_BORDER|WS_CAPTION, /*對(duì)話框風(fēng)格,WS_BORDER創(chuàng)建有邊框的窗口 ,WS_CAPTION創(chuàng)建含標(biāo)題欄的主窗口*/ WS_EX_NONE, /*對(duì)話框擴(kuò)展風(fēng)格,WS_EX_NONE表示無(wú)擴(kuò)展風(fēng)格*/ 0,0

19、,800,480, /*對(duì)話框位置,左上角坐標(biāo)(0,0),800、 "MY_LED_CONTROL", /*對(duì)話框標(biāo) 0, /*對(duì)話框圖標(biāo) 0, /*對(duì)話框菜單 9, /*對(duì)話框中控件個(gè)數(shù)。 NULL, /*pointer to 0 /*附;這個(gè)函數(shù)就是對(duì)話框的一個(gè)基本定義了。其中9是包含的控件數(shù),如果包含的控件沒(méi)有填入正確的個(gè)數(shù),那么Qt不會(huì)正常顯示。7.8對(duì)話框的回調(diào)函數(shù)static int DialogBoxProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) /*對(duì)話框過(guò)程函數(shù),用來(lái)接收和處理所有發(fā)送到

20、該窗口的消息*/ int number; /*用來(lái)存從旋鈕數(shù)字框獲得的數(shù)值*/ static int t=0; int num; /*存放定時(shí)時(shí)間*/ switch(message) case MSG_INITDIALOG: return 1;case MSG_PAINT:return 1; case MSG_TIMER:case MSG_COMMAND:switch (wParam) break;case MSG_CLOSE:break; return DefaultDialogProc (hWnd, message, wParam, lParam);使用的幾個(gè)消息:MSG_INITDIAL

21、OG: 建立對(duì)話框和控件之后,發(fā)送到回調(diào)函數(shù)的MSG_PAINT: 窗口重繪時(shí)發(fā)送到窗口過(guò)程。MSG_TIMER:timer專(zhuān)用。MSG_COMMAND:傳遞wParam參數(shù)。 MSG_CLOSE:關(guān)閉時(shí)發(fā)送。文本框回調(diào)函數(shù)用于頻率的獲取。7.9控件編程基礎(chǔ)較為復(fù)雜的GUI系統(tǒng)中,都帶有預(yù)定義的控件集合,他們是人機(jī)交互的主要元素。而此次實(shí)驗(yàn)用到的控件分別是靜態(tài)框、按鈕、旋鈕組合和框static CTRLDATA CtrlInitData= /*控件數(shù)組*/ "static", /*控件類(lèi)型*/WS_VISIBLE|SS_SIMPLE, /*控件風(fēng)格,WS_VISIBLE創(chuàng)建

22、初始可見(jiàn)的窗口,SS_SIMPLE顯示單行文本*/100,270,150,40, /*控件位置*/ID_TEXT1, /*控件ID*/"Please input frequency", /*控件內(nèi)容*/0, /*附加值*/WS_EX_NONE /*控件擴(kuò)展風(fēng)格*/,"static",WS_VISIBLE|SS_SIMPLE,605,270,150,40,ID_TEXT2,"HZ",0,WS_EX_NONE, "button",WS_VISIBLE|WS_TABSTOP, /*WS_TABSTOP支持Tab鍵*/13

23、5,160,80,60,ID_LED1,"LED1",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,285,160,80,60,ID_LED2,"LED2",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,435,160,80,60,ID_LED3,"LED3",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,585,160,80,60,ID_

24、LED4,"LED4",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,285,360,80,60,ID_START,"START",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,435,360,80,60,ID_STOP,"STOP",0,WS_EX_NONE , CTRL_COMBOBOX,WS_VISIBLE|WS_TABSTOP|CBS_AUTOSPIN|CBS_AUTOLOOP, /*CBS_AU

25、TOSPIN創(chuàng)建旋鈕數(shù)字框,CBS_AUTOLOOP框中的數(shù)字將自動(dòng)循 環(huán)顯示*/ 435,270,80,40, ID_COMBOBOX, "0", /*旋鈕數(shù)字框初始值*/ 0, WS_EX_NONE ;在上面的定義中,我們可以通過(guò)坐標(biāo)來(lái)改變他們的位置,使控件能擺放到合適的位置上去。7.10可以看到運(yùn)行的界面如下圖所示7.11 問(wèn)題Linux系統(tǒng)運(yùn)行很卡,通過(guò)top指令查詢(xún)進(jìn)程,再用kill殺掉沒(méi)用的進(jìn)程,使系統(tǒng)順暢運(yùn)行。八、調(diào)試結(jié)果:按led控制燈的亮滅,黑的為滅,綠的為亮,通過(guò)輸入頻率,再按start鍵,流水燈開(kāi)始按一定頻率亮滅。再按stop鍵,就結(jié)束了流水燈。九、設(shè)

26、計(jì)總結(jié): 本學(xué)期為期兩周的嵌入式課程設(shè)計(jì)在不知不覺(jué)中結(jié)束了,雖說(shuō)這次課程設(shè)計(jì)時(shí)間不是很長(zhǎng),但是感覺(jué)自己收獲頗豐,不僅學(xué)習(xí)到了一些新知識(shí),回顧了以前的一些快要遺忘的知識(shí)點(diǎn),通過(guò)這次的課程設(shè)計(jì)進(jìn)一步鞏固嵌入式系統(tǒng)的基本知識(shí)、嵌入式應(yīng)用系統(tǒng)的基本結(jié)構(gòu)、進(jìn)一步掌握了嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境建立和使用、MINIGUI界面程序編程、Linux下硬件驅(qū)動(dòng)的編程、學(xué)會(huì)查閱有關(guān)專(zhuān)業(yè)資料及設(shè)計(jì)手冊(cè)、掌握了嵌入式系統(tǒng)基本驅(qū)動(dòng)、應(yīng)用程序的設(shè)計(jì)調(diào)試和編譯移植方法;、MiniGUI在PC上的安裝、移植、Linux基本輸入輸出驅(qū)動(dòng)程序設(shè)計(jì)編譯與移植、基于MiniGUI的基本輸入輸出應(yīng)用編程編譯與移植。 開(kāi)發(fā)過(guò)程中遇到許多問(wèn)題,主

27、要原因是對(duì)于基本知識(shí)掌握的不夠牢固,所以一旦遇到問(wèn)題就會(huì)摸不著頭腦,不知道從何下手。在軟件編譯過(guò)程中最為棘手的問(wèn)題,我覺(jué)得就是鏈接庫(kù)的問(wèn)題,每一個(gè)都有相當(dāng)復(fù)雜的依賴(lài)關(guān)系,由于我們對(duì)嵌入式開(kāi)發(fā)的經(jīng)驗(yàn)不足,有時(shí)候很難能知道庫(kù)依賴(lài)于哪個(gè)軟件中,比較常用的辦法是下載安裝與名稱(chēng)相關(guān)的軟件,如lib*庫(kù)等等。即可解決大部分在軟件編譯中,出現(xiàn)的錯(cuò)誤。對(duì)于配置,也是一個(gè)非常容易出錯(cuò)的地方,不同的軟件配置是不一樣的,但通過(guò)上網(wǎng)查資料和向老師和同學(xué)的請(qǐng)教。終于對(duì)整個(gè)設(shè)計(jì)有了進(jìn)一步的理解也更深層次的了解了整個(gè)的設(shè)計(jì)思路,更通過(guò)學(xué)習(xí)掌握了Minigui的設(shè)計(jì)方法。 總之,雖然這次課程設(shè)計(jì),使我進(jìn)步不少,但同時(shí)也看到了

28、自己還有非常大的差距,所以更需加倍努力。附錄:附錄一:程序:#include <stdio.h> #include <minigui/common.h> /*包括 MiniGUI 常用的宏以及數(shù)據(jù)類(lèi)型的定義*/#include <minigui/minigui.h> /*包含了全局的和通用的接口函數(shù)以及某些雜項(xiàng)函數(shù)的定義*/#include <minigui/gdi.h> /*包含了 MiniGUI 繪圖函數(shù)的接口定義*/#include <minigui/control.h> /*包含了libminigui 中所有內(nèi)建控件的接口定義

29、*/#include <minigui/window.h>#include <string.h>#include <stdlib.h>#include <unistd.h> /*包含了許多UNIX系統(tǒng)服務(wù)的函數(shù)原型*/#include <sys/ioctl.h> /*提供對(duì)I/O控制的函數(shù)*/#include<fcntl.h>#define ID_LED1 101 /*定義各個(gè)控件與定時(shí)器的ID號(hào)*/#define ID_LED2 102#define ID_LED3 103#define ID_LED4 104#defi

30、ne ID_TEXT1 105#define ID_TEXT2 106#define ID_START 107#define ID_STOP 108#define ID_COMBOBOX 109#define ID_TIMER 110static int a,b,c,d=0; /*定義LED燈的初始值*/static int fd_led; /*定義文件描述符*/HWND hMainWnd; /*定義主窗口句柄*/static void draw_circular(HWND hdig,int x,int y,int r,int which) /*自定義一個(gè)畫(huà)圓函數(shù),x、y、r、which分別表

31、示圓心坐標(biāo)、半徑、顏色*/ HDC hdc; /*定義設(shè)備上下文句柄*/int color;color=(which=0)?PIXEL_green:PIXEL_black);hdc=BeginPaint(hdig); /*獲得設(shè)備上下文句柄*/SetBrushColor(hdc,color); /*設(shè)置畫(huà)刷顏色*/FillCircle(hdc,x,y,r); /*調(diào)用園填充函數(shù)*/EndPaint(hdig,hdc); /*釋放設(shè)備上下文句柄*/static DLGTEMPLATE DlgInitProgress= /*定義對(duì)話框模板. 用static類(lèi)型數(shù)據(jù),使該數(shù)據(jù)的定義只在所在文件中有效

32、,以免因?yàn)槊挚臻g污染造成潛在的編譯或連接錯(cuò)誤*/ WS_BORDER|WS_CAPTION, /*對(duì)話框風(fēng)格,WS_BORDER創(chuàng)建有邊框的窗口 ,WS_CAPTION創(chuàng)建含標(biāo)題欄的主窗口*/ WS_EX_NONE, /*對(duì)話框擴(kuò)展風(fēng)格,WS_EX_NONE表示無(wú)擴(kuò)展風(fēng)格*/ 0,0,800,480, /*對(duì)話框位置,左上角坐標(biāo)(0,0),800、480分別為寬和高*/ "MY_LED_CONTROL", /*對(duì)話框標(biāo)題*/ 0, /*對(duì)話框圖標(biāo)*/ 0, /*對(duì)話框菜單*/ 9, /*對(duì)話框中控件個(gè)數(shù)。這個(gè)必須要匹配*/ NULL, /*pointer to contr

33、ol array*/ 0 /*附加值*/;static CTRLDATA CtrlInitData= /*控件數(shù)組*/ "static", /*控件類(lèi)型*/WS_VISIBLE|SS_SIMPLE, /*控件風(fēng)格,WS_VISIBLE創(chuàng)建初始可見(jiàn)的窗口,SS_SIMPLE顯示單行文本*/100,280,150,40, /*控件位置*/ID_TEXT1, /*控件ID*/"請(qǐng)輸入頻率", /*控件內(nèi)容*/0, /*附加值*/WS_EX_NONE /*控件擴(kuò)展風(fēng)格*/,"static",WS_VISIBLE|SS_SIMPLE,605,2

34、80,150,40,ID_TEXT2,"HZ",0,WS_EX_NONE, "button",WS_VISIBLE|WS_TABSTOP, /*WS_TABSTOP支持Tab鍵*/135,160,80,60,ID_LED1,"LED1",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,285,160,80,60,ID_LED2,"LED2",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,

35、435,160,80,60,ID_LED3,"LED3",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,585,160,80,60,ID_LED4,"LED4",0,WS_EX_NONE, "button",WS_VISIBLE|WS_TABSTOP,285,360,80,60,ID_START,"START",0,WS_EX_NONE , "button",WS_VISIBLE|WS_TABSTOP,435,360,80,60,

36、ID_STOP,"STOP",0,WS_EX_NONE , CTRL_COMBOBOX,WS_VISIBLE|WS_TABSTOP|CBS_AUTOSPIN|CBS_AUTOLOOP, /*CBS_AUTOSPIN創(chuàng)建旋鈕數(shù)字框,CBS_AUTOLOOP框中的數(shù)字將自動(dòng)循 環(huán)顯示*/ 435,270,80,40, ID_COMBOBOX, "0", /*旋鈕數(shù)字框初始值*/ 0, WS_EX_NONE ;static int DialogBoxProc(HWND hWnd, int message, WPARAM wParam, LPARAM lPara

37、m) /*對(duì)話框過(guò)程函數(shù),用來(lái)接收和處理所有發(fā)送到該窗口的消息*/ int number; /*用來(lái)存從旋鈕數(shù)字框獲得的數(shù)值*/ static int t=0; int num; /*存放定時(shí)時(shí)間*/ switch(message) case MSG_INITDIALOG: /*用戶(hù)在定義自己的對(duì)話框回調(diào)函數(shù)時(shí),需要處理 MSG_INITDIALOG消息,該消息是在 MiniGUI根據(jù)對(duì)話框模板建立對(duì)話框以及 控件之后 ,發(fā)送到對(duì)話框回調(diào)函數(shù)的 。*/SendDlgItemMessage(hWnd, ID_COMBOBOX, CB_SETSPINRANGE, 0, 10000); /*設(shè)置旋鈕

38、數(shù)字框的最大小值*/ return 1; case MSG_PAINT:/*重繪消息*/ draw_circular(hWnd,175,90,30,1);draw_circular(hWnd,325,90,30,1);draw_circular(hWnd,475,90,30,1);draw_circular(hWnd,625,90,30,1);printf("*init draw_ circular*n");case MSG_TIMER:t+; /*定時(shí)器消息,這里完成LED燈的閃爍*/ if(t%2!=0) ioctl(fd_led, 0,0); ioctl(fd_led

39、, 0, 1); ioctl(fd_led, 0, 2); ioctl(fd_led, 0, 3);printf("*timered*n"); draw_circular(hWnd,175,90,30,1);draw_circular(hWnd,325,90,30,1);draw_circular(hWnd,475,90,30,1); draw_circular(hWnd,625,90,30,1);break; else ioctl(fd_led, 1,0); ioctl(fd_led, 1, 1); ioctl(fd_led, 1, 2); ioctl(fd_led, 1

40、, 3);printf("*timegreen*n"); draw_circular(hWnd,175,90,30,0); draw_circular(hWnd,325,90,30,0); draw_circular(hWnd,475,90,30,0); draw_circular(hWnd,625,90,30,0); break; case MSG_COMMAND: /*擊鍵消息*/ switch (wParam) case ID_LED1:a+; /*控制LED燈亮暗*/ if(a%2!=0) ioctl(fd_led,0,0); draw_circular(hWnd,

41、175,90,30,1); else ioctl(fd_led,1,0); draw_circular(hWnd,175,90,30,0); printf("*led1*n"); break; case ID_LED2:b+; if(b%2!=0) ioctl(fd_led,0,1); draw_circular(hWnd,325,90,30,1); else ioctl(fd_led,1,1); draw_circular(hWnd,325,90,30,0); printf("*led2*n"); break;case ID_LED3:c+; if(c

42、%2!=0) ioctl(fd_led,0,2); draw_circular(hWnd,475,90,30,1); else ioctl(fd_led,1,2); draw_circular(hWnd,475,90,30,0); printf("*led3*n"); break;case ID_LED4:d+; if(d%2!=0) ioctl(fd_led,0,3); draw_circular(hWnd,625,90,30,1); printf("*led33*n"); else ioctl(fd_led,1,3); draw_circular(hWnd,625,90,30,0); printf("*led4*n"); B reak; case ID_START:printf("*start1*n"); number=SendMessage(GetDlgItem(hWnd,ID_COMBOBOX), CB_GETSPINVALUE, 0, 0);/*獲取旋鈕數(shù)字框的數(shù)值*/ printf("*%d*n",number); printf("*start2*n"); if(number!=0) printf("*start3*n"

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論