流水灯(电路和汇编)-Proteus和Keil仿真演示实例
Proteus虚拟仿真案例---流水灯制作

Proteus虚拟仿真案例-——流水灯制作一、原理图设计1.打开proteus,新建文件2.选择元器件(1)选择单片机芯片左侧快捷菜单栏里按下,按下P,在“关键字”栏中输入“8951”,选择AT89C51(2)选择晶振:输入crystal,选择CRYSTAL(3)选择电容:输入22p,左边类别中选择Capacitors,右边选择CERAMIC22P(4)选择电阻:输入10k,左边类别中选择Resistors,右边选择RESISTORS库的3WATT10K(5)选择led:输入led,左边类别中选择Optoelectronics,右边选择led—yellow(6)选择按钮:输入button,选择USERDVC库的BUTTON(7)选择好的元器件如图所示3.放置器件振荡电路:(1)放置AT89C51单片机:在DEVICES栏中选中AT89C51,然后在绘制区放置到合适的位置(2)放置晶振,隐藏text属性(菜单-模板—设置设计默认值—显示隐藏文本不勾选)(3)分别将晶振的两脚与AT89C51的19、18脚相连(4)放置两个22p的电容,一端与晶振相连,另一端互连(5)放置地节点(左侧快捷菜单栏里按下—-GROUND),与两个电容相连复位电路:a.放置电源节点(左侧快捷菜单栏里按下——POWER)b.放置地节点c.放置电容,电阻,电阻一端接地,一端与电容相连,电容一端接+5V电源d.AT89C51第9脚接电阻、电容中间e.放置按钮,接电容两端f.右击按钮——编辑属性——元件参考:BUTTON,并取消“本元件不用于PCB制版”g.修改C3电容的值:右击——编辑属性—-Capacitance改为10u绘制流水灯:a.放置电阻、led,右击led——编辑属性——隐藏元件值,连接电阻和ledb.使用块复制,复制7组电阻和ledc.放置电源,分别与D1—D8的一端连接d.总线绘制:左侧选择“总线模式”,绘制一条总线,连接P1口与R2-R9e.使用属性分配工具进行快速网络标号:按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击P0口的8条线,进行编号,再次按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击R2—R9的8条线,进行编号f.批量修改R2-R9的值:按下a,出现属性分配窗口,“字符串”框输入“VALUE=100”,确定二、系统仿真1.编写源代码(1)菜单——源代码——添加/删除源文件—-new——文件名输入pmd。
流水灯(电路和汇编)-Proteus和Keil仿真演示实例知识讲解

流水灯(电路和汇编)-P r o t e u s和K e i l仿真演示实例示例要求:在80C51单片机的P2口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。
在KEIL 51中编程序,形成HEX文件;在PROTEUS中设计硬件,下载HEX文件,运行看结果。
第1篇:PROTEUS电路设计1、打开PROTEUS的ISIS软件,如图1所示。
新建电路图文件,将文件保存到E:\projectio (新建文件夹projectio)下面,文件基本名为io,扩展名默认。
选择元图1 ISIS窗口图2、在component mode模式下单击选择元件按钮P,打开元件选择对话框,如图2所示。
图2 元件选择窗口在元件选择对话框的keywords窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元件,添加元件到图3的device列表栏。
在这里依次添加元件单片机80C51、电阻RES、电容CAP、按键BUTTON、晶振CRYSTAL、发光二极管LED-RED,如图3所示。
图3 添加元件的device列表栏3、选择devices元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元件进行移动、旋转等操作;如图4所示。
电源(POWER)与地(GROUND):(右键-放置-终端里选)。
图4 放置元件图4、连接导线,如图5所示。
连接后存盘。
图5 连接元件图5、在Keil软件中设计软件程序,形成HEX文件(具体过程见第2篇Keil软件编程)。
保存软件项目到电路文件相同的文件夹E:\projectio下。
6、在PROTEUS电路图中,单击单片机80C51芯片,选中,再次单击打开单片机80C51的属性对话框,在属性对话框中的program file框中选择下载到80C51芯片中的程序。
这里是同一个文件夹下面的shili.hex文件。
如图6所示。
图6 下载程序到单片机7、单击仿真运行按钮play,运行程序。
3-流水灯控制实验需打印

实验三、流水灯控制实验一、实验目的1.掌握keilc51软件与protues软件联合硬仿的调试方法。
2.掌握如何应用程序与查表等方法实现流水灯效果。
3.掌握按键去抖原理及处理方法。
二、实验仪器与设备1、微机一台2、keilc51开发环境,protues软件。
三、实验内容1.用protues设计一流水灯控制电路。
利用P1口控制8个发光二极管L1—L8。
P3.3口接一按键K1。
参考电路下面给出。
其中74LS240为八反相三态缓冲器/线驱动器。
2.用中断或查询方式编写程序,每按一次K1键,演示不同的流水效果。
若用KEY表示按键的次数,则其对应流水效果如下:1.KEY=0:L1—L8全亮;2.KEY=1:L1—L8先全灭,然后自右向左单管点亮,如此循环;3.KEY=2:L1—L8先全灭,然后自右向左依次点亮,如此循环;4.KEY=4:L1—L8先全亮,然后自右向左依次熄灭,如此循环;5.KEY=5:自行设计效果;以上移位及闪烁时间均设置为0.3秒,按动5次按键后,再按键时,流水灯效果从头开始循环。
四、实验原理及步骤1.用protues设计流水灯控制电路;2.在keilc51中编写流水灯控制程序,编译通过后,与protues联调;3.按动K1键,观察是否达到演示效果;4.利用终端和查询两种方式编写程序,比较二者的区别;五、电路设计及调试:(1)实验电路(2).程序设计及调试#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar i,m=0xfe,n=0xfe,p=0x7f,temp=0; void delay(uint c ){uchar i,j;for(i=0;i<125;i++)for(j=0;j<c;j++);}void main(){IT1=1;EX1=1;EA=1;while(1){if(temp==0){P1=0x00;}if(temp==1){P1=0xff;for(i=0;i<8;i++){m=((m<<1)|(m>>7));P1=m;delay(200);}}if(temp==2){P1=0xff;delay(200);P1=0xfe;for(i=0;i<8;i++){P1=n<<i;delay(200);}}if(temp==3){P1=0x00;delay(200);for(i=0;i<8;i++){P1=(p>>i);delay(200);}}if(temp==4){P1=0xff;delay(200);P1=P1;delay(200);}if(temp==5){P1=0xf0;delay(200);P1=P1;delay(200);}}}void int_1() interrupt 2{EA=0;delay(5);EA=1;temp++;if(temp>=6){temp=0;}}(3)实验调试中遇到的问题:为什么要按键去抖?按键如果不去抖,按键抖动会引起一次按键被误读多次,程序执行效果变乱,导致程序执行没有次序。
PROTEUS与KEIL的联合仿真

译结果如图 14 下方所示。
图 14 源程序编译
④ 加 载 目标 代 码文 件 右击 选中 ISIS 编辑 区中 单片 机 AT89C51,选择 “Edit Properties”打开其属性窗口,如图 15 所示。在其中的“Program File”右侧框中输入目 标代码文件(目标代码与 DSN 文件在同一目录下,直接输入代码文件名即可,否则要写出完 整的路径。或单击本栏打开按钮,选取目标文件),再在“Clock Frequency”栏中设置 12MHz, 仿真系统则以 12MHz 的时钟频率运行。
图 12 目标输出设置
● Debug:设置调试工具,如图 13 所示,在下拉组合框选择“PROTEUS VSM Sipnulator”。
图 13 KEIL 中目标调试设置
● 通信设置:单击调试工具框右边的“Settings”,如图 13 所示,设置 Host、Port。 KEIL 与 PROTEUS 在同一台机器上时,Host 设为 127.0.0.1;若不在同一台机子上,则填另 一台的 IP 地址。Port 为 8000。
图 15 注:因运行时钟频率以单片机属性设置中的时钟频率 (Clock Frequency)为准,所以在编辑区设计 以仿真为目标的 MCS-51 系列单片机系统电路时,可以略去单片机振荡电路。另外,对 MCS-51 系列单片机 而言,复位电路也可略去,EA 控制引脚也可悬空。但要注意若要进行电路电气检测,不可略去。
图7
这时,新建立的项目出现在项目窗口中,如图 8 所示。
图 8 项目窗口中新建立的项目
(4)编译、调试 C51 程序 ① 加入 C51 程序 用鼠标右击项目工作区里的源代码组,选择“把文件加入到源代码 组(Add Files to Group‘Source Group1)”命令,把刚保存的 C51 程序源代码加入到新建
(完整版)PROTEUS仿真100实例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
Keil与Proteus联合仿真

Keil(uVison)与Proteus联合仿真说明(以流水灯C51程序为例)
一、安装KeiluVision3,并完成破解。
二、安装Proteus7.8,并完成破解。
三、再安装vdmagdi.exe。
四、联合仿真(以流水灯C51程序为例)
1.解压缩“流水灯C51.rar”,进入文件夹,如下所示。
2.进入文件夹,双击“流水灯.DSN”,出现如下界面:
单击Debug菜单,选中use Remote Debug Monitor,如下图所示
3.进入文件夹,双击led.Uv2,如下所示:
单击上图中圈出的“Target1”,单击鼠标右键,出现下图
再单击上图中圈出的options for ‘Target1’,出现的界面上,选中Output标签页,选中Create Hex File(如下图)。
选中Debug标签页,选中use,Proteus VSM Simulator
此设置,系统会保存,只需设置一遍(创建新的工程,需要做类似设置)。
4.单击工具栏按钮,完成编译(检查是否有语法错误!)。
若无误,单击工具栏
按钮启动程序(程序等待执行),再单击按钮Run程序。
观察Proteus
界面,流水灯是否动态如流水般移动闪烁。
正常运行后,若要退出程序,先单击按钮Halt程序,再单击按钮,即可退出联合仿真运行。
以后,只修改软件,只需执行上面的编译、执行步骤,前面的设置系统会保存,不必每次设置。
keil+proteus流水灯实验

下面的这个东西就不用说了吧,开关运行按钮。
下面这个就是结果了。
5,程序
#include "reg51.h"
#include "intrins.h" //该文件包含—crol—(。。。)的函数原型
void mdelay(unsigned int delaytime)//延时程序
流水灯实验《仅供参考》
1
必须的两个软件,没有的自己去下了。太大了没办法传。 2
Keil软件
,,
别忘记设置这些参数。
在creat HEX Fi上打狗。。。打钩,嘿嘿,这是proteus中需要的文件。
3
Proteus软件,照图放一下就ok了。最小系统随便一搜就知道了。Crystal,找晶振使用(双击该属性12MHZ),cap电容(两个30pf,一个10uf),resistor电阻的(8个1k的,一个10k)的),AT89c52,switch开关。
各位都是聪明人,智商都是高高的。相信你一定可以的。
while(1)//死循环。相当于for(;;)
{
P3|=0x3c;
{
while((P3|0xfb)!=0xff)//判断按下的开关
{P1=outdata;
outdata=_crol_(outdata,1); //循环左移命令—crol—()
mdelay(1000);
}
P1=0xff;
}
}
}
6,完事。
{
unsigned int j=0;//无符号整数j
for(;delaytime>0;delaytime--)//for循环
{
for(j=0;j<125;j++)//125*delaytime为所延迟的时间
(完整版)PROTEUS仿真100实例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
示例要求:
在80C51单片机的P2口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。
在KEIL 51中编程序,形成HEX 文件;在PROTEUS中设计硬件,下载HEX文件,运行看结果。
第1篇:PROTEUS电路设计
1、打开PROTEUS的ISIS软件,如图1所示。
新建电路图文件,将文件保存到E:\projectio(新建文件夹projectio)下面,文件基本名为io,扩展名默认。
选择元件
图1 ISIS窗口图
2、在component mode模式下单击选择元件按钮P,打开元件选择对话框,如图2所示。
图2 元件选择窗口
在元件选择对话框的keywords窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元
件,添加元件到图3的device列表栏。
在这里依次添加元件单片机80C51、电阻RES、电容CAP、按键BUTTON、晶振CRYSTAL、发光二极管LED-RED,如图3所示。
图3 添加元件的device列表栏
3、选择devices元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元件进行移动、旋转等操作;如图4所示。
电源(POWER)与地(GROUND):(右键-放置-终端里选)。
图4 放置元件图
4、连接导线,如图5所示。
连接后存盘。
图5 连接元件图
5、在Keil软件中设计软件程序,形成HEX文件(具体过程见第2篇Keil软件编程)。
保存软件项目到电路文件相同的文件夹E:\projectio下。
6、在PROTEUS电路图中,单击单片机80C51芯片,选中,再次单击打开单片机80C51的属性对话框,在属性对话框中的program file框中选择下载到80C51芯片中的程序。
这里是同一个文件夹下面的shili.hex文件。
如图6所示。
图6 下载程序到单片机
7、单击仿真运行按钮play,运行程序。
可通过LED二极管看到相应的结果。
如图7所示。
图7 仿真结果图
第2篇:Keil软件编程
1、运行KEIL51软件,出现图1所示KEIL 51主界面。
图1 KEIL 51主界面
首先用Project菜单下的New Project命令建立项目文件,过程如下:
(1)选择Project菜单下的New Project命令,弹出如图2所示的Create new Project对话框。
(2)在Create New Project对话框中选择新建项目文件的位置(与PROTEUS电路图文件同一个文件夹下E:\projectio),输入新建项目文件的名称,例如,项目文件名为shili,单击【保存】按钮将弹出如图3所示的Select Device for Target ‘Target 1’对话框,用户可以根据使用情况选择单片机型号。
Keil uVision2 IDE几乎支持所有的51核心的单片机,并以列表的形式给出。
选中芯片后,在右边的描述框中将同时显示选中的芯片的相关信息以供用户参考。
图2 Create New Project对话框
图3 Select Device for Target ‘Target 1’对话框
(3)这里选择atmel公司的AT89c51。
单击【确定】按钮,这时弹出如图4所示的Copy Standard 8051 Startup Code to Project Folder and Add File to Project确认框,C语言开发选择【是】,汇编语言开发选择【否】。
单击后,项目文件就创建好了。
项目文件创建后,在主界面的左侧的项目窗口可以看到项目文件的内容。
这时只有一个框架,紧接着需向项目文件中添加程序文件内容。
图4 Copy Standard 8051 Startup Code to Project Folder and Add File to Project确认框
2、给项目添加程序文件
当项目文件建立好后,就可以给项目文件加入程序文件了,Keil uVision2支持C语言程序,也支持汇编语言程序。
这些程序文件可以是已经建立好了的程序文件,也可以是新建的程序文件,这里我们新建的汇编程序文件后再添加。
(1) 选择文件菜单上的new命令,出现新建文本窗口,如图5所示。
图5 新建文本窗口
在文本编辑窗口中输入程序。
存盘,假设文件名为chengxu.asm。
注意汇编程序文件扩展名为.asm,这时默认路径为工程文件夹。
参考程序如下:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV A, #01H
LOOP: MOV P2, A
LCALL DELAY
RL A
SJMP LOOP
SJMP $
DELAY: MOV R2, #0FFH
DELAY1: MOV R3, #0FFH
DJNZ R3, $
DJNZ R2, DELAY1
RET
END
(2)添加文件到项目中。
在项目管理器窗口中,展开Target1项,可以看到Source Group1子项。
右击Source Group1,在出现菜单中选择Add Files to Group ‘Source Group1’命令。
出现添加文件的窗口,加程序chengxu.asm 如到项目中。
如图6所示。
注意文件类型要选择为*.a*。
图6 添加程序文件到项目
3、编译、连接项目,形成目标文件
当把程序文件添加到项目文件中,并且程序文件已经建立好存盘后,就可以进行编译、连接,形成HEX 目标文件(只在keil 51中软件仿真可以不形成目标文件)。
(1)选择Project菜单下的Built Target命令(或快捷键F7) 编译、连接当前项目,编译、连接时,如果程序有错,则编译不成功,并在下面的信息窗口给出相应的出错提示信息,以便用户进行修改,修改后再编译、连接,这个过程可能会重复多次。
如果没有错误,则编译、连接成功,并且在信息窗口给出提示信息。
如图7所示。
图7 编译、连接后的显示图
(2)如果要做硬件下载可硬件仿真,则要形成HEX目标文件,须先对输出选项进行相应的设置,设置后再进行编译连接。
方法如下:右击项目管理器窗口的Target1项,在右键菜单中选择下面的Options for Target ‘Target 1’命令,在Options for Target ‘Target 1’对话框选择Output选项卡,在该选项卡选中Create HEX File选项,选择生成HEX文件,然后按(1)操作进行编译连接。
如图8所示。
图8 Options for Target ‘Target 1’ 对话框
4、运行调试观察结果(本示例不需要的步骤)
当项目编译、连接成功后,就可以运行它来观察结果。
先用Debug菜单下的Start/Stop Debug Session命令(快捷键Ctrl+F5)启动调试过程,启动后可用Debug菜单下Go连续运行命令、Step单步运行、Stop running停止运行命令等运行程序观察结果。