《Keil的使用及流水灯设计.ppt》由会员分享,可在线阅读,更多相关《Keil的使用及流水灯设计.ppt(30页珍藏版)》请在三一办公上搜索。
1、Keil uVision2 的使用,1、keil C51 的安装 2、项目的建立 3、ASM文件的建立 4、项目的编译 5、项目的调试 6、项目程序的烧写,一、keil C51 的安装:先运行光盘中 单片机软件setupsetup.exe 安装程序,选择安装“Eval Version”版进行安装。一直点击“Yes”或“Next”,直到“Finish”完成。安装好后,在桌面上会产生快捷图标,如下图:,二、keil C51 的使用:点击桌面快捷图标,可以直接进入主画面:,现在,我一步一步学着做,实际体验一下从编辑源程序到程序调试的全过程。我们做一个 让单片机 P0 口所驱动的 LED 灯隔一个亮隔
2、一个灭的程序。,1、在Keil系统中,每做个独立的程序,都视为工程(或者叫项目)。首先从菜但的“工程”中“新建工程.”,建立我们将要做的工程项目:,新建的工程要起个与工程项目意义一致的名字,可以是中文名;我们这里的程序是实验测试程序,所以起的名字为 Test,并将 Test 工程“保存”到 C:Keil 下:,接下来,Keil环境要求我们为 Test 工程选择一个单片机型号;我们选择 Atmel 公司的 89C51(虽然我们使用的是89S51,但由于89S51与89C51内、外部结构完全一样,所以这里依然选择“89C51”)。“确定”后工程项目就算建立了。,2、立了工程项目,肯定要实施这个工程
3、,现在就为工程添加程序;点击“文件”中的“新建”,新建一个空白文档;这个空白文档就是让我们编写单片机程序的场所。在这里你可以进行编辑、修改等操作。,根据题意,在文档中写入下列代码:(下列代码你暂时不要管什么意思,只要照抄正确就可以,今后在学习汇编时你会明白的)mov p0,#01010101B;将01010101二进制代码送P0口 ajmp$;程序在此原地踏步 end;程序结束标志 写完后再检查一下,并保存文件,保存文件时,其文件名最好与前面建立的工程名相同(当然这里为 Test 了),其扩展名必须为.Asm!“文件名”中一定要写全,如:Test.Asm;保存后的文档彩色语法会起作用,将关键字
4、实行彩色显示:,3、保存了Asm文件后,还要将其添加到工程中。具体做法如下:(见下图)鼠标右键点击“Source Group 1”,在弹出的菜单中选“增加文件到组 Source Group 1”:,在接下来出现的窗口中,选择“文件类型”为“Asm源文件(*.a*,*.src)”(由于我们使用的是汇编语言,所以选择Asm源文件),选中刚才保存的 Test.Asm,按“Add”,再按“关闭”,文件就添加到了工程中。,向工程添加了源文件后,鼠标右键点击“TarGet 1”,在弹出的菜单中选“目标 Target 1 属性”,如下图:,在打开的话框中,选择“输出”选项卡,在这个选项卡中,“E生成HEX文
5、件”选项前要打勾,按“确定”退出。,4、最后,从菜单的“工程”中执行“R重新构造所有目标”(或者按下图红圈中的按钮),汇编、连接、创建Hex文件一气呵成;在工程文件的目录下就会生成与工程名相同的一些文件,其中大部分文件我们并不必关心,而生成的 Hex 文件是我们需要的!它是要烧写到单片机中的最终代码,也就是单片机可以执行的程序。这里生成的是 Test.HEX,稍后就写入。若在下面的状态窗中有错误提示,就需要再次编辑、修改源程序(如语法、字符有错等)、保存、构造所有。直至没有错误。,5、在没有语法错误的情况下,按下图红圈中的按钮就可以进行模拟调试:,下面是调试窗。由于我们的程序是让 P0 口8个
6、脚隔一个输出0,隔一个输出1,所以要从菜单的“外围设备”中打开“Prot 0”P0口窗:,单击“单步运行”,在P0窗中就可以看到我们原先设想的效果:,点亮第一个发光二极管(位操作),#include/52系列单片机头文件sbit led1=P10;/声明单片机P1口的第一位void main()/主函数led1=0;/*点亮第一个发光二极管*/,总线操作,#include/52系列单片机头文件void main()/主函数P1=0 xaa;,灯的闪烁,#include/52系列单片机头文件#define uint unsigned int/宏定义sbit led1=P10;/声明单片机P1口的
7、第一位uint i,j;void main()/主函数while(1)/大循环led1=0;/*点亮第一个发光二极管*/for(i=1;i0;i-)/延时for(j=110;j0;j-);led1=1;/*关闭第一个发光二极管*/for(i=1000;i0;i-)/延时for(j=110;j0;j-);,使用延时函数,#include/52系列单片机头文件#define uint unsigned int/宏定义sbit led1=P10;/声明单片机P1口的第一位void delay1s();/声明子函数void main()/主函数while(1)/大循环led1=0;/*点亮第一个发光二
8、极管*/delay1s();/调用延时子函数led1=1;/*关闭第一个发光二极管*/delay1s();/调用延时子函数void delay1s()/子函数体uint i,j;for(i=500;i0;i-)for(j=110;j0;j-);,使用带参数的延时函数,#include/52系列单片机头文件#define uint unsigned int/宏定义sbit led1=P10;/声明单片机P1口的第一位void delayms(uint);/声明子函数void main()/主函数while(1)/大循环led1=0;/*点亮第一个发光二极管*/delayms(200);/延时20
9、0毫秒led1=1;/*关闭第一个发光二极管*/delayms(800);/延时800毫秒void delayms(uint xms)uint i,j;for(i=xms;i0;i-)/i=xms即延时约xms毫秒for(j=110;j0;j-);,Keil仿真及延时语句的精确计算,#include/52系列单片机头文件#define uint unsigned int/宏定义sbit led1=P10;/声明单片机P1口的第一位uint i,j;void main()/主函数while(1)/大循环led1=0;/*点亮第一个发光二极管*/for(i=1;i0;i-)/延时for(j=110
10、;j0;j-);led1=1;/*关闭第一个发光二极管*/for(i=1000;i0;i-)/延时for(j=110;j0;j-);,利用C51库函数实现流水灯,#include/52系列单片机头文件#include#define uint unsigned int/宏定义#define uchar unsigned charvoid delayms(uint);/声明子函数uchar aa;void main()/主函数aa=0 xfe;/赋初值11111110 while(1)/大循环P1=aa;delayms(500);/延时500毫秒aa=_crol_(aa,1);/将aa循环左移1位
11、后再赋给aavoid delayms(uint xms)uint i,j;for(i=xms;i0;i-)/i=xms即延时约xms毫秒for(j=110;j0;j-);,花样流水灯,#include#define INT8Uunsigned char#define INT16Uunsigned intcode INT16U Pattern=/本例16位的花样数组0 xFCFF,0 xF9FF,0 xF3FF,0 xE7FF,0 xCFFF,0 x9FFF,0 x3FFF,0 x7FFE,0 xFFFC,0 xFFF9,0 xFFF3,0 xFFE7,0 xFFCF,0 xFF9F,0 xFF
12、3F,0 xFFFF,0 xE7E7,0 xDBDB,0 xBDBD,0 x7E7E,0 xBDBD,0 xDBDB,0 xE7E7,0 xFFFF,0 xE7E7,0 xC3C3,0 x8181,0 x0000,0 x8181,0 xC3C3,0 xE7E7,0 xFFFF,0 xAAAA,0 x5555,0 x1818,0 xFFFF,0 xF0F0,0 x0F0F,0 x0000,0 xFFFF,0 xF8F8,0 xF1F1,0 xE3E3,0 xC7C7,0 x8F8F,0 x1F1F,0 x3F3F,0 x7F7F,0 x7F7F,0 x3F3F,0 x1F1F,0 x8F8F,0
13、 xC7C7,0 xE3E3,0 xF1F1,0 xF8F8,0 xFFFF,0 x0000,0 x0000,0 xFFFF,0 xFFFF,0 x0F0F,0 xF0F0,0 xFEFF,0 xFDFF,0 xFBFF,0 xF7FF,0 xEFFF,0 xDFFF,0 xBFFF,0 x7FFF,0 xFFFE,0 xFFFD,0 xFFFB,0 xFFF7,0 xFFEF,0 xFFDF,0 xFFBF,0 xFF7F,0 xFF7F,0 xFFBF,0 xFFDF,0 xFFEF,0 xFFF7,0 xFFFB,0 xFFFD,0 xFFFE,0 x7FFF,0 xBFFF,0 xDF
14、FF,0 xEFFF,0 xF7FF,0 xFBFF,0 xFDFF,0 xFEFF,0 xFEFF,0 xFCFF,0 xF8FF,0 xF0FF,0 xE0FF,0 xC0FF,0 x80FF,0 x00FF,0 x00FE,0 x00FC,0 x00F8,0 x00F0,0 x00E0,0 x00C0,0 x0080,0 x0000,0 x0000,0 x0080,0 x00C0,0 x00E0,0 x00F0,0 x00F8,0 x00FC,0 x00FE,0 x00FF,0 x80FF,0 xC0FF,0 xE0FF,0 xF0FF,0 xF8FF,0 xFCFF,0 xFEFF,0
15、 x0000,0 xFFFF,0 x0000,0 xFFFF,0 x0000,0 xFFFF,0 x0000,0 xFFFF;,void delay_ms(INT16U x)INT8U t;while(x-)for(t=0;t 8;P2=Patterni;delay_ms(50);,方波发生器,用任一IO口做一个周期为20ms的方波发生器,#include/52系列单片机头文件#define uint unsigned int/宏定义sbit l1=P10;/声明单片机P1口的第一位void delay1s();/声明子函数void main()/主函数while(1)/大循环l1=0;/*点
16、亮第一个发光二极管*/delay1s();/调用延时子函数l1=1;/*关闭第一个发光二极管*/delay1s();/调用延时子函数void delay1s()/子函数体uint i,j;for(i=10;i0;i-)for(j=120;j0;j-);,练习各种效果流水灯,第一个发光管以间隔200ms闪烁8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,一直重复下去。8个发光管来回流动,每个管亮100ms。用8个发光管演示出8位二进制数累加过程。8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。,