2024-12-20 10:18
54 次阅读|
0 个评论
//```c #include "..\..\comm\AI8051U.h" // 包含头文件,定义了硬件寄存器和常量 #include "stdio.h" // 标准输入输出库 #include "intrins.h" // 内联汇编函数库 typedef unsigned char u8; // 定义无符号8位整型别名 typedef unsigned int u16; // 定义无符号16位整型别名 typedef unsigned long u32; // 定义无符号32位长整型别名 #define MAIN_Fosc 24000000UL // 主频定义为24MHz u8 code ledNum ; // 输出当前LED状态 ledIndex++; // LED索引递增 7) // 如果索引超过7,重置为0 { ledIndex = 0; } = 20) // 如果毫秒计数达到20次(即2秒) { msecond = 0; // 重置毫秒计数 P0 = 0xff; // 关闭所有LED PD = 1; // 进入睡眠模式 _nop_(); // 空操作,用于延时 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } } } void SetWakeUpTime(u16 SetTime) { SetTime = (u16)((32768UL * (u32)SetTime) / 16000); // 计算唤醒时间,单位是32.768kHz的周期数 0) SetTime--; // 如果计算结果大于0,减1以补偿误差 WKTCL = (u8)SetTime; // 设置唤醒时间的低字节 8) | 0x80; // 设置唤醒时间的高字节,并设置最高位以启用唤醒功能 } void delay_ms(u8 ms) { u16 i; do{ i = MAIN_Fosc / 6000; // 根据主频计算循环次数,实现大约1毫秒的延时 while(--i); // 循环等待 }while(--ms); // 递减毫秒计数,直到为0 } //```