基于嵌入式系统的微型打印机模块设计与实现_第1页
基于嵌入式系统的微型打印机模块设计与实现_第2页
基于嵌入式系统的微型打印机模块设计与实现_第3页
基于嵌入式系统的微型打印机模块设计与实现_第4页
基于嵌入式系统的微型打印机模块设计与实现_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于嵌入式系统的微型打印机模块设计与实现Designandimplementationofthemicro-printermodulebasedonembeddedsystems学部:信息专业:计算机科学与技术毕业设计(论文)完成时间:自2012年12月至2013年5月摘要我们现在生活的年代,各种形态各种功能的打印机我们已经随处可见,例如喷墨打印机、激光打印机、针式打印机等等。其中微型打印机也已经在各个领域里面使用频繁了,例如超市、小商品店、邮政机构、金融行业、公用企事业单位、警务系统等等。发展至今,微型打印机衍生出极其多的种类,并且使用范围也变得更加的专一。本文主要介绍以EL-RAM-860开发板为平台的,基于嵌入式系统的微型打印机模块设计与实现。主要内容有:EL-RAM-860开发板与微型打印机模块的电路的设计,微型打印机驱动程序软件结构设计,驱动程序的编写与调用,在EL-RAM-860开发板上连接并且测试微型打印机模块。系统实现了以下功能:设计编写微型打印机驱动程序,调用函数与过程,使EL-RAM-860开发板可以与EPSON公司的M-150II型打印机芯通信,最终使EL-RAM-860驱动微型打印机模块打印简单文字。关键词:RAM;Linux;微型打印机;嵌入式系统;EL-RAM-860

AbstractNowadayspolymorphicandmultifunctionalprinterhasappearedeverywhere,suchasinkjetprinters,laserprinters,dotmatrixprinter,andsoon.Micro-printerhasalsobeenusedinmanyfieldsfrequently,suchassupermarket,commodityshop,postalauthorities,thefinancialsector,publicenterprise,institutionsandpolicesystem.Inrecentyears,micro-printerhasderivedmanytypesanditsusesrangeisalsobecomingmorespecific.LayingEL-RAM-860developmentboardasaplatform,thispaperwillintroducethemodulardesignandimplementationofthemicro-printerwhichisbasedonembeddedsystems.Someofthematerialcoverthefollowingaspects:thedesignforelectriccircuitbetweenEL-RAM-860developmentboardandthemoduleofmicro-printer;thedesignofdriversoftwarearchitectureformicro-printer,thepreparationandcallofthedriver,connectingtotheEL-RAM-860developmentboardandtestingthemoduleofmicro-printer.Thesystemimplementsthefollowingfunctions:thedesigningandwritingforthedriverofmicro-printer,callingthefunctionandtheprocedure,makingacommunicationbetweentheEL-RAM-860developmentboardandtheEPSONM-150IIprintercore,andfinallytomaketheEL-RAM-860drivemicro-printermoduleprintasimpletext.Keywords:RAM;Linux;MicroPrinter;EmbeddedSystems;EL-RAM-860目录1. 1绪论 11.1. 背景与意义 11.2. 微型打印机简介 11.3. 嵌入式系统简介 21.4. 课题研究方向和设计目标 22. 设计系统 22.1. EL-RAM-860开发板: 22.2. 打印机芯 33. 系统硬件设计 43.1. 方案设计 43.2. 硬件设计 54. 系统软件设计 64.1. 软件设计 65. 驱动程序主要功能实现 75.1. 建立对话框 75.2. 建立控件 85.3. 建立帮助对话框 95.4. 建立模板对话框 135.5. 子功能函数 186. 结论 21参考文献 22致谢 23附录 24附录一、其他代码 24arm830.h 24demoshow.c 31附录二、附图 421绪论背景与意义微型打印机在工业商业领域应用非常广,几乎成为所有行业办公用品中必不可少的一部分。市场上各种各样的微型打印机可以通过打印方式分为两种,针点式和热敏。热敏打印机凭借打印速度快、噪声小等优点而收到市场的青睐,赢得了大部分的市场份额;但是针点式微型打印机也因为其独特的工作原理及打印性能在一些专业的应用领域无法被替代。本文通过剖析M-150Ⅱ微型打印机机芯的组成结构和驱动原理,对针点式微型打印机的开发设计的主要原理做了详尽的论述,尽可能去设计一种结构、实用性强的针点式微型打印机制作方案。微型打印机简介作为一种常见的微型打印机,我国打印机市场初期就有一些利用EPSON打印机芯来生产产品的公司。针式打印机的技术已经成熟,它的结构简单、性能价格比高、生产成本低。尽管工作式的声音较大、打印图像的清晰度低、针头耗损概率高,但是通过技术的改进,针式打印机拥有了极快的打印速度、打印时的声音也被一定比例的降低、打印分辨率也得到了提高。这些改变,让针式打印机变得越来越专用化,逐渐成为银行存折、金融票据打印、学术研究领域连续打印、条形码打印、快速跳行打印和复写纸打印等特殊应用领域不可替代的工具。另外,因为针式打印的针头地控制很简单,所以可以通过相对廉价的控制板方案来进行生产,从而降低了成本和价格。进过多年的发展,针式打印机已经发展处了许多种类,他们适用于不同的行业领域,不同的针式打印机也有着各自的优缺点。从9针到24针,针式打印机凭借其低廉的价格、很少的打印成本和易用性一直非常的流行。但是他的缺点也很明显,针式打印机的打印质量不高,工作室会产生一定的噪音。我所采用的M-150Ⅱ型针式打印机机芯是基于嵌入式系统的一种击打式打印机,其最大的特点就是打印速度快,在短时间内可以完成较大的打印任务。主要应用于一些自助服务终端,如ATM机、排队叫号机、自助加油机、医疗检测设备电脑彩票机等。所以,基于嵌入式系统的针式打印机为人类提供了很多非常便利的服务,是现代人类生活中不可缺少的一部分。嵌入式系统简介嵌入式是一种专用的计算机系统,作为装置或设备的一部分,专为实际应用开发的一种技术,软件硬件均可剪裁。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板,主要是由CPU,外围硬件设备和操作系统组成。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。近年来,嵌入式技术凭借其体积小,集合度高,功能性强,应用广泛,更新快等特点,在市场中站稳了脚跟,在各行业的产品设计中得到了广泛的应用。课题研究方向和设计目标通过研究嵌入式系统的工作原理,熟悉使用ARM开发板EL-RAM-860,将EPSON微型打印机核心与EL-RAM-860开发板相连,通过C语言开发驱动程序,使EL-RAM-860开发板可以在嵌入式linux操作系统中,驱动外接行式打印机模块,实现基于嵌入式系统的行式打印机打印服务。设计系统EL-RAM-860开发板:EL-RAM-860开发板使我最终选定的开发板(见图1)。首先简单介绍一下此开发板:图1EL-RAM-860开发板EL-ARM-860型嵌入式实验开发系统可以运行VxWorks、WinCE、pSOS、QNX、ucosII、linux、uclinux等多种嵌入式操作系统,是专门为《嵌入式系统原理开发与设计》课程设计的实验工具,同时EL-ARM-860型嵌入式系统也是工程师们理想的开发工具。EL-ARM-860型教学实验系统采用了ARM920T核、Omap35xx等国内普遍认同的32位CPU,从而可以进行多模块的应用实验。使用时可根据试验情况连接不同种类的CPU板,同时兼容ARM7与ARM9。开发板具有很好的拓展性,通过使用Tech_V,可以制作出出不同用途的接口板。开发板还有很多外围的扩展设备,例如语音编解码、人机接口等单元,数字、模拟信号发生器,数字量IO输入输出。打印机芯本次课题采用的是EPSON公司的M-150Ⅱ型打印机芯(见图3)。图3M-150Ⅱ打印机芯EPSONM-150Ⅱ型打印机芯简介:

M-150系列点阵式打印机是世界上最小型的,重量不足80克,而工作性能极佳。

由于M-150系列打印机十分小巧,耗能极少,所以M-150系列是众多打印应用场合的理想打印机,从掌上终端到坐式计算机以及小型测量仪器都可使用该型打印机。M-150Ⅱ机芯是利用打印钢针撞击色带和纸打印出点阵组成的字符图形。打印采用44.5mm标准纸宽。在25℃,4.5VDC电压下,每点阵行100ms。打印原理是:系统硬件设计方案设计使用的主要设备:EL-RAM-860开发板ARM处理器芯片EPSONM150II微型打印机模块SHARPTFT_LCD液晶屏方案总流程示意图(图4)开开始加装打印机模块加载驱动程序打印成功结束是运行测试打印命令否图4总体设计流程图硬件设计嵌入式终端硬件系统,系统采用Samsung公司基于ARM公司的ARM920T处理器核生产的S3C2410处理器为处理器,该CPU是一款32位微控制器。考虑到嵌入式终端需要包含实时操作操作系统、图形用户界面(GUI)、英文及汉字字库、打印驱动程序等,我使用了一片容量为256K×16的静态RAM及一片容量为1M×16的Flash。操作系统时,按照显示器的提示,选择界面上提供的是个功能按钮,如“帮助”是用来查看程序中的帮助信息,“输入”是用来输入要打印的文字,“打印”是用来控制打印机进行打印输出,“退出”是用来退出打印程序。系统软件设计软件设计软件设计流程图如下图:开开始初始化打印机设置清空缓冲区wParam=PRI_HELP建立帮助对话框wParam=PRI_SEND是否建立输入对话框wParam=PRI_OK建立打印对话框wParam=PRI_CANCEL是是否否结束是否图6系统软件流程图驱动程序主要功能实现驱动程序主要分为四部分:1.建立对话框2.建立控件3.建立帮助对话框4.建立模板对话框下面开始设计代码:建立对话框通过代码建立对话框,通过DLGTEMPLATE函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小。WS_BORDER|WS_CAPTION表示带有边框和带有标题。WS_EX_NONE表示此对话框没有扩展风格。分别创建两个窗口,主对话框和帮助对话框。DLGTEMPLATEPRITEM={WS_BORDER|WS_CAPTION,WS_EX_NONE,160,100,320,240,"",0,0,0,NULL,0};DLGTEMPLATEPRIHelp={WS_BORDER|WS_CAPTION,WS_EX_NONE,200,160,320,240,"",0,0,0,NULL,0};建立控件通过CTRLDATA结构体来定义所需要的控件,此结构体代码为:typedefstruct{char*class_name;//controlclassDWORDdwStyle;//controlstyleintx,y,w,h;//controlpositionindialogintid;//controlidentifierconstchar*caption;//controlcaptionDWORDdwAddData;//additionaldataDWORDdwExStyle;//controlextendedstyle}CTRLDATA;定义常量“PRI_ITEM_NUM”“PRI_HELP_NUM”来确定控件的个数。代码如下:CTRLDATAPRIItem[PRI_ITEM_NUM];CTRLDATAPRIHelpItem[PRI_HELP_NUM];建立帮助对话框创建帮助对话框时,首先建立一个消息响应的函数PRIHelpProc,通过传递message,wParam消息参数来识别用户的操作,使用switch语句来执行命令。编写帮助对话框功能,添加帮助对话框的标题,控件数量数目和控件种类,每个控件使用8个属性来定义控件类型,控件名称,控件所在的位置,控件显示的标题信息。帮助对话框PRIHelp需要在这里定义3个属性:定义对话框的标题信息caption:微型打印机试验帮助;定义对话框的控件个数controlnr:自定义常数PRI_HELP_NUM;定义对话框的控件类型controls:PRIHelp。第一个控件是static型的,用来显示“实验帮助”,需要定义8个属性:定义控件的控制类型类class_name为:static;定义控件的显示形式dwStyle为:WS_VISIBLE|SS_GROUPBOX;定义控件的位置,X,Y值:3,0;定义控件的大小,W,H值:310,185;定义控件的名称id值:PRI_TEXT;定义控件的标题信息caption:实验帮助。第二个控件是static型的,用来显示提示的具体内容,需要定义8个属性:定义控件的控制类型类class_name为:static;定义控件的显示形式dwStyle为:WS_VISIBLE|SS_LEFT;定义控件的位置,X,Y值:5,20;定义控件的大小,W,H值:305,178;定义控件的名称id值:PRI_TEXT1;定义控件的标题信息caption:模块上的P.P,PSA,PSB,PSC,PSD,P.M分别与底板的O0到O5相连,I0接模块上的L.S,I1接模块上的D.T,取出实验箱上SI0,SI1的短接帽,点击\"打印\"开始打印.\n。第三个控件是button型的,用来实现退出功能,需要定义8个属性:定义控件的控制类型类class_name为:button;定义控件的显示形式dwStyle为:WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON定义控件的位置,X,Y值:130,100;定义控件的大小,W,H值:50,25;定义控件的名称id值:PRI_HLP_CANCEL;定义控件的标题信息caption:退出。在对话框上创建好所有的控件之后,通过DialogBoxIndirectParam函数定义对话框输出显示。以下是实现代码:staticintPRIHelpProc(HWNDhDlg,intmessage,WPARAMwParam,LPARAMlParam){switch(message){caseMSG_INITDIALOG:return(1);caseMSG_COMMAND:switch(wParam){casePRI_HLP_CANCEL:DestroyAllControls(hDlg);EndDialog(hDlg,wParam);break;}}returnDefaultDialogProc(hDlg,message,wParam,lParam);}staticvoidPRIHelpFun(HWNDhDlg){PRIHelp.caption="微型打印机实验帮助";PRIHelp.controlnr=PRI_HELP_NUM;PRIHelp.controls=PRIHelpItem;PRIHelpItem[0].class_name="static";PRIHelpItem[0].dwStyle=WS_VISIBLE|SS_GROUPBOX;PRIHelpItem[0].x=3;PRIHelpItem[0].y=0;PRIHelpItem[0].w=310;PRIHelpItem[0].h=185;PRIHelpItem[0].id=PRI_TEXT;PRIHelpItem[0].caption="实验帮助";PRIHelpItem[1].class_name="static";PRIHelpItem[1].dwStyle=WS_VISIBLE|SS_LEFT;PRIHelpItem[1].x=5;PRIHelpItem[1].y=20;PRIHelpItem[1].w=305;PRIHelpItem[1].h=178;PRIHelpItem[1].id=PRI_TEXT1;PRIHelpItem[1].caption="模块上的P.P,PSA,PSB,PSC,PSD,P.M分别与底板的O0到O5相连,I0接模块上的L.S,I1接模块上的D.T,取出实验箱上SI0,SI1的短接帽,点击\"打印\"开始打印.\n";PRIHelpItem[2].class_name="button";PRIHelpItem[2].dwStyle=WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON;PRIHelpItem[2].x=130;PRIHelpItem[2].y=100;PRIHelpItem[2].w=50;PRIHelpItem[2].h=25;PRIHelpItem[2].id=PRI_HLP_CANCEL;PRIHelpItem[2].caption="退出";DialogBoxIndirectParam(&PRIHelp,hDlg,PRIHelpProc,0L);}建立模板对话框创建模板对话框时,首先需要对设备进行初始化,然后建立模板对话框的消息响应的函数PRIProc,通过对PRIProc函数传递message,wParam消息参数来识别用户的操作,使用switch语句来执行命令。编写模板对话框功能,添加模板对话框的标题,控件数量数目和控件种类,每个控件使用8个属性来定义控件类型,控件名称,控件所在的位置,控件显示的标题信息。模板对话框PRIITEM需要在这里定义3个属性:定义对话框的标题信息caption:微型打印机试验;定义对话框的控件个数controlnr:自定义常数PRI_ITEM_NUM;定义对话框的控件类型controls:PRIItem。第一个控件是button型的,用来实现打开帮助对话框,需要定义8个属性:定义控件的控制类型类class_name为:button;定义控件的显示形式dwStyle为:WS_TABSTOP|WS_VISIBLE;定义控件的位置,X,Y值:25,100;定义控件的大小,W,H值:50,25;定义控件的名称id值:PRI_HELP;定义控件的标题信息caption:帮助。第二个控件是button型的,用来实现打印功能,需要定义8个属性:定义控件的控制类型类class_name为:button;定义控件的显示形式dwStyle为:WS_TABSTOP|WS_VISIBLE;定义控件的位置,X,Y值:130,100;定义控件的大小,W,H值:50,25;定义控件的名称id值:PRI_OK;定义控件的标题信息caption:打印。第三个控件是button型的,用来实现退出功能,需要定义8个属性:定义控件的控制类型类class_name为:button;定义控件的显示形式dwStyle为:WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON定义控件的位置,X,Y值:235,100;定义控件的大小,W,H值:50,25;定义控件的名称id值:PRI_CANCEL;定义控件的标题信息caption:退出。在对话框上创建好所有的控件之后,通过DialogBoxIndirectParam函数定义对话框输出显示。以下是实现代码:staticintPRIProc(HWNDhDlg,intmessage,WPARAMwParam,LPARAMlParam){ Init_GM160switch(message){caseMSG_INITDIALOG:return1;caseMSG_COMMAND:switch(wParam){casePRI_HELP:PRIHelpFun(hDlg);break;casePRI_SEND: GetWindowText(GetDlgItem(hDlg,BT_EDIT1),data,48);i=0; while((data[i])!='\0')sendch(data[i++]);//发送单个字符 SendShortMessage(data);break;casePRI_OK:fd=open("/dev/miniprinter",0);status=ioctl(fd,34,0); close(fd); casePrint_INIT:fd=open("/dev/miniprinter",0);len=ioctl(fd,7,0);close(fd);sprintf(string,"%x",len);SetDlgItemText(hDlg,WET_TEXT4,string);break; break;casePRI_CANCEL:DestroyAllControls(hDlg);EndDialog(hDlg,wParam);break;}}returnDefaultDialogProc(hDlg,message,wParam,lParam);}staticvoidprint_control(HWNDhWnd){PRITEM.caption="微型打印机实验";PRITEM.controlnr=PRI_ITEM_NUM;PRITEM.controls=4;PRIItem[0].class_name="button";PRIItem[0].dwStyle=WS_TABSTOP|WS_VISIBLE;PRIItem[0].x=24;PRIItem[0].y=100;PRIItem[0].w=50;PRIItem[0].h=25;PRIItem[0].id=PRI_HELP;PRIItem[0].caption="帮助";PRIItem[1].class_name="button";PRIItem[1].dwStyle=WS_TABSTOP|WS_VISIBLE;PRIItem[1].x=98;PRIItem[1].y=100;PRIItem[1].w=50;PRIItem[1].h=25;PRIItem[1].id=PRI_SEND;PRIItem[1].caption="输入";PRIItem[2].class_name="button";PRIItem[2].dwStyle=WS_TABSTOP|WS_VISIBLE;PRIItem[2].x=172;PRIItem[2].y=100;PRIItem[2].w=50;PRIItem[2].h=25;PRIItem[2].id=PRI_OK;PRIItem[2].caption="打印";PRIItem[3].class_name="button";PRIItem[3].dwStyle=WS_TABSTOP|WS_VISIBLE|BS_PUSHBUTTON;PRIItem[3].x=246;PRIItem[3].y=100;PRIItem[3].w=50;PRIItem[3].h=25;PRIItem[2].id=PRI_CANCEL;PRIItem[2].caption="退出";DialogBoxIndirectParam(&PRITEM,hWnd,PRIProc,0L);}子功能函数此驱动一共包含4个功能子函数:初始化功能函数;发送字符功能函数;传递数据功能函数;显示字符功能函数;初始化函数:将打印机的各项参数修改成初始数值。发送字符功能函数:在满足发送条件(LSR&0x20)==0,将字符传送给GM450RL。传递数据功能函数:建立一个变量len用来记录字符串长度,然后使用while循环进行计数,统计出字符串长度。建立for循环使用发送字符功能函数Sendch依次发送字符给GM450RL。显示字符功能函数:初始化GM160后通过传递数据功能函数SendData获取字符,通过printf方法显示出来。代码如下:/************初始化*****************/voidInit_GM160(void){chartemp;inti;LCR=0x80;//DLAB=1 for(i=0;i<3000;i++) GM450RL=0x0c; GM450RH=0x0; LCR=0x03; //8bitdata,1stopbit GM450RH=0x0;//nousetheinterrupt; temp=LSR; }/************发送字符*****************/voidsendch(charch){while((LSR&0x20)==0);//maybehaveproblemGM450RL=ch;}/****************senddata*******************/voidSendData(char*content){intlen=0,i;while((content[len])!='\0')len++;//统计数组字符数for(i=0;i<len;i++)sendch(content[i]);//发送单个字符sendch(26);//26代表结束换行}/*****************GSMsendshortmessage**********************/voidSendShortMessage(char*data){ inti;Init_GM160();//初始化GM160SendData(data);printf("\r\nprint\r\nData(%s)\r\n",data);return;}结论本课题所有的操作都是基于ARM版试验系统EL-RAM-860。学校在进行ARM板嵌入式系统应用教学时可以添加打印功能的实验方案,可以让同学们在学习的时候更加的直观形象。驱动程序均使用C语言编写而成,结构非常鲜明,具有很强的可读性强,但是在速度上相对于汇编语言而言较慢。产品在开发选取均是身边易于获取的器件,使用的开发平台和微型打印机模块在市场上也具有一定的使用空间,通过研究此课题,有利于将书本上的知识与实际市场应用很好的结合起来,为走出校门,尽快的服务于社会架设了一条很好的桥梁。

参考文献[1]周立功等编.ARM嵌入式系统基础教程[M].北京航空航天大学出版社,2005[2]谭浩强,张基温.C语言程序设计教程(第3版)[M].北京:高等教育出版社,2006[3]田泽.嵌入式系统的开发与应用[M].北京航空航天大学出版社,2005[4]达胜科技有限公司.EL-ARM860_3530说明书[M].2008[5]达胜科技有限公司.WINCE实验指导书2410[M].2008[6]达胜科技有限公司.EL-ARM-860实验指导书[M].2008[7]周立功等编.ARM嵌入式系统实验教程(二)[M].北京航空航天大学出版,2005

致谢首先感谢北京城市学院学院和学院的全体老师。在四年的学习过程中,学院给我提供了一个良好的学习环境、研究环境,学院的老师授予我丰富的专业知识和技能,使我能够顺利完成本科阶段的学习。然后感谢我的指导老师郭乐深老师,从报告的选题、资料的收集、框架的设计开始,他就以广博的学识给予我精心的指导和热情的帮助,又在繁忙的工作之际多次审阅论文,对论文提出了许多宝贵的修改意见,让论文从最早期的工程描述性质到现在的条理清晰,行文重点突出,无不体现出导师严谨的治学作风、一丝不苟的治学态度,在此再次向郭最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!

附录附录一、其他代码 arm830.h#defineCPLD_BASE0(0xd3000000)#defineOUTPUT*(unsignedchar*)CPLD_BASE0#defineINPUT*(unsignedchar*)(CPLD_BASE0+0x16)#defineCS0(unsignedchar*)(CPLD_BASE0+0x30)#defineCS1(unsignedchar*)(CPLD_BASE0+0x40)#defineCS2(unsignedchar*)(CPLD_BASE0+0x50)#defineCS3(unsignedchar*)(CPLD_BASE0+0x60)#defineCS1B(unsignedchar*)(CPLD_BASE0+0x80)#defineCS2B(unsignedchar*)(CPLD_BASE0+0xc0)#defineGM450RL*CS0#defineGM450RH*(CS0+1)#defineLCR*(CS0+3)#defineLSR*(CS0+5)externunsignedchara2h(unsignedchardat);unsignedchara2h(unsignedchardat){if((dat>0x30)&&(dat<0x3a))dat-=0x30;elseif((dat>0x40)&&(dat<0x5b))dat=dat+0xa-0x41;elseif((dat>0x60)&&(dat<0x7b))dat=dat+0xa-0x61;returndat;}externvoiddraw_gap(HDChdc,intx0,inty0,intw_h,charl,chargap,charatri);voiddraw_gap(HDChdc,intx0,inty0,intw_h,charl,chargap,charatri){charnum;intx=x0,y=y0;if(atri==0)num=w_h/gap;elsenum=w_h/gap;for(;num>1;num--){if(atri==0){MoveTo(hdc,x+gap,y);LineTo(hdc,x+gap,y-l);x+=gap;y=y0;}else{MoveTo(hdc,x,y-gap);LineTo(hdc,x+l,y-gap);x=x0;y-=gap;}}}externvoiddraw_coordinate(HDChdc,intx,inty,intw,inth,chargap,charspace);voiddraw_coordinate(HDChdc,intx,inty,intw,inth,chargap,charspace){//SetPenColor(hdc,SysPixelIndex[0]);MoveTo(hdc,x,y);LineTo(hdc,x+w,y);MoveTo(hdc,x+w,y);LineTo(hdc,x+w-2,y-2);MoveTo(hdc,x+w,y);LineTo(hdc,x+w-2,y+2);draw_gap(hdc,x,y,w,gap,space,0);MoveTo(hdc,x,y);LineTo(hdc,x,y+h);MoveTo(hdc,x,y+h);LineTo(hdc,x-2,y+h+2);MoveTo(hdc,x,y+h);LineTo(hdc,x+2,y+h+2);draw_gap(hdc,x,y,-h,gap,space,1);}externvoiddelay(intt);voiddelay(intt){while(t>0)t--;}externchar*Cmd_16c450(char*cmd,charmode);char*Cmd_16c450(char*cmd,charmode){inti,fd;char*tmp=0;fd=open("/dev/myGSM",0);//打开驱动switch(mode){case0:i=ioctl(fd,1,(unsignedlong)cmd);//发送一般的AT指令,格式AT+...0xdbreak;case1:i=ioctl(fd,2,(unsignedlong)cmd);//发送短信内容,格式...26break;case2:i=ioctl(fd,0,(unsignedlong)cmd);//拨打电话,格式ATD...";"0xdbreak;case3:i=ioctl(fd,31,(unsignedlong)cmd);//接听或挂断电话,格式...0xdbreak;case4:i=ioctl(fd,3,0);//StartTimer3break;case5:i=ioctl(fd,4,0);//StopTimer3break;case6:i=ioctl(fd,32,(unsignedlong)cmd);//直接向450写字符串break;case7:i=ioctl(fd,33,(unsignedlong)cmd);//直接从450读字符串break;default:break;}if(mode<4)read(fd,tmp,200);elsetmp=0;close(fd);returntmp;}externchar*StrToDat(char*src,unsignedcharlenth);char*StrToDat(char*src,unsignedcharlenth)//这个函数的功能是将一个字符串转换成相应的16进制数据,调用时必须注意{char*p,*p1=0,i,dat;shorttmp=0;p=p1;lenth/=2;if(lenth>20)lenth=20;for(;lenth>0;lenth--){tmp=0;for(i=0;i<4;i++){dat=*src++;if((dat>0x2f)&&(dat<0x3a))dat-=0x30;elseif((dat>0x40)&&(dat<0x47))dat-=(0x40-10);elseif((dat>0x60)&&(dat<0x67))dat-=(0x60-10);tmp=tmp*16+dat;}*p1++=tmp;}*p1='\0';returnp;}externunsignedintStrToInt(char*src);unsignedintStrToInt(char*src)//这个函数的功能是将一个字符串转换成相应的16进制数据,调用时必须注意{chartmp;intdat=0;while(*src){tmp=*src++;if((tmp>0x2f)&&(tmp<0x3a))tmp-=0x30;elseif((tmp>0x40)&&(tmp<0x47))tmp-=(0x40-9);elseif((tmp>0x60)&&(tmp<0x67))tmp-=(0x60-9);dat=dat*16+tmp;}returndat;}externvoidHexToStr(char*dst,intdat);voidHexToStr(char*dst,intdat)//这个函数的功能是将一个16进制的数据转换成相应的字符串,调用时必须注意{chartmp,flg=0;while(dat!=0){tmp=(dat&0xf0000000)>>28;if(tmp!=0)flg=1;dat<<=4;if((!flg)&&(!tmp))continue;elseif(tmp<10)*dst++=0x30+tmp;else*dst++=0x40-9+tmp;}*dst=0;}externvoidDecToStr(char*dst,intdat);voidDecToStr(char*dst,intdat)//这个函数的功能是将一个10进制的数据转换成相应的字符串,调用时必须注意{charflg=0,i=0;floattmp;intco=1000000000;while(i<10){i++;tmp=dat/co;dat%=co;co/=10;if(tmp!=0)flg=1;if((!flg)&&(!tmp))continue;*dst++=0x30+tmp;}*dst=0;}externintDecToHex(unsigneddat);intDecToHex(unsigneddat)//这个函数的功能是将一个10进制的数据转换成相应的16进制数据,调用时必须注意{unsignedinttmp=0,co=0x10000000;charflg=0;while(dat){if((co<dat)||flg){tmp=tmp*0x10+dat/co;dat%=co;if(!flg)flg=1;}co/=0x10;}returntmp;}externintHexToDec(unsigneddat);intHexToDec(unsigneddat)//这个函数的功能是将一个16进制的数据转换成相应的10进制数据,调用时必须注意{unsignedinttmp=0,co=10000000;charflg=0;while(dat){if((co<dat)||flg){tmp=tmp*0x10+dat/co;dat%=co;if(!flg)flg=1;}co/=10;}returntmp;}demoshow.c#include<stdio.h>#include<math.h>#include<stdlib.h>#include<minigui/common.h>#include<minigui/minigui.h>#include<minigui/gdi.h>#include<minigui/window.h>#include<minigui/control.h>#include"arm830.h"#defineport0x1#defineport10x1#defineport20x1#defineport30x1#defineport40x1HWNDhMainWnd;//主窗口句柄#include"demo_interface/leddemo.h"#include"demo_interface/iodemo.h"#include"demo_interface/ad0809demo.h"#include"demo_interface/ad7852demo.h"#include"demo_interface/ad2543demo.h"#include"demo_interface/hd7279.c"#include"demo_interface/icl7135.c"#include"demo_interface/8255.c"#include"demo_interface/4in1.c"#include"demo_sensor/ad590demo.h"#include"demo_sensor/humiditydemo.h"//#include"demo_sensor/pressuredemo.h"#include"demo_sensor/m1820.c"#include"demo_sensor/hall.c"#include"demo_sensor/infrared.c"#include"demo_sensor/sonicdemo.h"#include"demo_communication/candemo.h"#include"demo_communication/gsmdemo.h"#include"demo_communication/Bluetooth.c"#include"demo_communication/wirelessdemo.h"#include"demo_communication/gps.c"#include"demo_communication/rs232_485.c"#include"demo_communication/wifi.c"#include"demo_communication/zigbee.c"#include"demo_communication/gtdemo.h"#include"demo_objector/iccarddemo.h"#include"demo_objector/mfcarddemo.h"#include"demo_objector/audio.c"#include"demo_communication/modem.c"#include"demo_objector/3in1.h"#include"demo_objector/DC_motor.c"#include"demo_objector/step_motor.c"#include"demo_objector/pwm_motor.c"//#include"demo_objector/sTC.c"#include"demo_objector/PID_temp.c"#include"demo_objector/step3_motor.c"#include"demo_objector/print.c"#include"demo_objector/fingerprint.c"#include"menu/MainMenu.h"staticvoidWelcome(HWNDhWnd,HDChdc){intstartx=30,starty=40,gap=40;TextOut(hdc,startx,starty,"键盘使用说明:");TextOut(hdc,startx,starty+gap*1,"本实验演示系统键盘可通过'F'键进行两套键盘的切换.");TextOut(hdc,startx,starty+gap*2,"1.功能键盘:功能键盘为默认键盘.程序开始运行时即为功能键盘,功能键盘主要");TextOut(hdc,startx,starty+gap*3,"实现方向的选择;'C'键用来打开菜单;'E'键实现焦点切换;'0'键为确定键.");TextOut(hdc,startx,starty+gap*4,"2.数字键盘:在功能键盘模式下按下'F'切换到数字键盘,数字键盘下进行0-9的数");TextOut(hdc,startx,starty+gap*5,"字输入,同时'B'键为BACKSPACE功能.");TextOut(hdc,startx,starty+gap*6,"实验箱的默认设定:取出实验箱上SI0--SI7的短接帽.");TextOut(hdc,startx,starty+gap*7,"拨码开关SW4:1--ON;2OFF;SW2和S1:全为OFF;SW5:有且只有右边第1位为ON.");TextOut(hdc,startx,starty+gap*8,"ARM9-S3C2410CPU板的默认设定:");TextOut(hdc,startx,starty+gap*9,"短接JP1和AREFSEL,调试时使用直连串口线和交叉网线.");}staticintMenuWinProc(HWNDhWnd,intmessage,WPARAMwParam,LPARAMlParam){HDChdc;switch(message){caseMSG_PAINT:hdc=BeginPaint(hWnd);Welcome(hWnd,hdc);EndPaint(hWnd,hdc);return0;caseMSG_CLOSE:DestroyMainWindow(hWnd);PostQuitMessage(hWnd);return0; caseMSG_COMMAND: switch(wParam){/****************通信类实验******************/ caseIDM_COM_DEMO1:CAN(hWnd); break; caseIDM_COM_DEMO2:GSM(hWnd); break; caseIDM_COM_DEMO3:BlueTooth(hWnd); break; caseIDM_COM_DEMO4:WIRELESS(hWnd); break; caseIDM_COM_DEMO5:MODEM(hWnd); break; caseIDM_COM_DEMO6:GPS(hWnd); break; caseIDM_COM_DEMO7:RS232_485(hWnd); break; caseIDM_COM_DEMO8:GT(hWnd); break; caseIDM_COM_DEMO9://ZIGBE模块WIFI(hWnd); break; caseIDM_COM_DEMO10://WIFI模块ZIGBEE(hWnd); break;/***************接口类实验********************/caseIDM_INT_DEMO1:Led16(hWnd);//Led16*16实验break;caseIDM_INT_DEMO2:IO(hWnd);//244-273实验break;caseIDM_INT_DEMO3:AD0809(hWnd);//AD0809实验break;caseIDM_INT_DEMO4:AD7852(hWnd);//AD7852实验break;caseIDM_INT_DEMO5:AD2543(hWnd);//AD2543实验break;caseIDM_INT_DEMO6:PIO8255(hWnd);//AD7852实验break;caseIDM_INT_DEMO7:HD7279(hWnd);//AD7852实验break;caseIDM_INT_DEMO8:ICL7135(hWnd);//AD7852实验break;caseIDM_INT_DEMO9:PIO8255(hWnd);//AD7852实验break;caseIDM_INT_DEMO10:M4IN1(hWnd);//AD7852实验break;/*****************传感器类实验***************/caseIDM_TRA_DEMO1:AD590(hWnd);//温度实验break;caseIDM_TRA_DEMO2:Humi(hWnd);//湿度\压力实验break;caseIDM_TRA_DEMO3:DS1820(hWnd);//1820break;caseIDM_TRA_DEMO4:HallSensor(hWnd);//霍尔电流传感器break;caseIDM_TRA_DEMO5:IR_sensor(hWnd);//红外传感器break;caseIDM_TRA_DEMO6:SonicSensor(hWnd);//超声波测距break;/*caseIDM_TRA_DEMO7:AllSensor(hWnd);//传感器综合break;*//*****************控制对象实验***************/caseIDM_CON_DEMO1:ICCARD(hWnd);break;caseIDM_CON_DEMO2:MFCARD(hWnd);break;/*caseIDM_TRA_DEMO7:SONIC(hWnd);break;*/caseIDM_CON_DEMO3:AUDIO(hWnd);break;caseIDM_CON_DEMO4:M3IN1(hWnd);break;caseIDM_CON_DEMO5:DCmotor(hWnd); break;caseIDM_CON_DEMO6:SPmotor(hWnd);break;caseIDM_CON_DEMO7:pwmmotor(hWnd); break;caseIDM_CON_DEMO8:temp_control(hWnd);break;caseIDM_CON_DEMO9://三相步进电机SP3motor(hWnd);b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论