Keil5与Proteus实现键控灯亮

  • 实验目的

熟悉keil与proteus软件

1. 了解单片机的外部引脚和最小系统; 2. 掌握单片机与LED的硬件连接方法; 3. 掌握单片机C51语言的程序框架; 4. 了解Proteus 和 Keil 软件的使用。

打造最小系统

实现单灯闪烁

  • 实验设备:笔记本电脑 搭配软件 keil5与proteus8  
  • 实验内容和结果

通常包括实验要求、硬件原理图、程序流程图、程序、程序运行的仿真效果等。硬件原理图可以手写或打印,其余必须手写。程序要有缩进,要有注释

实现按键控制流水灯

实现功能:按下流水 松开常亮

程序代码:#include <REGX52.H>

#define LED_IO P2

sbit key1=P3^0;

unsigned char ledArr[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay(unsigned int n){

unsigned int i,j;

        for(i=0;i<n;i++){

        for(j=0;j<120;j++);

        }

}

 void open (){

 if(key1==1){

 LED_IO=0;

 }else{

     int i;

                  for(i=0;i<8;i++){

                  LED_IO=~ledArr[i];

                  delay(50);

 }

  }

}

 

void main(){    

while(1){

open();

}

}

代码截图:

  • 实验问题思考

1. 电路设计:

继电器驱动电路:

继电器一般有两个接口,一个是线圈接口,另一个是常开(NO)或常闭(NC)接口。单片机通过输出高电平或低电平来驱动继电器线圈,从而控制继电器的吸合和断开,进而控制较大的负载。

蜂鸣器驱动电路:

蜂鸣器分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器内部包含振荡电路,只需单片机输出直流电即可发声;无源蜂鸣器需要单片机输出交流信号才能发声。

电路原理图及工作原理:

```

继电器驱动电路:

  +Vcc (例如5V)

    |

    R1

    |

    +-----> Relay Coil

    |

  GND

蜂鸣器驱动电路:

  +Vcc (例如5V)

    |

    R2

    |

    +-----> Buzzer (无源蜂鸣器)

    |

  GND

```

工作原理:

- 继电器驱动电路中,当单片机的某个IO口输出高电平时,通过限流电阻R1给继电器线圈供电,使继电器吸合,其常开(NO)接口导通,从而可以控制外部电路。

- 蜂鸣器驱动电路中,当单片机的某个IO口输出高电平时,通过限流电阻R2给蜂鸣器供电,无源蜂鸣器便发声。

2. 单片机的准双向口和双向口的区别:

准双向口(Quasi-bidirectional port)是指单片机的某些I/O口既可以作为输入也可以作为输出,但是当作为输入时只能读取高电平信号,不能读取低电平信号。这类端口通常用于连接特定的外设,如键盘矩阵扫描等。

双向口(Bidirectional port)是指单片机的I/O口既可以作为输入也可以作为输出,并且可以读取高低电平信号。这种端口的灵活性更高,适用于多种不同的应用场景。

对于51单片机而言,P0口是准双向口,它在外部扩展RAM或ROM时用作双向数据总线。而P1、P2和P3口则是双向口,可以作为普通的I/O口使用,用于输入和输出信号。

  • 心得体会

学会上网搜寻资料

仔细看代码

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keil5Proteus联合使用的C51中,可以实现红绿灯的控制。可以通过单片机的引脚控制LED灯的亮灭来模拟红绿灯的状态。具体实现的步骤如下: 1. 首先,需要了解单片机和红绿灯的连接方式。根据引脚的功能分配,确定红绿灯的亮灭状态。例如,P2引脚的76543210位分别表示红绿灯、无用、无用、东绿、东黄、东红、北红、北黄、北绿。 2. 根据红绿灯的控制逻辑,编写相应的C代码。在代码中设置不同引脚的状态值,来控制红绿灯的亮灭。根据需求,设定不同的延时时间来实现红绿灯的切换。 3. 使用Keil5进行编译和调试代码,生成hex文件。 4. 在Proteus中,添加单片机模型并导入hex文件。连接LED灯与单片机的引脚,模拟红绿灯的显示。 5. 运行仿真,观察红绿灯的变化。 以下是一个实现红绿灯控制的完整代码示例: ```c #include<reg51.h> #define uchar unsigned char #define uint unsigned int void delay(uint xms){ uint i,j; for(i=xms;i>0;i--){ for(j=110;j>0;j--); } } void main(){ uint i; while(1){ P2=0x24; // 东西绿灯亮,南北红灯亮 delay(3000); for(i=0;i<5;i++){ P2=0x14; // 东西黄灯亮,南北红灯亮 delay(500); P2=0x04; // 东西没有灯亮,南北红灯亮 delay(500); } P2=0x09; // 东西红灯亮,南北绿灯亮 delay(3000); for(i=0;i<5;i++){ P2=0x0a; // 东西红灯亮,南北黄灯亮 delay(500); P2=0x08; // 东西红灯亮,南北没灯亮 delay(500); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值