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

下载本文档

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

文档简介

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

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

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

4、基本可以满足一般的个人学习和小型应用的开发。安装好后,你是不是迫不及待的想建立自己的第一个C程序项目?下面就让我们一起来建立一个小程序项目。或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。首先当然是运行KEIL51软件。点击桌面图标,运行几秒后,出现如图1-1的屏幕。图1-1启动时的屏幕接着按下面的步骤建立您的第一个项目:(1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图1-2。接着弹出一个标准Windows文件对话窗口,如图1-3。在"文件名"中输入您的第一个C程序项目名称,这里我

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

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

7、x40; /设定时器1开始计数TH1 = 0xE8; /11.0592MHz 1200波特率TL1 = 0xE8;TI = 1;TR1 = 1; /启动定时器while(1)printf ("Hello World!n"); /显示Hello World图1-4选取芯片图1-5新建程序文件这段程序的功能是不断从串口输出"Hello World!"字符,我们先不管程序的语法和意思,先看看如何把它加入到项目中和如何编译试运行。(4)点击图1-5中的3保存新建的程序,也可以用菜单FileSave或快捷键Ctrl+S进行保存。因是新文件所以保存时会弹出类似图1-

8、3的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时你会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。如图1-6鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。我们点击Add File to Group 'Source Group 1'"弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。这时在Source Group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。图16把文件加入到项目文件组中(5)C程

9、序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件,如何设置生成HEX文件就请看下面的章节。我们先来看图1-7,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。2是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5是菜单中的它们,在4中可以看到编译的错误信息和使用的系统资源情况等,以后

10、我们要查错就靠它了。6是有一个小放大镜的按钮,这就是开启关闭调试模式的按钮,它也存在于菜单DebugStartStop Debug Session,快捷键为Ctrl+F5。图1-7编译程序(6)进入调试模式,软件窗口样式大致如图1-8所示。图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。3是复位,模拟芯片的复位,程序回到最开头处执行。按4我们可以打开5中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有,这里不再一一介绍,大家不妨找找看,其它的功能也会在后面的章节中慢慢介绍。首先按4打开串

11、行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打“Hello World!“。这样就完成了您的第一个C项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后我们就可以进行关闭KEIL等相关操作了1。到此为止,初步学习了一些KEIL uVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,还有就是对这里所讲的操作方法举一反三用于类似的操作中。图1-8调试运行程序1.2生成HEX文件和最小化系统在开始C语言的主要内容时,我们先来看看如何用K

12、EIL uVISION2来编译生成用于烧写芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映像。一般的编程器都支持这种格式。我们先来打开第一节做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右击图1-9中的1项目文件夹,弹出项目功能菜单,选Options for Target'Target1',弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。打开

13、项目选项窗口,转到Output选项页图1-10所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路径中。我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图1-11。这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果。Keil、Proteus VSM软件使用 2.1. Keil C51Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。下面介绍Keil C51

14、软件的使用方法进入 Keil C51 后,屏幕如下图所示。几秒钟后出现编辑界面。图2-1 启动Keil C51时的屏幕图2-2进入Keil C51后的编辑界面简单程序的调试学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。 1)建立一个新工程,单击Project菜单,在弹出的下拉菜单中选中New Project选项图2-3 建立新工程2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.图2-4 选择保存路径3)这时会弹出一个对

15、话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,Keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定:图2-5 选择单片机型号4)完成上一步骤后,屏幕如下图所示:图2-6 项目主界面到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项 图2-7 新建文件新建文件后屏幕如下图所示:图2-8 新建文件后屏幕此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首

16、先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。注意,如果用语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮。 图2-9 保存C文档6)回到编辑界面后,单击“Target 1”前面的“”号,然后在“Source Group 1”上单击右键,弹出如下菜单。图2-10 把C文档加入到项目然后单击“Add File to Group Source Group 1” 屏幕如下图所示:图2-11 选择C文档选中

17、Test.c,然后单击“Add ”屏幕好下图所示:图2-12 加入C代码注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同。 7)现在,请输入如下的C语言源程序: #include <reg52.h> /包含文件#include <stdio.h>void main(void) /主函数SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1; /此行及以上3行为PRINTF函数所必须printf(“Hello I am KEIL. n”); /打印程序执行的信息printf(“I

18、 will be your friend.n”);while(1); 在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了,即Keil c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后,如下图所示:图2-13 编辑代码8)在上图中,单击“Project”菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键Ctrl+F5),屏幕如下所示: 图2-14 设置断点9)调试程序:

19、在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“Stop Running”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“Serial Windows #1”选项,就可以看到程序运行后的结果,其结果如下图所示图2-15 调试程序至此,我们在Keil C51上做了一个完整工程的全过程。但这只是纯软件的开发过程,如何使用程序下载器看一看程序运行的结果呢? 10)单击“Project”菜单,再在下拉菜单中单击“ ” 在下图中,单击“Output”中单击“Create HEX File”

20、选项,使程序编译后产生HEX代码,供下载器软件使用。把程序下载到AT89S51单片机中。 图2-16 设置生成Hex文件2.2. PROTEUS VSM 本文将简单介绍一下 Proteus 的使用。在这里,我用的 Proteus 版本是 Proteus 6.7 sp3 Professional。2.2.1 Proteus 6 Professional 界面简介安装完 Proteus 后,运行 ISIS 6 Professional,会出现以下窗口界面:图2-17 Proteus主界面为了方便介绍,我分别对窗口内各部分进行中文说明(见上图)。下面简单 介绍各部分的功能2:1原理图编辑窗口(The

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

22、。图2-18 改变原理图的可视范围3模型选择工具栏(Mode Selector Toolbar)主要模型(Main Modes)1* 选择组件(components)(默认选择的)2* 放置连接点3* 放置标签(用总线时会用到)4* 放置文本5* 用于绘制总线6* 用于放置子电路7* 用于即时编辑组件参数 (先单击该图标再单击要修改的组件):配件(Gadgets) 1* 终端接口(terminals):有 VCC、地、输出、输入等接口2* 器件引脚:用于绘制各种引脚3* 仿真图表(graph):用于各种分析,如 Noise Analysis4* 录音机5* 信号发生器(generators)6

23、* 电压探针:使用仿真图表时要用到7* 电流探针:使用仿真图表时要用到8* 虚拟仪表:有示波器等2D 图形(2D Graphics):1* 画各种直线2* 画各种方框3* 画各种圆4* 画各种圆弧5* 画各种多边形6* 画各种文本7* 画符号8* 画原点等4组件列表(The Object Selector):用于挑选组件( components )、 终端接口( terminals)、 信号发生器 ( generators )、 仿真图表( graph )等。举例,当你选择“组件 (components)”,单击“P”按钮会打开挑选组件对话框,选择了一个元 件后(单击了“OK”后),该组件会在

24、组件列表中显示,以后要用到该 组件时,只需在组件列表中选择即可。5方向工具栏(Orientation Toolbar): 旋转:旋转角度只能是 90 的整数倍。翻转:完成水平翻转和垂直翻转。 使用方法:先右键单击组件,再点击(左击)相应的旋转图标。6仿真工具栏 仿真控制按钮1* 运行2* 单步运行3* 暂停4* 停止2.2.2 操作简介1、绘制原理图:绘制原理图要在原理图编辑窗口中的蓝色方框内完成。原理图 编辑窗口的操作是不同于常用的 WINDOWS 应用程序的,正确的操作是:用左 键放置组件;右键选择组件;双击右键删除组件;右键拖选多个组件;先右键后左键编辑组件属性;先右键后左键拖动组件;连

25、线用左键,删除用右键;改连接 线:先右击连线,再左键拖动;中键缩放原理图。具体操作见下面例子。2、定制自己的组件:有三个个实现途径,一是用 PROTEUS VSM SDK 开发仿真 模型,并制作组件;另一个是在已有的组件基础上进行改造,比如把组件改为bus 接口的;还有一个是利用已制作好(别人的)的组件,我们可以到网上下载 一些新组件并把它们添加到自己的组件库里面。由于我没有 PROTEUS VSM SDK,所以我只介绍后两个2。3、Sub-Circuits 应用:用一个子电路可以把部分电路封装起来,这样可以节省原理图窗口的空间。2.2.3 AVR 单片机的仿真实例本例是实现 AVR 驱动 L

26、CD1602,并用示波器监测数据线。 开始前先要准备好仿真文件,就是用编译器编译连接产生的调试或下载文件,不同编译器产生的文件格式是不同的,如 ICC 是 COF、IAR 是 D90,GCC是 COF、ELF。Proteus 6.7sp3 支持的有 COF、D90、HEX 等,ELF 暂不支持。 本例用的是:lcd_C.hex。运行 Proteus 6 Professional(ISIS6 Professional) 出现程序主界面窗口:1、添加组件到组件列表中:本例要用到的组件有:ATMEGA16、LM016L(LCD1602)、“地“、示波器。 单击“P”按钮,出现挑选组件对话框:图2-1

27、9 点击P按钮图2-20 选择元器件界面在对话框的 KEYWORDS 中输入 ATMEGA16,得到以下结果:图2-21 搜索元器件单击 OK,关闭对话框,这时组件列表中列出 ATMEGA16,同样找出 LM016L。 最终结果:图2-22 已选元器件列表2、放置组件:在组件列表中左键选取 ATMEGA16,在原理图编辑窗口中单击左键,这样 ATMEGA16 就被放到原理图编辑窗口中了。同样放置 LM016L。图2-23 放置组件添加“地” :左键选择模型选择工具栏中的图标,出现:图2-24 添加“地”左键选择 GROUND,并在原理图编辑窗口中左击,这样“地”就被放置到原理图编辑窗口中了。添

28、加示波器:左键选择模型选择工具栏中的图标,出现:图2-25 添加示波器左键选择 OSCILLOSCOPE,并在原理图编辑窗口中左击,这样示波器就被放置到原理图编辑窗口中了。图2-26 放置示波器补充:放置组件时要注所放置的组件应放到蓝色方框内,如果不小心放到外面, 由于在外面鼠标用不了,要用到菜单“Edit”的“Tidy” 清除,方法很简单只需 单击“Tidy”即可。操作中可能要整体移动部分电路,操作方法: 先用右键拖的选,再单击中,这时这部分电路会随鼠标移动,在目标位置 单击左键,这部分电路将被放到该处2。3连线 AVR、LCD 的 VSS、VDD、VEE 不需连接,默认 VSS=0V、VD

29、D=5V、VEE= -5V、GND=0V图2-27 连线4添加仿真文件先右键 ATMEGA16 再左键,出现图2-28 添加仿真文件在 Program File 中单击出现文件浏览对话框,找到 lcd_C.hex 文件,单击确定完成添加文件,在 Clock Frequency 中把频率改为 8MHz,单击 OK 退出。5仿真单击开始仿真。图2-29 仿真界面说明:红色代表高电平,蓝色代表低电平,灰色代表不确定电平(floating)。 运行时,在 Debug 菜单中可以查看 AVR 的相关资源2。2.3. Keil 与 Proteus 完美结合 Keil 与 proteus 连接调试 Prot

30、eus 与 Keil 联机(一) 步骤如下: 下载 Keil c51 v7.50 软件和 proteus 6.7 SP3 软件,分别进行安装。安装完毕以后进行如下设置: 1、 系统安装上 TCP/IP 协议 2、把 proteus 安装目录下 VDM51.dll(C:Program FilesLabcenter ElectronicsProteus 6 ProfessionalMODELS)文件复制到 Keil 安装目录的 C51BIN 目录中。 3、 编辑 C51 里 tools.ini 文件,加入:TDRV1=BINVDM51.DLL ("PROTEUS VSM MONITOR

31、51 DRIVER") 4、 Keil 里设置: Project->options for project->debug tab 5、 选中 use proteus VSM monitor 51( 如果想用两台电脑仿真,双击 setting,输入 IP 地址 或者 DNS name. 6、 载入 proteus 文件 7、 proteus 里 DEBUG->use remote debug monitor 进入 KEIL 的 project 菜单 option for target '工程名'。在 DEBUG 选项中右栏上部的下 拉菜选中 Prote

32、us VSM Monitor-51 Driver。 在进入 setting,如果同一台机 IP 名为 127.0.0.1,如不是同一台机则填另一台的 IP地址。端口号一定为 8000 注意:可以在一台机器上运行 Keil,另一台中运行 proteus 进行远程仿真。 8、打开 KEIL, 按 F5 开始仿真3。 Proteus 与 Keil 联机(二) 1.把压缩文件中的VDM51.DLL解压到Keil 目录下的c51BIN 2.修改Keil 目录下的 TOOLS.ini 文件如图图2-30 修改Tools.ini如果Keil 正在运行,则需重新启动 3.使用ISIS打开Labcenter E

33、lectronicsProteus 6 ProfessionalSAMPLESC51 Calculator 原理图:图2-31 打开Calculator 原理图4.打开Keil选择Labcenter ElectronicsProteus 6 ProfessionalSAMPLESC51 Calculator 目录下的Keil工程3:图2-32 打开Calculator 的Keil工程5.在Keil下重新编译一下,并按调试按钮图2-33 调试Calculator图2-34 仿真Calculator是不是Keil 与Proteus 都一起运行起来了,和用硬件仿真差不多3专心-专注-专业第三章

34、60;   基础实验题目3.1 闪烁灯1. 实验任务 如图3-1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。2. 电路原理图图3-1 电路原理图3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。4 程序设计内容 (1)延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢

35、?下面具体介绍其原理:如图3-1-1所示的石英晶体为12MHz,因此,1个机器周期为1微 MOV R6,#202个2D1:MOV R7,#248 2个2DJNZ R7,$ 2个2×248DJNZ R6,D12个2×2040因此,上面的延时程序时间为10.002ms。 由以上可知,当R610、R7248时,延时5ms,R620、R7248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒200ms,10ms×R5200ms,则R520,延时子程序如下: DELAY:MOV R5, #20 D1:MOV R6, #20 D2:MOV R7, #248 DJN

36、Z R7, $ DJNZ R6, D2 DJNZ R5, D1 RET (2)  输出控制如图3-1所示,当P1.0端口输出高电平,即P1.01时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.00时,发光二极管L1亮;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。5程序框图 图3-2 程序框图6 C语言源程序 #include <REGX51.H>sbit L1=P20; void delay02s(void) /延时0.2秒子程序 unsigne

37、d char i, j,k; for (i=20;i>0;i-) for (j=20;j>0;j-) for (k=248;k>0;k-); void main(void) while (1) L1=0; delay02s (); L1=1; delay02s (); 3.2 多路开关状态指示1实验任务 如图3-3所示,AT89S51单片机的P1.0P1.3接四个发光二极管L1L4,P1.4P1.7接了四个开关K1K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)4。2电路原理图图3-3电路原理图3系统板上硬件连线 (1).把“

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

39、可以用SETBP1.X和CLRP1.X指令来完成,也可以采用MOVP1,1111XXXXB方法一次指示。5 程序框图 图3-4程序框图6 C语言源程序 #include <REGX51.H>void main(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; if (P1_7=0) P1_3=0; else P1_3=1; 3.3 广告灯的左移右移1.实验任务 做单一灯的左移右移,硬件

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

41、3-1所示表3-1 P1口数据表P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 说明 L8 L7 L6 L5 L4 L3 L2 L1   11111110 L1亮1111110 1L2亮111110 11L3亮11110 111L4亮1110 1111L5亮110 11111L6亮10 111111L7亮0 1111111L8亮5.程序框图 图3-6程序框图6.C语言源程序 #include <AT89X51.H> unsigned char i; unsigned char temp; unsigned char a,b;  

42、void delay(void) unsigned char m,n,s; for (m=20;m>0;m-) for (n=20;n>0;n-) for(s=248;s>0;s-); void main(void) while (1) temp=0xfe; P1=temp; delay (); for (i=1;i<8;i+) a=temp<<i; b=temp>> (8-i); P1=a|b; delay (); for(i=1;i<8;i+) a=temp>>i; b=temp<<(8-i); P1=a|b;

43、delay(); 3.4 报警产生器1实验任务 用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。2电路原理图 图3-7 电路原理图3系统板上硬件连线 (1).把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;(2).在“音频放大模块”区域中的SPK OUT端口上接上一个8欧的或者是16欧的喇叭;(3).把“单片机系统”区域中的P1.7/RD端口用导线连接到“四路拨动开关”区域

44、中的K1端口上;4程序设计内容 (1).信号产生的方法500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,信号电平每500us变反1次;5程序框图 图3-8程序框图6 C语言源程序 #include <AT89X51.H> #include <INTRINS.H> bit flag; unsigned char count; void dely500(void) unsigned char i; for(i=250;i>0;i-) _nop_();   void main(void) while(1) if(P1_7=0)

45、 for(count=200;count>0;count-) P1_0=P1_0; dely500(); for(count=200;count>0;count-) P1_0=P1_0; dely500(); dely500(); 3.5 I/O并行口直接驱动LED显示1.    实验任务 如图3-9所示,利用AT89S51单片机的P0端口的P0.0P0.7连接到一个共阴数码管的ah的笔段上,数码管的公共端接地。在数码管上循环显示09数字,时间间隔0.2秒。2.    电路原理图 图3-9电路

46、原理图3.    系统板上硬件连线 把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的ah端口上;要求:P0.0/AD0与a相连,P0.1/AD1与b相连,P0.2/AD2与c相连,P0.7/AD7与h相连。4.    程序设计内容 (1).LED数码显示原理 七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。 LED数码管的ga七个发光二极管因加正电压而发亮,因加零电压而不

47、以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码见表3-2。表3-2 LED数码管“0”3FH“8”7FH“1”06H“9”6FH“2”5BH“A”77H“3”4FH“b”7CH“4”66H“C”39H“5”6DH“d”5EH“6”7DH“E”79H“7”07H“F”71H(2).由于显示的数字09的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。这样我们按着数字09的顺序,把每个数字的笔段代码按顺序排好!建立的表格如下所示:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH5程序框图 图3-10程序框图6C语言源程序 #include <AT89X51.H> unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,

温馨提示

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

评论

0/150

提交评论