
AT89C52 流水灯实验报告
实验要求
- 使用 Proteus 进行电路绘画和模拟仿真。
- 基于单片机的嵌入式系统控制,实现对八颗 LED 的流水灯效果。
实验器材
- Keil_v5 , Proteus , PZ-ISP , CH340 。
- 单片机开发板(AT89C52),数据线,电脑,开发原理图。
实验过程
首先根据开发板原理图使用 Proteus 绘制出单片机以及发光二极管电路,可以参考 Proteus 绘图仿真 。如若未下载 Proteus , Download ,下载更适合中国宝宝的 Proteus ,下载流程参考 Proteus 8.9 安装教程 。根据图一 LED 模块原理图,可以绘制出图二。
图一 LED 模块原理图
图二 Proteus 绘图根据实验要求使用 Keil_v5 编写程序,并且将 RunLed.c 文件编译成 .hex 文件(注意新项目最好新创建一个新文件夹,新项目默认不会生成 .hex 文件。点击 options for target ,然后选择 output 勾选生成 .hex 文件。)
图三 生成 .hex 文件RunLed_Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
sbit led_0 = P2^0; // 赋值P20引脚为led_0
sbit led_1 = P2^1; // P21引脚,P2^1表示的就是P21
sbit led_2 = P2^2;
sbit led_3 = P2^3;
sbit led_4 = P2^4;
sbit led_5 = P2^5;
sbit led_6 = P2^6;
sbit led_7 = P2^7;
// 延迟函数
void delay(unsigned char ms){
unsigned char i,j;
for (i=1; i<=ms; i++){
for (j=1; j<=2*ms; j++);
}
}
// 程序入口
void main(){
unsigned char k;
while(1){
for(k=0; k<=7; k++){ // 循坏每一引脚
led_0 = 1; // 初始值1,表示P20引脚为高电位
led_1 = 1;
led_2 = 1;
led_3 = 1;
led_4 = 1;
led_5 = 1;
led_6 = 1;
led_7 = 1;
switch (k) { // 选择引脚,并设置状态
case 0: led_0 = 0; delay(100); break;
case 1: led_1 = 0; delay(100); break;
case 2: led_2 = 0; delay(100); break;
case 3: led_3 = 0; delay(100); break;
case 4: led_4 = 0; delay(100); break;
case 5: led_5 = 0; delay(100); break;
case 6: led_6 = 0; delay(100); break;
case 7: led_7 = 0; delay(100); break;
}
}
}
}将编译完成的 .hex 文件导入到 Proteus 中,观察是否符合实验结果,如若达到目标效果,则将 .hex 文件烧制到单片机内。
图四 Proteus 效果图使用 PZ-ISP 烧制程序进入单片机,观察实验现象。(注意烧制时选择合适的单片机型号和串口并开启单片机。)
图五 C52 烧制
通过本实验实现八个 LED 流水灯,成功地利用单片机控制了 LED 的点亮和熄灭顺序。通过调节延时函数的参数,可以调节流水灯的速度,从而满足不同的需求。最后恭喜同学完成第一次单片机全流程实操🎉🎉🎉。
- Title: AT89C52 流水灯实验报告
- Author: Djx-Ybelove
- Created at : 2025-03-05 08:11:34
- Updated at : 2025-03-21 18:50:07
- Link: https://blog.djx-ybelove.pp.ua/posts/1cab381b/
- License: This work is licensed under CC BY-NC-SA 4.0.




