51单片机实验1:通过IO口控制LED灯显示状态

版权申诉
5星 · 超过95%的资源 1 下载量 121 浏览量 更新于2024-11-07 3 收藏 46KB ZIP 举报
资源摘要信息: "实验1_IO口控制_led灯显示_51单片机" 知识点概述: 本实验涉及51单片机的I/O口控制和基本的输入输出操作。通过编程控制单片机的I/O口状态,实现对外部设备(本例中为发光二极管LED灯)的控制,从而直观地反映输入设备(拨动开关)的状态。实验的目的是让学习者了解如何读取和处理输入信号,并基于这些信号控制输出设备。 详细知识点: 1. 51单片机概述: - 51单片机是经典的微控制器之一,广泛用于教学和工业控制。 - 它通常包含一定数量的I/O端口,如P0、P1、P2和P3等,其中P1端口常用于实验和学习。 - 51单片机内部结构包括CPU、ROM、RAM、I/O端口、定时器/计数器、中断系统等。 2. I/O口的功能和使用: - I/O(输入/输出)端口是单片机与外部世界通信的接口。 - 在本实验中,P1.0和P1.1端口作为输入端口,用于连接拨动开关,P1.2和P1.3端口作为输出端口,用于连接LED灯。 - I/O口工作模式的配置是通过编程来设置的,例如将I/O口配置为输入或输出。 3. 开关的工作原理与连接: - 拨动开关在物理上是通过机械动作改变电路的开闭状态,从而改变连接的电路电平。 - 在本实验中,开关连接到P1.0和P1.1端口,通过读取这两个端口的状态来识别开关的位置。 4. LED灯的工作原理与控制: - 发光二极管(LED)是一种半导体器件,当电流通过时能够发光。 - 在本实验中,LED灯连接到P1.2和P1.3端口。通过向这些端口输出低电平,可以使对应的LED灯亮起。 5. 基本编程操作: - 通过编写程序来控制单片机I/O口的状态。 - 在本实验中,程序需要不断检测P1.0和P1.1的电平状态,并根据读取到的高低电平控制P1.2和P1.3的输出,从而控制LED灯的亮灭。 6. 编程逻辑理解: - 编程时需要理解条件判断语句,如if-else语句,在程序中根据输入信号的不同状态执行不同的操作。 - 了解如何在程序中使用延时函数,以保证开关状态稳定读取和LED灯状态改变之间的时间间隔。 7. 实验操作步骤: - 连接实验电路,将拨动开关和LED灯分别连接到51单片机的指定I/O口。 - 编写控制程序,将程序通过编程器烧录到51单片机中。 - 测试程序,通过操作拨动开关,观察LED灯的亮灭状态是否能正确反映开关位置的变化。 8. 实验目标: - 理解单片机I/O口的读写操作。 - 掌握基本的输入输出控制逻辑和编程技巧。 - 能够独立完成简单硬件连接和程序编写,实现预期的控制功能。 通过以上知识点的学习和实验操作,学习者将能够掌握51单片机的基本输入输出控制方法,为后续更复杂的应用打下坚实的基础。

#include "reg52.h" #include "func.h" #include "timer.h" //定义独立按键控制脚 sbit KEY1=P3^0; sbit KEY2=P3^1; sbit LED_heng_ren_lv = P1^1; sbit LED_heng_ren_hong = P1^0; sbit LED_heng_che_lv = P2^0; sbit LED_heng_che_huang = P2^1; sbit LED_heng_che_hong = P2^2; sbit LED_zong_che_lv = P2^3; sbit LED_zong_che_huang = P2^4; sbit LED_zong_che_hong = P2^5 ; sbit LED_zong_ren_lv = P2^6; sbit LED_zong_ren_hong = P2^7; void Delay100ms() //@11.0592MHz { unsigned char i, j; i = 180; j = 73; do { while (--j); } while (--i); } void Zong() { LED_Zong_Che(1); LED_Zong_Ren(1); LED_Heng_Che(3); LED_Heng_Ren(3); } void Heng() { LED_Zong_Che(3); LED_Zong_Ren(3); LED_Heng_Che(1); LED_Heng_Ren(1); } void Wait0() { LED_Zong_Che(2); LED_Zong_Ren(3); LED_Heng_Che(3); LED_Heng_Ren(3); } void Wait1() { LED_Zong_Che(3); LED_Zong_Ren(3); LED_Heng_Che(2); LED_Heng_Ren(3);} void Urgent() { LED_Heng_Che(3); LED_Heng_Ren(3); LED_Zong_Che(3); LED_Zong_Ren(3); } void LED_Heng_Che(unsigned char i) { if(i) { LED_heng_che_lv = 1 ; LED_heng_che_huang = 1; LED_heng_che_hong = 1; if(i == 1) {LED_heng_che_lv = 0 ;} else if(i == 2 ) {LED_heng_che_huang = 0;} else if(i == 3) {LED_heng_che_hong = 0;}} } void LED_Heng_Ren(unsigned char i) { if(i) { LED_heng_ren_lv = 1; LED_heng_ren_hong = 1; if(i == 1) { LED_heng_ren_lv = 0; } else if(i == 3) { LED_heng_ren_hong = 0; } } } void LED_Zong_Che(unsigned char i) { if(i) { LED_zong_che_lv = 1; LED_zong_che_huang = 1; LED_zong_che_hong = 1; if(i == 1) {LED_zong_che_lv = 0; } else if(i == 2) {LED_zong_che_huang = 0; } else if(i == 3) {LED_zong_che_hong = 0; } } } void LED_Zong_Ren(unsigned char i) { if(i) { LED_zong_ren_lv = 1; LED_zong_ren_hong = 1; if(i == 1) { LED_zong_ren_lv = 0; LED_zong_ren_hong = 1; } else if(i == 3) { LED_zong_ren_hong = 0; LED_zong_ren_lv = 1; } } } char KEY_Scan() { if(KEY1 == 0) { Delay100ms(); if(KEY1 == 0) { return 1; } } else if(KEY2 == 0) { Delay100ms(); if(KEY2 == 0) { return 2; } } else return 0; }

2023-06-12 上传