基于元件技术手册的嵌入式驱动开发的探索

来源 :企业科技与发展 | 被引量 : 0次 | 上传用户:datang0826
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  (1.南宁第三职业技术学校 广西 南宁 530001;2.桂林理工大学 南宁分校,广西 南宁 530001)
  【摘 要】文章通过对国内嵌入式系统岗位的技能进行分析,针对国内院校嵌入式系统课程的教学内容、实验实训开设的现状,根据企业对嵌入式岗位招聘需求,提出了基于元件技术手册的嵌入式驱动开发的新思路。以LPC2106驱动LCD1602液晶的项目,探索了基于元件技术手册来进行新产品开发的培训新思路,提出了基于元件技术手册进行产品研发的新方法,对拓展国内外嵌入式系统教学提供了新的课程培训思路。
  【关键词】嵌入式;驱动开发;LCD1602;LPC2106
  【中图分类号】TP311 【文献标识码】A 【文章编号】1674-0688(2016)03-0046-05
  1 嵌入式系统岗位分析
  随着我国信息化与工业化融合的推进,嵌入式技术的广泛应用已成为必然趋势[1]。企业不仅对嵌入式系统人才需求的数量在增加,对嵌入式系统人才的技能要求也在不断地提高。从事嵌入式产品的相关研发,离不开硬件层、中间层、软件层、功能层4个层次的研发工作[2]。它的开发流程都必须先定义产品功能,再对定义进行系统分割,然后进行软硬件的规划和设计,按照岗位职能可进一步细分如下。
  软件研发分为系统构建工程师、上层驱动开发工程师、上层应用程序开发工程师。
  硬件研发分为电路原理图设计工程师、PCB设计工程师、底层驱动开发工程师。
  软件研发的3类工程师按照操作系统的种类又分出与各种操作系统相对应的工程师。目前,在各领域应用的主流操作系统有UCOS-II、LINUX、WINCE、VXWORKS等。企业一般会按照不同的操作系统平台招聘相应的工程师。
  2 当前嵌入式系统培训的不足
  目前,国内高校开设嵌入式系统课程的高校、培训机构较少,嵌入系统课程的教学内容、实验实训的开设还处在探索的阶段[3]。通过对毕业学生、学员的回访和到企业的调研发现,由于在学习时学员对元件的手册没有全面地练习,对设备、元件的相关代码都是通过修改(教师提供或网上下载)而得到的,因此当采用新元件时,学员对新元件的驱动编写无从下手。
  3 嵌入式系统培训改进的基本思想
  (1)要让学员学习如何查看厂家提供的技术手册并根据元器件技术手册来进行设计。
  (2)培训项目元件的选取要有一定的复杂性,但最好选取学员不太陌生的元器件。
  (3)为了使学员能更深刻地理解驱动程序的代码是如何与元件的硬件电路相对应的,驱动程序的代码编写先不采用操作系统。
  4 项目设计
  根据项目设置的基本思想,设置一个嵌入式驱动液晶显示的电路并完成相关驱动代码的编写。
  液晶采用LCD1602,嵌入式CPU采用LPC2106,驱动项目编写软件采用ADS1.2,为了验证驱动代码运行的结果是否正确,采用Proteus软件完成电路设计,并通过Proteus电路仿真来验证[4]驱动代码在液晶电路的运行情况。
  项目主要通过LCD1602的显示程序来学习如何根据LCD1602厂家的技术手册编写驱动程序代码。
  液晶LCD1602的主要技术参数如下。
  1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,可以显示2行,每行显示16个ASCII字符,并且可以自定义图形,只需要写入相对应字符的ASCII码就可以显示[5](见表1)。
  根据液晶接口信号引脚说明,完成液晶和CPU的电路连接(如图1所示)。
  根据电路的连接,在程序中完成管脚的定义:
  #define rs (1<<8)
  #define rw (1<<9)
  #define en (1<<10)
  #define busy (1<<7)
  根據手册管脚的接口信号说明,确定和液晶相连接的LPC2106的引脚为输入输出IO口,同时将与液晶连接的CPU引脚定义为输出IO口的类型:
  PINSEL0=0x00000000; //设置所有引脚连接GPIO
  PINSEL1=0x00000000;
  IO0DIR=0x7ff; //设置P0.0—P0.10为输出IO口
  1602液晶的D0~D7端为8位数据口,进行数据传送,而RS、R/W、E端则配合可以做出不同的操作[5],对1602进行操作主要有4种,如下:{1}读状态,输入:RS=L,RW=H,E=H。输出:D0~D7=状态字。{2}写指令,输入:RS=L,RW=L,D0~D7=指令,E=高脉冲。输出:无。{3}读数据,输入:RS=H,RW=H,E=H。输出:D0~D7=数据。{4}写数据,输入:RS=H,RW=L,D0~D7=数据,E=高脉冲。输出:无。
  在进行读操作的时候,RW置于1,RS则根据读的内容(状态或数据)置为1或0,E置为1,可以在数据口读到正确的数据,在将E置为1之后,就可以紧跟着指令去读取数据,在读到数据后,再将E置为0。
  在进行写操作的时候,RW要置为0,RS根据写的内容不同(指令或数据)置为1或0,同时在将E置为1之前,要先将数据送到数据口上,然后将E置为1,经过一定的延时后,再将E置为0,在这个时间段内必须保证数据口上的数据稳定不变,且为有效的数据。
  从上文可以看出,如果想对1602进行何种操作,只要按其相对应的操作规程来做即可。
  虽然以上有4种操作,但实际上归类起来只有2种,一种读一种写,并且进行读或写都要进行数据的传送。
  液晶状态字说明如图2所示。   用CPU来控制LCD模块的方式十分简单,LCD模块的内部可以看成2组寄存器,一个为指令寄存器,另一个为数据寄存器,由RS引脚来控制。所有对指令寄存器或數据寄存器的存取均需检查LCD内部的忙碌标志STA7,此标志用来告知LCD内部正在工作,并不允许接收任何的控制命令。而此位的检查可以令RS=0,用读取D7来加以判断。当D7为0时,才可以写入指令或数据寄存器。因此,在对控制器每次进行读写操作之前,都必须进行读写检测,确保STA7为0。
  根据手册的要求,编写、读写检测函数:
  /****************************************************************************
  * 名称:ChkBusy( )
  * 功能:检查总线是否忙
  ****************************************************************************/
  void ChkBusy( )
  {
  IO0DIR=0x700;
  while(1)
  {
  IO0CLR=rs;
  IO0SET=rw;
  IO0SET=en;
  if(!(IO0PIN & busy))break;
  IO0CLR=en;
  }
  IO0DIR=0x7ff;
  }
  代码说明:
  根据读状态,输入RS=L,RW=H,E=H; 输出D0~D7状态字的定义。为了能读出D7的状态,要使RS=L,RW=H,E=H,因此定义IO0DIR=0x700,使P0.8-P0.10为输出IO口,而P0.0-P0.7输入IO口。
  忙检测完成后,需要对LCD1602输入指令和数据,因此定义IO0DIR=0x7ff,将P0.0-P0.10全部定义为输出IO口。
  在对液晶进行忙检测后,就可以对液晶进行读写操作。写操作分为写指令与写数据2种操作,写指令是定义对液晶进行何种操作,写数据是将数据传递给1602液晶。对液晶进行写操作一般是先执行写操作,然后再写数据。写指令与写数据相对应的函数如下:
  /****************************************************************************
  * 名称:WrOp( )
  * 功能:写指令函数
  ****************************************************************************/
  void WrOp(uint8 dat)
  {
  ChkBusy( );
  IO0CLR=rs; //全部清零
  IO0CLR=rw;
  IO0CLR=0xff; //先清零
  IO0SET=dat; //再送数
  IO0SET=en;
  IO0CLR=en;
  }
  通过写指令函数完成对液晶的写操作。
  写数据函数:
  /****************************************************************************
  * 名称:WrDat()
  * 功能:写数据函数
  ****************************************************************************/
  void WrDat(uint8 dat) //读数据
  {
  ChkBusy();
  IO0SET=rs;
  IO0CLR=rw;
  IO0CLR=0xff; //先清零
  IO0SET=dat; //再送数
  IO0SET=en;
  IO0CLR=en;
  }
  LCD1602手册中液晶初始化的要求如图3所示。
  在使用1602之前,必须对其进行初始化操作,初始化过程是往1602固定写入一定的指令,里面包括指定使用模式、清屏等[5]。LPC2106晶振为11.0592 MHz,为了能准确地延时,可能通过调用延时函数完成延时。
  /*****************************************************************************
  *名称:DelayNS( )
  *功能:长软件延时
  ******************************************************************************/
  void delay(uint8 z)
  {
  uint8 x,y;
  for(x=z;x>0;x--)
  for(y=200;y>0;y--) ;
  }
  /****************************************************************************
  * 名称:lcd_init( )   * 功能:lcd初始化函数
  ****************************************************************************/
  void lcd_init(void)
  {
  Delay(15);
  WrOp(0x38);
  Delay(5);
  WrOp(0x38);
  Delay(5);
  WrOp(0x38); //显示模式设置
  Delay(5);
  WrOp(0x08); //显示关屏
  WrOp(0x01); //显示清屏
  WrOp(0x06); //光标加1
  WrOp(0x0c); //开显示
  }
  在1602上,分为二行,每行有16个字符位置,如何在我们需要的位置上显示出对应的字符呢?可由RAM地址映射图及数据指针设置,确定液晶显示的位置(如图4所示)。
  要显示字符时先输入显示字符地址,也就是告诉模块在哪里显示字符:比如第二行第一个字符的地址是40 H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)
  图5是1602显示RAM缓冲区对应的地址,要在对应的位置显示出字符,首先要写入一个设置数据地址的指令码(80H+地址),然后紧跟着写入要显示的数据即可。
  写指令:WrOp (0x80+地址,0)
  写数据:WrDat (字符ASCII码,1)
  比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
  最后完成主函数的编写使用:
  /****************************************************************************
  * 名稱:main()
  * 功能:显示文本
  ****************************************************************************/
  int main(void)
  {
  lcd_init( );
  IODIR=0x7ff; //设置为输出
  IOCLR=0x7ff;
  WrOp(0xc1);
  WrDat('a');
  }
  代码说明:WrOp(0xc1)写指令函数定义字符在液晶中显示的地址为第二行第一个字符,WrDat('a')将要显示的字符a传递至液晶显示。
  完成程序的编译后将生成的.hex文件下载到proteus电路中完成仿真,液晶在第二行第一列正常显示出字符a。
  5 项目的扩展
  在完成了嵌入式液晶驱动代码的实验后,还可以引导学员对该项目进行扩展。
  (1)如何在液晶中显示字符串?
  为了能够显示字符串,可编写字符串显示函数:
  /****************************************************************************
  * 名称:DisText( )
  * 功能:显示文本函数
  ****************************************************************************/
  void DisText(uint8 addr,uint8 *p)
  {
  WrOp(addr);
  while(*p !='\0')WrDat(*(p++));
  }
  (2)引导学员修改程序:如何让液晶上显示的字符动态移动显示?
  (3)如何将ARM中LCD1602液晶的显示代码移植到其他的CPU中(以移植到8051为例),让学员感受到C语言作为高级语言的优势。
  (4)在项目中,针对元件技术手册引导学员进行其他课程的实验:如由元件外形尺寸,引导学生在设计PCB时根据手册上的元件外形尺寸设计LCD1602的元件PCB封装。
  6 结论
  本文通过对国内嵌入式系统岗位的分析,针对国内嵌入式系统教学、培训的情况,通过LPC2106驱动LCD1602液晶的项目,系统地展现了基于元件技术手册进产品研发的方法,探索了基于元件技术手册来进行新产品开发的培训新思路,对拓展国内外嵌入式系统教学提供了新的课程培训思路。
  参 考 文 献
  [1]黄福莹,黎相成,何华光.嵌入式技术课程的教学探讨[J].广西大学学报(哲学社会科学版),2007,29(5):77-78.
  [2]潘晓宁.高职高专院校嵌入式系统课程教学方法的探讨[J].职业教育研究,2007(8):24-25.
  [3]张其亮,韩斌.“嵌入式系统”课程的实验教学研究[J].实验室研究与探索,2009,28(6):132-133.
  [4]倪蕴涛.基于嵌入式系统实验课程教学方法改革和教学思路探索的研究[J].牡丹江教育学院学报,2007(4):130-131.
  [5]赵亮.液晶显示模块LCD1602应用[J].电子制作,2007(3):58-59.
  [责任编辑:钟声贤]
其他文献
中国共产党的百年历史是最好的教科书。习近平总书记指出,在全党开展党史学习教育,是推进党的自我革命、永葆党的生机活力的必然要求。在党史学习教育中,国有企业各级党组织要带领党员干部深学笃行,紧扣实际,深领悟、固堡垒、抓融合,不断靠实高质量发展举措,持续提升发展内生动力。  强化三级推动,坚定初心承诺  在党史学习教育中,国有企业各级党组织要不断拓展党史学习外延,深化党史学习内涵,通过强化党委主责导学、
期刊
新形势下,企业要不断探索推进宣传思想文化工作的新思路新举措,通过强化舆论引导、推动文化创新、夯实队伍建设等,党政同向发力、同频共振,努力为企业高质量发展提供坚强的舆论支持和精神动力。  加强阵地建设,强化舆论引导  企业要全面提升新闻宣传和舆论引导的影响力、传播力、引导力,用正义、理性的声音占领宣传阵地。  加强企业对外宣传。时下,企业应紧密围绕建党100周年、党史学习教育、推进企业高质量发展等重
期刊
党的基层组织是党全部工作和战斗力的基础,也是党联系群众的桥梁纽带。加强基层党组织建设,对于始终保持党的先进性和纯洁性,增强党的创造力、凝聚力和战斗力,促进社会和谐发展,都具有十分重要的意义。企业基层党建工作是党的建设的重要部分,抓好企业基层党建工作,对促进企业健康持续发展具有重要作用,能为企业发展提供有力保障。笔者认为,要抓好企业基层党建工作,需要在思想上高度重视,以加强思想政治建设为基础,以加强
期刊
新疆油田公司(以下简称“公司”)地处祖国西北边陲,人力资源相对匮乏。加之近年来受国际油价低位运行影响,企业效益下滑。青年人才“招不来、留不住”的问题日益凸显,严重影响公司改革发展稳定。  如何稳定好员工队伍、推进企业发展?近年来,公司党委认真学习贯彻习近平新时代中国特色社会主义思想,特别是习近平总书记关于“我们必须把人民对美好生活的向往作为我们的奋斗目标,既解决实际问题又解决思想问题,更好强信心、
期刊
企业安全文化是指企业在长期安全生产和经营活动中,逐步形成的以风险预控为核心,体现“安全第一、预防为主、综合治理”和“谁主管、谁负责”的安全生产原则,被广大员工所接受的安全生产价值观、安全生产理念、安全生产行为准则以及行为方式等涉及安全生产内容的总称,是企业安全管理的灵魂所在,是企业文化的重要组成部分。  重庆红宇精密工业集团有限公司(以下简称“红宇精工”)隶属中国兵器装备集团有限公司。作为国家大型
期刊
(广西建设职业技术学院,广西 南宁530003)  【摘 要】文章基于共生理论的视角,从“互惠共生”的观点出发,对校企合作建筑业工法建设进行了探讨。指出校企联合实体工法建设,是高校与建筑企业开展“产、学、研”合作的一种较理想的范式,认为在校企合作工法建设中,需要树立互补、互惠、合作理念,建立有效的管理制度,实行合理的利益共享与分配机制,加强双方在人员交流和培养、工法成果转化、资源共享方面的紧密合作
期刊
党史学习教育开展以来,中国诚通控股集团有限公司(以下简称“中国诚通”或“集团”)党委紧紧围绕“学党史、悟思想、办实事、开新局”目标要求,教育引导广大党员在潜心、诚心、真心、全心上聚焦发力,从学习百年党史中汲取奋进力量、从强化理论武装中感悟真理力量、从服务职工群众中展现先锋力量、从推动国资运营中彰显诚通力量,谱写国有资本运营高质量发展新篇章。  潜心学党史,汲取奋进力量  精心组织专题学习。在庆祝中
期刊
(重庆市万州天然气公司,重庆 404000)  【摘 要】如何更有效地提升企业思想政治工作的实效,以调动企业员工的积极性、激发员工的创造力,是当前企业管理过程中必须解决的重要课题。对此,企业可以探索通过建立健全刚性的规章制度,合理调整利益分配格局,严格落实考核制度,加强企业文化建设,切实关心职工生活,创新思想政治工作方式等举措来强化企业的班组思想工作。  【关键词】班组;思想政治工作;制度  【中
期刊
中国石油兰州石化公司(以下简称“兰州石化”或“公司”)是中国西部重要的炼化生产基地,其前身是兰州炼油化工总厂、兰州化学工业公司(以下简称“两兰”)。作为新中国石化工业的摇篮,兰州石化为推进新中国石化工业的发展,出产品、出技术、出经验、出人才,填补了中国炼油化工生产的多项历史空白。据不完全统计,截至目前,兰州石化累计向全国各地输送优秀管理及技术人才3万余名,有31名同志担任省部级以上领导职务,有3名
期刊
中国电建集团旗下的水电十六局有限公司(以下简称“公司”)是国内首批组建的国家级水利水电工程专业施工队伍。公司党委聚焦“建设知识型、技能型、创新型劳动者大军”这一目标,弘扬劳模精神和工匠精神,探索出劳模工作室示范集群的新模式,目前已组建劳模创新工作室、先进职工创新工作室各6个,共有成员80 余人,创新成果28项,其中2个被福建省总工会命名为“福建省示范性劳模工作室”,2个被命名为“福建省劳模工作室”
期刊