单片机实验1"/>
51单片机实验1
关于软件的使用我们用的是proteus和keil软件,关于软件的安装和使用,这里就不在说明了。如果软件还没有安装可以参考
proteus安装:Proteus软件的安装与使用方法(超详细)
keil安装:keil5安装教程
keil5使用教程
接下来我们开始进行流水灯的设计
实验项目1-流水灯的设计
实训目的:
1、编写程序通过控制51单片机引脚控制LED灯的点亮与关闭,实现“流水灯”效果
2、编程程序利用延时函数,完成8个LED闪烁的效果
3、控制无源蜂鸣器发声,尝试发出不同频率的声音
实验步骤
(一)“流水灯”的实现
在isis professional中设计电路如下:
主要器件:AT89C51、RES、LED-GREEN、power
程序代码如下:
#include<reg51.h>
#include<intrins.h>
void delay10ms(unsigned int c);//声明了一个名为 delay10ms函数,后边会完善函数体
void main(void)
{ P1=0xfe; //P1 变量的值赋为 0xfe,即二进制的 1111 1110。while(1){ delay10ms(100); //延时 100 毫秒P1=_crol_(P1,1); //crol 函数将 P1 左移一位,并将移出的最高位移到最低位,实现 LED 灯的闪烁效果}
}void delay10ms(unsigned int c) //完善延时函数
{ unsigned char a, b;for(;c>0;c--){ for(b=38;b>0;b--){ for(a=130;a>0;a--);}}
}
//延时函数这段代码是一个三层循环。实现 delay10ms 函数的目的。
(二)爆闪灯
编程实现将8个LED灯分为两组,利用延时函数完成每组闪烁5次后,两组LED交替闪烁,实现“暴闪灯”效果
提示:
1、修改电路,LED更换为红色和蓝色;
2、两组灯交替的延时,比连续闪烁5次的间隔大一些。
电路连接:
程序代码如下:
#include<reg51.h>
#include<intrins.h>
void Delay(unsigned long n) // 定义一个延时函数Delay
{ while(n--); // 循环n次,每次让变量自减,用于实现时间上的延迟
}
void main(void)
{ unsigned char a=5;while(1){ for(;a>0;a--)// 内部 for 循环用于控制 LED 灯的闪烁次数和循环时间,因为变量 a=5,LED 灯会反复闪烁五次,每次持续 20,000 毫秒(即 20 秒){ P1=0x00; // 给P1赋值全0Delay(20000);P1=0xff;Delay(20000);}while(1) //while 循环实现了第二种 LED 灯闪烁方式,实现“亮、暗、亮、暗”等间歇性循环的闪烁效果。实现爆闪{ P1=0x0f;Delay(40000);P1=0xf0;Delay(40000);}}
}
(三)蜂鸣器发声
电路连接如下:
主要器件:AT89C51、RES、LED-GREEN、NPN、SPEAKER
程序代码如下:
#include<reg51.h>
sbit BEEP=P1^0;//蜂鸣器所连接的 IO 口 P1.0,并命名为 BEEP,使用 sbit 表示此变量是一个位单元(Bit)类型。
void Delay(unsigned int n)//延时
{ while(n--);
}
void main(void)
{ while(1) //在主函数中使用死循环结构 while(1),表示 BEEP 声音需要保持不停{ BEEP=0;//每次进入循环体后,先将 BEEP 置零(打开蜂鸣器)Delay(50);BEEP=1;//再将 BEEP 再置为 1(关闭蜂鸣器)Delay(50);}
}
//这段代码用于控制单片机上的蜂鸣器发出滴滴声,每次发出一声需要先将 P1 口 0 号位 置0表示打开蜂鸣器,经过50次空循环后将 0 号位 置1来关闭蜂鸣器。接着在进行下一次循环,程序会重复执行这个步骤来实现持续的蜂鸣效果。其中 Delay 函数用于延时控制蜂鸣器响起和停止的时间,参数 n 表示需要空循环的次数,具体的时间取决于 CPU 主频和其他应用程序对系统资源的占用情况,通常需要通过试验来确定具体值。建议在实际应用中使用定时器和计数器配合中断的方式来实现精准的定时控制,而不是使用空循环的方式。
更多推荐
51单片机实验1
发布评论