- 打卡等级:以坛为家II
- 打卡总天数:429
- 最近打卡:2025-04-25 06:56:08
已绑定手机
金牌会员
- 积分
- 1533
|
发表于 2024-5-24 22:44:58
|
显示全部楼层
本帖最后由 未元星系 于 2024-5-25 14:21 编辑
自学开天斧第②课:
学习内容:1、Delay 延时函数
学习简介:点亮LED后需要观察更多信号,我们可以利用延时函数让LED亮一段时间再灭一段时间,如此循环,就能看到闪烁的LED,也能够根据自己的需要配置过更多花样的闪烁。Delay延时函数原理上是就是占用单片机运行程序的时间,实际上这会降低单片机运行效率,后期学到定时器时会有效率更高的延时代码。
Delay 延时函数配置方法(两种选一即可):
1.STC-ISP 软件延时计算器(本人有改动:unsigned char 换成了unsigned int / 加了do while()循环和形参,方便灵活设置具体延时时长):
void Delay_ms(unsigned int ms) //@24.000MHz
{
do{
unsigned char data i, j;
i = 29;
j = 183;
do
{
while (--j);
} while (--i);
}while(--ms);
}
// 自己配置需要的频率
2.STC8H8K64U开天斧库函数(本人有改动:unsigned char 换成了unsigned int):
#define MAIN_Fosc 24000000L //定义单片机主频24MHZ,这里可根据需要修改
void Delay_ms(unsigned int ms)
{
unsigned int i;
do{
i = MAIN_Fosc / 8920; //理论1.000ms, debug实测约1.00022291s (这里库函数原本除的是10000,
//但我这里延时略慢于设定时间,自行调整了参数,大家根据自己实际情况选择是否直接用库函数的参数即可)
while(--i);
}while(--ms);
}
主函数:
void main()
{
P2M0 = 0x00; P2M1 = 0x00; //将P2口全配置为准双向口模式
while(1) //死循环
{
P2 = 0x00; //点亮8颗LED
Delay_ms(500); //延时500毫秒
P2 = 0xff; //熄灭8颗LED
Delay_ms(500); //延时500毫秒
}
}
程序现象:LED以1000毫秒为频率闪烁
|
|