1、1第第2讲讲 单片机控制单片机控制LED灯灯本讲内容:介绍介绍Keil的使用的使用设置,新建一个工程,新建一个程序ASM文件,加载一个文件,编译与传输到硬件。观察观察:学会硬件的观察,以及存储器单元的观察实例实例:完成对一组LED灯的闪烁控制。2Keil软件介绍软件介绍启动界面启动界面3图图2-6 Keil C51在编辑状态下的操作界面在编辑状态下的操作界面输出信息窗口输出信息窗口工程管理器窗口工程管理器窗口工具栏工具栏菜单栏菜单栏编辑窗口编辑窗口451、新建一个项目(、新建一个项目(New Project)点击Project菜单,选择弹出的下拉式菜单中的New Project,如下图。接着弹
2、出一个标准Windows文件对话窗口。6如下图在如下图在“文件名文件名”中输入您的第一个中输入您的第一个C程序程序项目名称,这里我们用项目名称,这里我们用“test”,“保存保存”后后的文件扩展名为的文件扩展名为uv2,这是,这是KEIL uVision2项目项目文件扩展名文件扩展名注意:注意:先在先在F盘建盘建“09DQ xxx yyy”的文件夹的文件夹72、选择所用的单片机类型、选择所用的单片机类型 Atmal下的下的AT89C52 83、新建单片机源文件(、新建单片机源文件(.ASM)“1”是新建文件的快捷按钮,在“2”中出现一个新的文字编辑窗口“3”是存盘的快捷按钮94、编辑源文件、编
3、辑源文件n注意:Tab键的使用105、保存源文件为、保存源文件为xxx.asm文件文件n注意:文件的后缀名116、向项目中添加文件、向项目中添加文件n操作:选择source group,按右键,选择Add Files to Group Source group1121、2、3都是编译按钮。都是编译按钮。1是用于编译单个文件。是用于编译单个文件。2是编译是编译当前项目(如果先前编译过一次之后文件没有编辑改动,不当前项目(如果先前编译过一次之后文件没有编辑改动,不会再次重新编译的)。会再次重新编译的)。3是重新编译(每点击一次均会再次是重新编译(每点击一次均会再次编译链接一次,不管程序是否有改动)
4、。在编译链接一次,不管程序是否有改动)。在3右边的是右边的是停止停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。效。4是信息窗口。是信息窗口。5是包含了是包含了1、2、3。6是进入调试模式。是进入调试模式。7、编译源文件为机器码、编译源文件为机器码138、选择程序存储目标、选择程序存储目标149、创建、创建EPROM可以存储的可以存储的HEX文件文件1511、开始、开始/停止调试停止调试1612、连接到仿真器、连接到仿真器n操作:先按仿真器的“复位”按钮,再“开始Debug”1713、观察程序存储器、观察程序存储器n操作:在“Ad
5、dress”中输入:0000,或者c:00001814、观察数据存储器(运行程序前)、观察数据存储器(运行程序前)n操作:在“Address”中输入:D:00001915、观察数据存储器(运行程序后)、观察数据存储器(运行程序后)20总结(总结(Keil过程)过程)(1)新建一个Project项目文件(.uv2)选择单片机型号(Atmel-AT89C51)(2)编辑源文件并存盘(.ASM)(3)将源程序添加到工程中(4)设置Keil工程目标项 Output:Create HEX files Debug:Use Keil Monitor-51 Driver(5)汇编源程序,生成HEX文件(6)运
6、行调试 DebugStart/Stop Debug Session 连接仿真器(注意复位)运行:Go、Step、Step Over、Stop21实例:单片机控制实例:单片机控制LED灯灯n从P1输出数据,控制LED(观察:低电平/高电平发亮?):MOV P1,#00H 或者 MOV P1,#0FFHn如何使LED灯闪烁?按照Keil使用方法,连接仿真器,完成这个实验,总结实验过程!22硬件线路硬件线路1K10033pF33pF12MHzRESETEA/VP31X119X218R ESET9R D17W R16INT012INT113T014T115P101P112P123P134P145P15
7、6P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11R XD10AT89C5110uFD03Q02D14Q15D27Q26D38Q39D413Q412D514Q515D617Q616D718Q719OE1LE1174LS373270*8VC CVC CVC C23回顾一下回顾一下n保存源文件时,要输入.ASMn源程序修改后,除了保存之外,还要重新汇编(检查程序错误,一定要0 Error方可)编译生成HEX文件(机器码)n如何控制各个窗
8、口?n运行:Go(Run,运行整个程序)Step(单步运行)Step Over(过程单步:将一个子程序这个过程作为单步运行)Stop Running(停止运行)断点的设置与运行n观察(Memory Window)以下在第三次课继续以下在第三次课继续24复杂问题复杂问题n几个发光管亮的情况n几个发光管循环亮的情况25部分源代码部分源代码n一个发光管显示的例子ORG 0000HSTART:MOV P1,#0FEHSJMP$END26部分源程序部分源程序n一个发光管闪烁的程序ORG 0000HSTART:MOV P1,#0FEHACALL DELAYMOV P1,#0FFHACALL DELAYSJ
9、MP STARTDELAY:MOV R5,#0FFHD1:MOV R4,#0FFH DJNZ R4,$DJNZ R5,D1 RET END27观察:延时程观察:延时程序的延时时间序的延时时间nSec=0.06s=60msn如何计算,以后会讲28部分源程序部分源程序发光管循环(流水灯)程序发光管循环(流水灯)程序ORG 0000HSTART:MOV A,#0FEHS1:MOV P1,ARL AACALL DELAYSJMP S1DELAY:END开始设置初始值设移位次数数据输出左一位延时移位次数完成?是否(A)P1口循环点灯程序框图29讨论讨论n任意变化怎么办?任意变化怎么办?运用查表法所编写的
10、流水灯程序,能够实现任意方式流水,而且流水花样无限,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心所欲的流水灯效果。方法:把要显示流水花样的数据建在一个以TAB为标号的数据表中,然后通过查表指令“MOVCA,A+DPTR”把数据取到累加器A中,然后再送到P1口进行显示。30发光管任意变换的程序发光管任意变换的程序ORG 0000H START:MOV DPTR,#TAB;流水花样表首地址送DPTRLOOP:CLR A;累加器清零MOVC A,A+DPTR;取数据表中的值CJNE A,#0FFH,SHOW;检查流水结束标志AJMP START;所有花样流完,则从头开始
11、重复流SHOW:MOV P1,A;将数据送到P1口ACALL DELAY;调用延时子程序INC DPTR;取数据表指针指向下一数据AJMP LOOP;继续查表取数据31TAB:;下面是流水花样数据表,用户可据要求任意编写DB 11111110B;二进制表示的流水花样数据,从低到高左移DB 11111101BDB 11111011BDB 11110111BDB 11101111BDB 11011111BDB 10111111BDB 01111111BDB 01111111B;二进制表示的流水花样数据,从高到低右移DB 10111111BDB 11011111BDB 11101111BDB 111
12、10111BDB 11111011BDB 11111101BDB 11111110BDB 0FEH,0FDH,0FBH,0F7H;十六进制表示的流水花样数据DB 0EFH,0DFH,0BFH,7FHDB 7FH,0BFH,0DFH,0EFHDB 0F7H,0FBH,0FDH,0FEHDB 0FFH;流水花样结束标志0FFHEND;程序结束32一个新任务:一个新任务:P1口控制继电器口控制继电器n用P1.0作为控制输出口,接继电器电路,使继电器重复吸合与断开。n提示:如何使P1.0为1或0?方法一:MOV P1,#?H 方法二:SETB P1.0 ;置P1.0为1 CLR P1.0 ;置P1.0为0继电器吸合延时继电器断开开始延时33电路设计电路设计