创建keil project(89C52)并且仿真流水灯

本文介绍了如何在keil环境下创建一个基于89C52芯片的Project,详细步骤包括新建项目、添加.c源文件、实现for循环流水灯代码,并进行编译、链接及调试。通过调试界面的Port 2观测运行结果。

1、创建keil project
1.1点击 project->New uVision Project。
这里写图片描述

1.2创建名为”test3”的 Project 文件,保存在文件夹”test3”。
这里写图片描述

1.3选择芯片型号为Atmel AT89C52
这里写图片描述
这里写图片描述

2、创建.c文件,并且添加到工程中
2.1新建并且保存为”test3.c”
这里写图片描述

2.2选中”Source Group”,单击右键,选择”Add Existing File to Group…”,选择”test3.c”,点击”add”。将test3.c添加到project 中。
这里写图片描述这里写图片描述

3、仿真—用for循环实现的流水灯
3.1 for 循环实现的流水灯代码

<think>嗯,用户再次咨询AT89C52流水灯的实现方法,看来对微控制器编程是新手。需要整合引用中三份代码的共性,简化成易理解的版本。用户提供的引用展示了三种流水灯写法:引用[1]使用循环移位函数_crol_配合延时,引用[2]是带参数的精确延时函数,引用[3]则直白地枚举每个灯状态。考虑到新手学习曲线,重点推荐第一种循环移位方法,既保持代码简洁又体现编程技巧。注意到所有代码都涉及两个核心:端口控制和延时函数。在基础示例中准备使用P1端口,但需提醒用户根据实际电路修改端口号。引用中出现的_nop_()指令需要解释——这是Keil编译器特有的空周期延时,标准教程可暂不采用。优化点方面,用户可能没意识到精确延时的重要性。引用[2]展示参数化延时函数更实用,可以快速调节闪烁速度;引用[3]的手动状态枚举虽直观但代码冗余,可作为理解移位原理的过渡方案。在回答中要强调12MHz晶振对应的延时计算,因为引用[3]的Delay500ms函数正是基于此频率。安全提示容易被忽略,但引用中未提及的P0端口上拉电阻问题需补充说明。考虑到用户用Proteus仿真,还应提醒hex文件生成时的晶振设置必须与实际代码匹配——引用[1]提到过这点但不够醒目。最后预测用户可能的后续问题:为什么用0xFE?十六进制与LED位置的关系?中断如何改进流水灯?这些都需要在代码注释中埋下伏笔。特别是引用[2]没有使用P2=0x7F后的复位操作,要暗示这会导致灯停在最后状态而非循环。</think> 以下是基于AT89C52单片机的流水灯实现教程及优化代码,结合引用内容的核心逻辑并修正常见问题: ### 基础实现代码(循环左移) ```c #include <reg52.h> #include <intrins.h> // 包含循环移位函数 #define uint unsigned int #define uchar unsigned char void delay(uint z) { // 可调参数延时函数 uint x, y; for (x = z; x > 0; x--) for (y = 110; y > 0; y--); // 12MHz晶振下约1ms } void main() { P1 = 0xFE; // 初始化:P1.0亮 (1111 1110) while(1) { P1 = _crol_(P1, 1); // 循环左移1位 delay(500); // 延时500ms } } ``` ### 关键步骤说明 1. **初始化配置** - `P1 = 0xFE`:二进制`1111 1110`,P1.0引脚低电平点亮LED - 根据电路修改端口(P0/P1/P2)和电平(共阳/共阴) 2. **移位函数** - `_crol_( )`:循环左移函数(需包含`<intrins.h>`) - `_cror_( )`:循环右移函数实现反向流动 3. **延时校准** - 12MHz晶振下,内循环约执行1ms - 调整`delay(500)`参数或内循环值控制流速 --- ### 优化方案(双向流水灯) ```c void main() { uchar dir = 0; // 方向标志 P2 = 0xFE; // 初始状态 while(1) { if(dir == 0) { P2 = _crol_(P2, 1); if(P2 == 0x7F) dir = 1; // 检测最左侧亮 } else { P2 = _cror_(P2, 1); if(P2 == 0xFE) dir = 0; // 检测最右侧亮 } delay(200); } } ``` --- ### 实践步骤(Keil+Proteus) 1. **Keil设置** - 新建工程 » 选择AT89C52 - 编译生成HEX文件: * Project » Options for Target » Output » 勾选`Create HEX File` 2. **Proteus仿真** - 电路设计:AT89C52 + 8位LED(加限流电阻) - 双击单片机 » Program File » 载入生成的HEX - 晶振设置12MHz(与代码延时匹配) > 注意:`P0`端口需外接上拉电阻,`P1/P2/P3`可直连LED[^1][^3] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值