目的:使LED灯闪烁,需循环让 D1 指示灯先亮一会后熄灭,因此只需编写一个循环函数,专门在那循环运行即可实现延时功能。
编译软件:keil5
过程:
(1)书写延时函数
函数名:delay_10us
函数功能:延时函数,ten_us=1时,大约延时10us
输入:ten_us
输出:无
函数需要通过while循环实现,函数入口有一个形式参数ten_us,如果ten_us=1,则while循环执行一次,调用该函数延时时间大约 10us。
(2)书写main函数代码
LED1=0(低电平点亮);
LED1=1(高电平熄灭);
delay_10us(50000);仿真得知大约延时450ms
(3)编译程序,发现错误
函数形参 ten_us 是 u16 类型的,不是 C语言数据类型关键字
(4)重新定义数据类型
(5)重新编译,最终得到正确的完整编译代码及hex.文件
(6)通过CH340驱动烧录hex.文件到单片机开发板
(7)连接P20与D1端口观察实验现象
c51单片机学习笔记-LED闪烁实验现象
(8)其他:通过 KEIL 软件仿真查看延时时间
①点击仿真按钮,进入仿真界面
②点击 RST 按钮,重新复位系统参数,此时参数列表中 sec 则为 0,然后设置断点
③点击运行代码,可以看到黄色箭头直接定位到 18 行代码,也是设置的第一个断点位置,此时参数列表中 sec 时间是 0.00039s。
④再点击运行代码,此时黄色箭头指向第 19 行代码,此时 sec 为 0.450601s。
⑤将现在这个时间减去上一步的 sec 时间就可以得到 delay_10us(50000)运行 的实际时间了为0.450601- 0.00039=0.4502s≈450ms