打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机开发(6)keil c与proteus联调
(1)
51单片机心形流水灯源程序
#include
X

#include

#define uint unsigned int
#define uchar unsigned char
uchar codetable0[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//P0-P7依次点亮
uchar codetable1[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//P0-P7依次熄灭
uchar codetable2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//P7-P0依次点亮
uchar codetable3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//P7-P0依次熄灭
uchar temp,aa,bb,temp,temp1;
void delay(uint z);
void h();
void hh();
void hhh();
void hhhh();
void init();
void main()//主函数
{
init();
while(520)//大循环
{
h();
hh();
hhh();
hhhh();
}
}
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void h()
{
for(aa=0;aa<>
{
for(bb=0;bb<>
{
P0=table0[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table0[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table0[bb];
delay(50);
}
for(bb=0;bb<>
{
P2=table0[bb];
delay(50);
}
delay(500);
for(bb=0;bb<>
{
P0=table1[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table1[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table1[bb];
delay(50);
}
for(bb=0;bb<>
{
P2=table1[bb];
delay(50);
}
}
for(aa=0;aa<>
{
for(bb=0;bb<>
{
P2=table2[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table2[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table2[bb];
delay(50);
}
for(bb=0;bb<>
{
P0=table2[bb];
delay(50);
}
delay(500);
for(bb=0;bb<>
{
P2=table3[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table3[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table3[bb];
delay(50);
}
for(bb=0;bb<>
{
P0=table3[bb];
delay(50);
}
}
}
void hh()
{
for(bb=0;bb<>
{
for(aa=0;aa<>
{
P0=table0[aa];
P2=table2[aa];
delay(100);
}
for(aa=0;aa<>
{
P3=table2[aa];
P1=table0[aa];
delay(100);
}
for(aa=0;aa<>
{
P2=table3[aa];
P0=table1[aa];
delay(100);
}
for(aa=0;aa<>
{
P1=table1[aa];
P3=table3[aa];
delay(100);
}
}
}
void init()
{
P1=P2=P3=P0=0x00;
delay(1000);
P1=P2=P3=P0=0xff;
delay(200);
temp=0xfe;
temp1=0x7f;
}
void hhh()
{
for(bb=0;bb<>
{
for(aa=0;aa<>
{
P0=temp;
temp=_crol_(temp,1);
delay(40);
}
P0=0xff;
for(aa=0;aa<>
{
P1=temp;
temp=_crol_(temp,1);
delay(40);
}
P1=0xff;
for(aa=0;aa<>
{
P3=temp;
temp=_crol_(temp,1);
delay(40);
}
P3=0xff;
for(aa=0;aa<>
{
P2=temp;
temp=_crol_(temp,1);
delay(40);
}
P2=0xff;
}
}
void hhhh()
{
for(aa=0;aa<>
{
P0=P1=0x00;
delay(100);
P1=P0=0xff;
P2=P3=0x00;
delay(100);
P2=P3=0xff;
}
}
1.KEIL C
建工程 选择Atmel的89C51或89C52(4kb/8kb程序flash)
使用的是STC90C516RD 或 STC89C52RC的单片机,但选择ATMEL------AT89C52
都是51的内核, STC和 ATMEL没有什么区别,只是厂商不同罢了
2.建文件

加文件到工程里
3.
output:创建.hex文件,
#include //51单片机头文件
#define uint unsigned int //用uint代替unsigned int
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=500;y>0;y--);
}
void main()
{
while(1) //让所有led循环闪烁
{
P2=0xff;
delay(200);
P2=0x00;
delay(200);
}
}
keil c不能调试,
是keil内部的模拟时序
单片机执行一条指令大概1us的时间,你这个程序几十毫秒就跑完了
肯定看不出来他的一个变化的
例LED程序
#include

#include

#define uint unsigned int
#define uchar unsigned char
uchar codetable0[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//P0-P7依次点亮
uchar codetable1[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//P0-P7依次熄灭
uchar codetable2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//P7-P0依次点亮
uchar codetable3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//P7-P0依次熄灭
uchar temp,aa,bb,temp,temp1;
void delay(uint z);
void h();
void hh();
void hhh();
void hhhh();
void init();
void main()//主函数
{
init();
while(520)//大循环
{
h();
hh();
hhh();
hhhh();
}
}
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void h()
{
for(aa=0;aa<>
{
for(bb=0;bb<>
{
P0=table0[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table0[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table0[bb];
delay(50);
}
for(bb=0;bb<>
{
P2=table0[bb];
delay(50);
}
delay(500);
for(bb=0;bb<>
{
P0=table1[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table1[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table1[bb];
delay(50);
}
for(bb=0;bb<>
{
P2=table1[bb];
delay(50);
}
}
for(aa=0;aa<>
{
for(bb=0;bb<>
{
P2=table2[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table2[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table2[bb];
delay(50);
}
for(bb=0;bb<>
{
P0=table2[bb];
delay(50);
}
delay(500);
for(bb=0;bb<>
{
P2=table3[bb];
delay(50);
}
for(bb=0;bb<>
{
P3=table3[bb];
delay(50);
}
for(bb=0;bb<>
{
P1=table3[bb];
delay(50);
}
for(bb=0;bb<>
{
P0=table3[bb];
delay(50);
}
}
}
void hh()
{
for(bb=0;bb<>
{
for(aa=0;aa<>
{
P0=table0[aa];
P2=table2[aa];
delay(100);
}
for(aa=0;aa<>
{
P3=table2[aa];
P1=table0[aa];
delay(100);
}
for(aa=0;aa<>
{
P2=table3[aa];
P0=table1[aa];
delay(100);
}
for(aa=0;aa<>
{
P1=table1[aa];
P3=table3[aa];
delay(100);
}
}
}
void init()
{
P1=P2=P3=P0=0x00;
delay(1000);
P1=P2=P3=P0=0xff;
delay(200);
temp=0xfe;
temp1=0x7f;
}
void hhh()
{
for(bb=0;bb<>
{
for(aa=0;aa<>
{
P0=temp;
temp=_crol_(temp,1);
delay(40);
}
P0=0xff;
for(aa=0;aa<>
{
P1=temp;
temp=_crol_(temp,1);
delay(40);
}
P1=0xff;
for(aa=0;aa<>
{
P3=temp;
temp=_crol_(temp,1);
delay(40);
}
P3=0xff;
for(aa=0;aa<>
{
P2=temp;
temp=_crol_(temp,1);
delay(40);
}
P2=0xff;
}
}
void hhhh()
{
for(aa=0;aa<>
{
P0=P1=0x00;
delay(100);
P1=P0=0xff;
P2=P3=0x00;
delay(100);
P2=P3=0xff;
}
} 重新打开keil c,建工程文件等,编译ok,—>debug,调出P1,P2,P3等口,—>全速运行,即可

针对4个P口来调试,



按F10操作一下,就走一步:高电平—>右边P口打勾或去勾,即对应LED亮与灭, 例P1包括P1.0~1.7
例2

进入调试模式,1 为运行,当程序处于停止
状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序
回到最开头处执行。按 4 我们可以打开 5 中的串行调试窗口,这个窗口可以看到从 51
芯片的串行口输入输出的字符, 在这里看运行结果,
首先按 4 打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打印“Hello
World! ”
停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启\关闭调试模式按钮
查看存储

查看变量

例3

全速仿真—>看sec的运行时间是?秒

时钟设置11.0592
一般是用115200波特率烧录
根据单片机晶振,如果12MHZ,就填12MHZ,
(2)
protues和keil关联
proteus安装
1.安装proteus 7.6 SP4 http://www.uzzf.com/soft/2639.html

+
2.注册:
安装后,电脑开始的软件的Licence Manager打开

点击Borwse For Key File,调入
注册文件

点Install
+
3.汉化 http://www.cr173.com/soft/21352.html
a.将汉化包
复制到proteus的安装文件夹下C:\ProgramFiles\Labcenter Electronics\Proteus 7 Professional
并使用Proteus 7.6 SP4破解1.2版.exe
将安装文件夹下的ARES.DLL和ISIS.DLL应用安装,
b.再将ARES.DLL和ISIS.DLL文件复制到C:\Program Files\LabcenterElectronics\Proteus 7 Professional\BIN覆盖原文件
proteus仿真调试
protues
1.ISIS仿真部分
2.ARES是PCB设计部分:GERBER文件—>钢网

(1)
1.文件—>新建设计—>DEFAULT模板
2.文件—>保存设计
(2)系统—>设置图纸大小:选A4
(3)库—>拾取元件/符号,
例七段显示数码管是选择optoelectronics,


对该元件单击鼠标,则处于高亮红色状态,可以进行拖拉等操作,—>如果鼠标双击,则可以编辑这个元件的各种属性参数等,

U1是在电路原理图的位置编号,
Clock Frequency是芯片外接晶振频率,
单片机添加程序

源代码—>添加/删除源文件

1.选择对应的编译器,例AT89C51,选择ASEM51,
2.只能添加.ASM文件

或直接双击单片机,添加程序:可添加C和汇编的.hex文件

在protues里编辑/修改源程序:
1.源代码—>点击1.LED2.ASM


编写好后,保存
2.再设置编译器:源代码—>设定代码生成工具—>

3.源代码—>全部编译:
编译产生编译日志和.hex文件,
4.
再运行操作
选择电源和地

电气连线的检查:工具—>电气规则检查

Netlist generated OK 网络表已经生成
ERC errors found 无电气规则错误
这两个提示出现,才算没有错误,
生成.DSN文件
保存,
再可使用


输出BOM文档,可查看元件清单

生成网络表并导出:

protues转成PCB电路板文件(Lyt格式)—>制板厂加工
keil c与proteus关联联调设置


选择P,增加元器件

在关键字里输入at89c51

点确定,

电源


鼠标点击红圈的电源,

选择VCC
LED灯:输入LED-GREEN

+

鼠标点击单片机,弹出,在红圈文件里调.hex文件(例LED.hex)


点击红框部分的按钮,开始仿真调试,八个LED会按照程序闪烁等,
(1)

1.连哪个脚
2.多少电压等
(2)
SAMPLES文件夹:可调案例

选择红圈的文件调用 ,

protues和keil关联

即keil控制protues
1.proteus的官网下载联调的安装驱动“VDMAGDI.EXE”,自动设置
http://downloads.labcenter.co.uk/vdmagdi.exe
2.proteus设置

3.keil c设置

—>

点击keil c里的全速运行,则protues的灯会自动运行,

不用protues里点击运行按钮,
即可由kei c里的按钮来控制protues里的灯运行,
注:
kei c里不管是什么程序,只起远程控制
protues里灯的运行,由protues里单片机加载的程序所决定,
(3)
仿真器或者仿真芯片才能调试
仿真器:无需搭建电路来仿真(仿电路)
1.keil c里要设置

2.或烧录软件STC-ISP的debug里设置,
由keil c或烧录软件STC-ISP等来控制仿真器,
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
怎样用keil编写4位数码管显示1234的程序
51单片机多路延时控制器小制作
KEIL5与Proteus联调设置
51单片机8X8点阵贪吃蛇游戏(带proteus仿真)
51单片机多机通信
51单片机制作实践
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服