单片机C语言编程实例_第1页
单片机C语言编程实例_第2页
单片机C语言编程实例_第3页
单片机C语言编程实例_第4页
单片机C语言编程实例_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机C语言编程实例INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的多种芯片,从而扩充和扩展了其品种和应用领域。C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之一。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发

2、经验的人来说,学习单片机的C语言编程技术都是十分必要的。.C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前最先进、功能最强大、国内用户最多的C51编译器是KeilSoftware公司推出的KeilC51。第章单片机C语言入门1.1建立您的第一个C目使用c语言肯定要使用到c编译器,以便把写好的c程序编译为机器码,这样单片机才能执行编写好的程序。KEILUVISION2是众多单片机应用开发软件

3、中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面和常用的微软VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个1/39人学习和小型应用的开发。安装好后,你是不是迫不及待的想建立自己的第一个C程

4、序项目?下面就让我们一起来建立一个小程序项目。或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。首先当然是运行KEIL51软件。点击桌面图标,运行几秒后,出现如图1-1的屏幕。SOFTWARETrueIntegrationIDEforVISIONMicrocontroller飞islpfrtactsdbyU.S.andInternacionlcopyrightlatw,图1-1启动时的屏幕接着按下面的步骤建立您的第一个项目:(1)点击Project菜单,选择弹出的下拉式菜单中的NewProject,如图1-2接着弹出一个标准Window

5、s文件对话窗口,如图1-3。在“文件名”中输入您的第一个C程序项目名称,这里我们用test”,这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。“保存”后的文件扩展名为uv2,这是KEILuVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。图1-2NewProject菜单2/39图1-3文件窗口(2)选择所要的单片机,这里我们选择常用的Atmel公司的AT89C51。此时屏幕如图1-4所示。AT89C51有什么功能、特点呢?不用急,看图中右边有简单的介绍。完成上面步骤后,我们就可以进行程序的编写了1。(3)首先我们要在项目中创建新的程

6、序文件或加入旧程序文件。如果你没有现成的程序,那么就要新建一个程序文件。在KEIL中有一些程序的Demo,在这里我们还是以一个C程序为例介绍如何新建一个C程序和如何加到您的第一个项目中。点击图1-5中1的新建文件的快捷按钮,在2中出现一个新的文字编辑窗口,这个操作也可以通过菜单或快捷键Ctrl+N来实现。现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。下面是经典的一段程序,如果你看过别的程序书也许也有类似的程序:#includevoidmain(void)SCON=0x50;/串口方式1,允许接收TMOD=0x20;/定时器1定时方式2TCON=0x40;/设定时器1开始计数

7、TH1=0xE8;/11.0592MHz1200波特率TL1=0xE8;TI=1;TR1=1;/启动定时器while(1)printf(HelloWorld!n);/显示HelloWorld3/39图1-4选取芯片图1-5新建程序文件这段程序的功能是不断从串口输出HelloWorld!字符,我们先不管程序的语法和意思,先看看如何把它加入到项目中和如何编译试运行。(4)点击图1-5中的3保存新建的程序,也可以用菜单或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出类似图1-3的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时你会发现程序单词有了不同的颜色,说

8、明KEIL的C语法检查生效了。如图1-6鼠标在屏幕左边的SourceGroup1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。我们点击AddGroupSourceGroup1弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。这时在SourceGroup1文件夹图标左边出现了一个小十号说明,文件组中有了文件,点击它可以展开查看。4/39图16把文件加入到项目文件组中(5)C程序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HE

9、X文件,如何设置生成HEX文件就请看下面的章节。我们先来看图1-7,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5是菜单中的它们,在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6是有一个小放大镜的按钮,这就是开启关闭调试模式的按钮,它也存在于菜单Debug一StartStopDebugSession,快捷键为Ctrl+F5。

10、fileLriit管田0aI昌ProjectQetiuaPetinheri西同ProjectImportpVi5ionlProjectOpenProjectFloEKteruionSjTargets,Groyip5jFies.SpIpcI-0自匚融forT不rijFRciriwtIlanCaptions:ForTargetTar41ng.raws-j;箱Buildtaroet5四RobuildalltargetFilm承Transltf口!利yu欧苴上5LupbuildLie#ijroijcand卜惟uc图1-7编译程序5/39(6)进入调试模式,软件窗口样式大致如图1-8所示。图中1为运行,

11、当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4我们可以打开5中的申行调试窗口,这个窗口我们可以看到从51芯片的用行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有,这里不再一一介绍,大家不妨找找看,其它的功能也会在后面的章节中慢慢介绍。首先按4打开用行调试窗口,再按运行键,这时就可以看到用行调试窗口中不断的打“HelloWorld!:这样就完成了您的第一个C项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后我们就可以进行关闭KEIL等相关操作了1。到此为止

12、,初步学习了一些KEILuVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,还有就是对这里所讲的操作方法举一反三用于类似的操作中。FileEditViskProjectCebuqPenpheralsloot:SVCS帅ndowHelp身3Q。/电IO”4力用郎聃国3热|每质g国他瞰西盟Wldl#1HelloUoi?ldlHollsWorld!rHelloWorld!HdloWot-Id1HelloWorldHllsWorldI22mxjtlnEIudeATS51fincludevox

13、dintailii(void)=1CWSerial#1中SCON=0x50;虫耳Lo1ad科|毛用工.:IJ_U11_zJ图1-8调试运行程序1.2生成HEX文件和最小化系统在开始C语言的主要内容时,我们先来看看如何用KEILUVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节所有数据使用16进制数字表示,常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映像。一般的编程器都支持这种格式。我们先来打开第一节做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击图

14、1-9中的1项目文件夹,弹出项目功能菜单,选OptionsforTargetTarget1,弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。6/39打开项目选项窗口,转到Output选项页图1-10所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图1-11。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果。Keil、ProteusVSM软件使用2.1.

15、KeilC51KeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。下面介绍KeilC51软件的使用方法IVIY0J幺SOFTWARE进入KeilC51后,屏幕如下图所示。几秒钟后出现编辑界面。TPueIntegrationIDEforMicrocontrollerThisprogramisprotactedbyUS.andinternationalcopyriglitlaws.图2-1启动KeilC51时的屏幕图2-2进入KeilC51后的编辑界面7/39简单程序的调试学习程序设计语言、学习某种程序软件,

16、最好的方法是直接操作实践。下面通过简单的编程、调试,引导大家学习KeilC51软件的基本使用方法和基本的调试技巧。1)建立一个新工程,单击Project菜单,在弹出的下拉菜单中选中NewProject选项F).LiIdiLtr&jecl电咤JLkToeli5WS工工Help图2-3建立新工程2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.图2-4选择保存路径3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,Keilc51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel的8

17、9C51来说明,如下图所示,选才?89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定:8/39图2-5选择单片机型号4)完成上一步骤后,屏幕如下图所示:图2-6项目主界面到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序5)在下图中,单击“File菜单,再在下拉菜单中单击“NeW选项9/39图2-7新建文件新建文件后屏幕如下图所示:图2-8新建文件后屏幕此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File:在下拉菜单中选中“SaveAs选项单击,屏幕如下图所示,在文件名”栏右侧的编辑框中,键入欲使用的文件名,同

18、时,必须键入正确的扩展名。注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)o然后,单击保存”按钮。图2-9保存C文档10/396)回到编辑界面后,单击“Target1前面的午”号,然后在“SourceGroup1上单击右键,弹出如下菜单。I*fiibuiId:target|g;图2-10把C文档加入到项目I:土tWS4t然后单击“AddGroup(SourceGroup1屏幕如下图所示:图2-11选才iC文档选中Test.c,然后单击“Add”屏幕好下图所示:11/39图2-12加入C代码“Text1.c了吗?子项的多少与所注意到“Source

19、Group1文件夹中多了一个子项增加的源程序的多少相同。/包含文件7)现在,请输入如下的C语言源程序:#include#includevoidmain(void)SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1;/主函数printf(printf(while(1);“HelloIamKEIL.n);“Iwil);/此行及以上3行为PRINTF函数所必须/打印程序执行的信息即Keil在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了,c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后,如下图所示:12/3

20、9图2-13编辑代码“BuiltTarget选项(或者8)在上图中,单击“Project菜单,再在下拉菜单中单击图2-14设置断点使用快捷键F7),编译成功后,再单击“Project菜单,在下拉菜单中单击“Start/StopDebugSession(或者使用快捷键Ctrl+F5),屏幕如下所示:13/399)调试程序:在上图中,单击“Debug菜单,在下拉菜单中单击“GO选项,(或者使用快捷键F5),然后再单击“Debuj菜单,在下拉菜单中单击“StopRunning”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“SerialWindows#1”选项,就可以看到程

21、序运行后的结果,其结果如下图所示图2-15调试程序至此,我们在KeilC51上做了一个完整工程的全过程。但这只是纯软件的OpticnsforTargetTarget开发过程,如何使用程序下载器看一看程序运行的结果呢?10)单击“Project菜单,再在下拉菜单中单击下图中,单击“Output中单击CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。把程序下载到AT89S51单片机中图2-16设置生成Hex文件14/392.2.PROTEUSVSM本文将简单介绍一下Proteus的使用。在这里,我用的Proteus版本是Proteus6.7sp3Professiona

22、l。2.2.1Proteus6Professional界面简介I-驻安装完Proteus后,运行ISIS6Professional,会出现以下窗口界面:Ll.nWTTTTrEO-T5T5FrcrfE*eij*1:1上,又Eilc工i9ditLibrarF工。口暂早id酬勺hScvvcaJlabiifi!小十二电七中海零,giitfalp口*|窜图1|画画*+/0aRnc晶电心*照*产岛底I震I国及B-启,台助研皿仪医拓殖中曲I图2-17Proteus主界面为了方便介绍,我分别对窗口内各部分进行中文说明(见上图下面简单介绍各部分的功能2:1 .原理图编辑窗口(TheEditingWindow)顾

23、名思义,它是用来绘制原理图的。蓝色方框内为可编辑区,组件要放到它里面。注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。2 .预览窗口(TheOverviewWindow):它可显示两个内容,一个是:当你在组件列表中选择一个组件时,它会显示该组件的预览图;另一个是,当你的鼠标焦点落在原理图编辑窗口时(即放置组件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。15/39图2-18改变原理图的可视

24、范围3.模型选择工具栏(ModeSelectorToolbar)主要模型(MainModes1*选择组件(components)(默认选择的)2*放置连接点3*放置标签(用总线时会用到)4*放置文本5*用于绘制总线6*用于放置子电路7*用于即时编辑组件参数(先单击该图标再单击要修改的组件)一号R-烧回如1s配件(Gadgets)1*终端接口(terminals)有VCC、地、输出、输入等接口2*器件引脚:用于绘制各种引脚3*仿真图表(graph)用于各种分析,如NoiseAnalysis4*录音机5*信号发生器(generators)16/396*电压探针:使用仿真图表时要用到7*电流探针:使

25、用仿真图表时要用到8*虚拟仪表:有示波器等2D图形(2DGraphics)/口OdCOAm*1*画各种直线2*画各种方框3*画各种圆4*画各种圆弧5*画各种多边形6*画各种文本7*画符号8*画原点等4 .组件列表(TheObjectSelector)用于挑选组件(components)终端接口(terminals)、信号发生器(generators)、仿真图表(graph)等。举例,当你选择组件(componentsJ单击“P按钮会打开挑选组件对话框,选择了一个元件后(单击了OK”后),该组件会在组件列表中显示,以后要用到该组件时,只需在组件列表中选择即可。5 .方向工具栏(Orientati

26、onToolbar)旋转:C一旋转角度只能是90的整数倍。翻转:,完成水平翻转和垂直翻转。使用方法:先右键单击组件,冉点击(左击)相应的旋转图标6.仿真工具栏仿真控制按钮1*运行2*单步运行3*暂停4*停止2.2.2 操作简介1、绘制原理图:绘制原理图要在原理图编辑窗口中的蓝色方框内完成。原理图17/39编辑窗口的操作是不同于常用的WINDOWS应用程序的,正确的操作是:用左键放置组件;右键选择组件;双击右键删除组件;右键拖选多个组件;先右键后左键编辑组件属性;先右键后左键拖动组件;连线用左键,删除用右键;改连接线:先右击连线,再左键拖动;中键缩放原理图。具体操作见下面例子。2、定制自己的组件

27、:有三个个实现途径,一是用PROTEUSVSMSDK开发仿真模型,并制作组件;另一个是在已有的组件基础上进行改造,比如把组件改为bus接口的;还有一个是利用已制作好(别人的)的组件,我们可以到网上下载一些新组件并把它们添加到自己的组件库里面。由于我没有PROTEUSVSMSDK,所以我只介绍后两个2。3、Sub-Circuits应用:用一个子电路可以把部分电路封装起来,这样可以节省原理图窗口的空间。2.2.3 AVR单片机的仿真实例本例是实现AVR驱动LCD1602,并用示波器监测数据线。开始前先要准备好仿真文件,就是用编译器编译连接产生的调试或下载文件,不同编译器产生的文件格式是不同的,如I

28、CC是COF、IAR是D90,GCC是COF、ELF。Proteus6.7sp3支持的有COF、D90、HEX等,ELF暂不支持。本例用的是:lcd_C.hex。运行Proteus6Professional(ISIS6Professional)出现程序主界面窗口:1、添加组件到组件列表中:本例要用到的组件有:ATMEGA16、LM016L(LCD1602)地示波器。单击“P按钮,出现挑选组件对话框:图2-19点击P按钮图2-20选择元器件界面18/39在对话框的KEYWORDS中输入ATMEGA16,得到以下结果:V9MDLLUTI|AM=s.DLLl心”电?IijjfaMI*I02归jMel

29、eVoTt37治TME0附1口H口fehETiBDar4a.|15kaiaiF-piEigFrn-incyF|38iEftwhJK1-1.LLTi-I.ubj再人看图2-21搜索元器件单击OK,关闭对话框,这时组件列表中列出ATMEGA16,同样找出LM016L。最终结果:图2-22已选元器件列表2、放置组件:在组件列表中左键选取ATMEGA16,在原理图编辑窗口中单击左键,这样ATMEGA16就被放到原理图编辑窗口中了。同样放置LM016L。19/39如UNTIFLFDISISProfrtjeinna.1度忙画filbVicwElitLilbr&ryT*q1s口香二imGvapk4uUc4D

30、eBug10或1七包七116Molp口3日翻就占国7)!*+&0蚓0ccX鼬幅IH*陵/黑户”;1卷MN国殴4办八7的同典*皿事岳小-骂回如勿膏/口口40A国4王室之4UIWU:fe:ij主:zfz.士.COFut|卜IIi|【1Root4ibb11IL4BQQ中小力图2-23放置组件添加地”:左键选择模型选择工具栏中的行图标,出现:TERMINALSDEFAULTINPUT1UTPLITBIDIHPOWERSROUMDBUS图2-24添加“地”左键选择GROUND,并在原理图编辑窗口中左击,这样地”就被放置到原理图编辑窗口中了。添加示波器:左键选择模型选择工具栏中的旨图标,出现:INGTRU

31、MEN1SOSCLLQ5CDFELOGICAMALYSERCOUNTERTIMERVIRTUALTERMINALSRDEBUGGERI2CDEBLISGERSIGNALGENERATORPATTERMGENERATOIDCVOLTMETERDCAMMETERACVOLTMETERACAMMETER图2-25添加示波器左键选择OSCILLOSCOPE,并在原理图编辑窗口中左击,这样示波器就被放置到原理图编辑窗口中了。20/39JIgmFIIXULpq.比,MSpwrtraFOIrOSCiFlagRHir皿1pnnrHFTMQiritEWpmizp叼。口xrXfALiMWPAIJIOCIPHADD

32、网PftqjISCrPWUQrDnnHFWNT3ANFE-3QQ具FP方FEaFif37lRE-n3OClpt?7/msePDO/RPD1/PgMP?PA1/CC3PAV0C4隼内$闺3PD2/IH1DPD3/IMT1FD4/OCI0PEJ5/0C1APD6/ICPPD7/UC2MCCAR?P凡gDCSPMMC?PBQJXCK/TOPBl/nPBiMNfgMJF歌QCM1FB4/SSPB5/M0SIPK/MISOpB7/sei运行时,在Debug菜单中可以查看AVR的相关资源2。2.3. Keil与Proteus完美结合Keil与proteus连接调试Proteus与Keil联机(一)步骤如下

33、:下载Keilc51v7.50软件和proteus6.7SP3软件,分别进行安装。安装完毕以后进行如下设置:1、 系统安装上TCP/IP协议2、 把proteus安装目录下VDM51.dll(C:ProgramFilesLabcenterElectronicsProteus6ProfessionalMODELS)文件复制到Keil安装目录的C51BIN目录中。3、 编辑C51里tools.ini文件,力口入:TDRV1=BINVDM51.DLL(PROTEUSVSMMONITOR51DRIVER)4、 Keil里设置:Project-optionsforproject-debugtab5、选中

34、useproteusVSMmonitor51(如果想用两台电脑仿真,双击setting,输入IP地址或者DNSname.6、 载入proteus文件7、 proteus里DEBUG-useremotedebugmonitor进入KEIL的project菜单optionfortarget工程名。在DEBUG选项中右栏上部的下拉菜选中ProteusVSMMonitor-51Driver。在进入setting,如果同一台机IP名为,如不是同一台机则填另一台的IP地址。端口号一定为8000注意:可以在一台机器上运行Keil,另一台中运行proteus进行远程仿真。8、打开KEIL,按

35、F5开始仿真3。Proteus与Keil联机(二)1 .把压缩文件中的VDM51.DLL解压到Keil目录下的c51BIN2 .修改Keil目录下的TOOLS.ini文件如图23/39ETOOLS-已考+-LxLC51UJ(JKW-HLPHcMBJ=c_urAlktraCrX!lea!:eMeter,LLNBOOKIHLPC!;1TOOL1.chmlftcWarrhaCuidrSclEtion”.FATN=gTXKpI1CS1VSH-KlPir-HJK2(HH|UERSTOHuraiTonui-nitnisoi.diicltt-iiisd1;1ioSjsrmDnbLiourr)TDRV?=ff

36、1HM)K3fB.MI(-mtfflOB:PallJCCnfirigutiKHdDu)TJRU3-BHLPC2EHP.DLLFli_R.in】(TMhin国”R)JHWDtlSl.dllCrPrateusUebHrOSI-flTKTlWV,PLL(nTK5tTint)nnU,OIHHOH51.DLL(KeilHonitor51DriverAGII-TCPP.dil(TCFirconnprtInn*)唧触”;2也措售赞恻皿阱瞋|BS1B9DKft-HLrRELE*SEHJTFS.1TM(Relf*5*Hutf.GEH)BnnKi=Hipi.pdf(crrIngstjriq,0:roD0DK-KL

37、rC2S-1.PDF(*C2S1Ustk+sGuide1,CCH)unnK-HirG7iirn.emde*ntiinrt-nFunctl,niK*-ff:)R0DKh-HLPftS1.PDF(inE*rtlr/lltlLiti4STEEbl)%*图2-30修改Tools.ini如果Keil正在运行,则需重新启动3.使用ISIS打开LabcenterElectronicsProteus6ProfessionalSAMPLESC51Calculator原理图:HSDDBqe回2EFn口E国II原理图6ProfessionalSAMPLESC51图2-31打开Calculator4 .打开Keil选

38、择LabcenterElectronicsProteusCalculator目录下的Keil工程3:24/39IJik+lLL*Lhi-MItqUk-ll-e.hvk!wflrItfr+IV!l-tail_,3xQ|r.lhIfalTdiHLdrji-!n|ihr-ihFTFTddr(H.,H。叱3s1*fhrTgr*a1Tfer|M-|rB|uI】.,二正工:;.M:K1Cl工W5必BKSU!.jTHi工pF“i四:ry,-L!,II:.iirasmrnm=l.r.Mu加一E白TJJircrimm.-fhr*:-ra.iunSvuw片弭sJwMm盘fbUiII-f有“Jvr;arfeIkXh

39、-*yPHUIVLi.古专州f挎tlfirrrtffjff-stiiE34J.卜|“SiTLkIJS.cl星LIIJ-;:d付JlB|.:人鳖犯喊N卦盾硬nvAJiJ;LTVrSJELB-4干净嘉h时m$质”。人严HJFrna川田LT/PiI-.I怕Ilf书咔J叫图2-32打开Calculator的Keil工程5 .在Keil下重新编译一下,并按调试按钮图2-33调试Calculator25/39-L*C4if1913I,ciiamlAdiLHMLailLM,hgEU户LCfrTCALClATCflihKErciavKaiH1riiari*e&喷dggm-11Hlgr414nA,stimt-r

40、tci”t”吗他一心重”加追喇Ek3*中Mi-出麻nfhTUtaErrlrngMiK*:Jirrjn,的hrKaiPhTErnn-anbrlourubinAj!ra,期irwrtPtrr*feipjrw电t.r.j:et:,IKL-!iore!vn_jlrEtdrhjfcci51klU4,立aXM-X.曲G;iii4*!?ju.QaiiLrtffiTi电M”HuaLELfcA%.隼aai图2-34仿真Calculator是不是Keil与Proteus都一起运行起来了,和用硬件仿真差不多326/39第三章基础实验题目3.1.闪烁灯1.实验任务如图3-1所示:在P1.0端口上接一个发光二极管L1,

41、使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒2.电路原理图图3-1电路原理图3 .系统板上硬件连线把单片机系统”区域中的P1.0端口用导线连接到八路发光二极管指示模块”区域中的L1端口上4 .程序设计内容(1)延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图3-1-1所示的石英晶体为MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D112MHz,2个2个2个2个因此

42、,上面的延时程序时间为由以上可知,当R6=10、R7=248时,因此,1个机器周期为1微222248220=4010.002mso延时5ms,R6=20、R7=248时,延时10ms以此为基本的计时单位。如本实验要求0.2秒=200ms,10msXR5=200ms,则R5=20,延时子程序如下:DELAY:MOVR5,#20D1:MOVR6,#2027/39D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RET(2)输出控制如图3-1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,

43、即P1.0=0时,发光二极管L1亮;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。5 .程序框图Pio播tHLl厦农7T翅叱0.2图3-2程序框图Pro痴tB“er,Ll熹6 .C语言源程序#includesbitL1=P2A0;/延时0.2秒子程序voiddelay02s(void)(unsignedchari,j,k;for(i=20;i0;i-)for(j=20;j0;j-)for(k=248;k0;k-);)voidmain(void)(while(1)(L1=0;delay02s();L1=1;delay02s();)28/

44、393.2.多路开关状态指示1 .实验任务如图3-3所示,AT89S51单片机的P1.0P1.3接四个发光二极管L1L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)4。2 .电路原理图5l-oa-ll|jJtIrT-ilrjL=3|5-,IwII;Le.-Lj-lqrIr-1-LjiI-I_7ffittfByfrTFFFIS弱第一工nGm马;111FA:口学上后二:凰至mLmEsi工-.i之ssmdATlSBsiWCC图3-3电路原理图3 .系统板上硬件连线.把单片机系统”区域中的P1.0-P1.3用导线连接到八

45、路发光二极管指示模块”区域中的L1L4端口上;(2).把单片机系统”区域中的P1.4-P1.7用导线连接到四路拨动开关”区域中的K1-K4端口上;4 .程序设计内容(1) .开关状态检测对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JBP1.X,REL或JNBP1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOVA,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指小0(2) .输出控制根据开关的状态,由发光二极管L1L4来指示,我们可以用SETBP1.X和CLRP1.X指令

46、来完成,也可以采用MOVP1,#1111XXXXB方法一次指小05 .程序框图29/39图3-4程序框图6 .C语言源程序#includevoidmain(void)(while(1)(if(P1_4=0)(P1_0=0;else(P1_0=1;if(P1_5=0)(P1_1=0;else(P1_1=1;if(P1_6=0)(P1_2=0;else(P1_2=1;30/39)if(P1_7=0)(P1_3=0;)else(P1_3=1;)3.3.广告灯的左移右移1 .实验任务做单一灯的左移右移,硬件电路如图3-5所示,八个发光二极管L1L8分别接在单片机的P1.0-P1.7接口上,输出“阴,发

47、光二极管亮,开始时P1.0-P1.1-P1.2-P1.3-P1.7-P1.6告一P1.0亮,重复循环4。2 .电路原理图1sUI:,34ST11-1i-11-s1bpppppppe罟17M图3-5电路原理图3 .系统板上硬件连线把单片机系统”区域中的P1.0-P1.7用8芯排线连接到八路发光二极管指示模块”区域中的L1L8端口上,要求:P1.0对应着L1,P1.1对应着L2,:P1.7对应着L8。4 .程序设计内容我们可以运用输出端口指令MOVP1,A或MOVP1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。31/39每次送出的数据是不同,具体的数据如下表3

48、-1所示表3-1P1口数据表P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0说明L8L7L6L5L4L3L2L111111110L1亮11111101L2亮11111011rL3亮11110111L4亮11101111L5亮11011111L6亮10111111L7亮01111111L8亮5.程序框图诞就花二匚哩值吓月ji.时口;种|I一-_.3CC?。一祝,R1.比2一】J_VRA0叫”二二图3-6程序框图6.C语言源程序#includeunsignedchari;unsignedchartemp;unsignedchara,b;voiddelay(void)unsignedcharm,n,s;for(m=20;m0;m-)for(n=20;n0;n-)for(s=248;s0;s-);voidma

温馨提示

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

评论

0/150

提交评论