使用STC8G1K17A单片机。
P3.0和P3.1为输入信号,
P3.2和P3.3为输出信号。
①、初始状态默认:P3.2为高电平,P3.3为低电平。
②、p3.0得到低电平信号:P3.2延时约0.2秒为低电平,再延时约0.2秒为高电平,再约0.3秒为低电平,再约0.5秒p3.2和p3.3都为高电平。
③、P3.1得到低电平信号:依照第②条规律依顺返回直到第①条的初始状态的p3.2高电平,p3.3低电平。
备注说明:延时具体时间还不能完全确定,到时可以让我自由修改时间。
stc单片机求写一段高低电平切换带延时的代码
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
10条回答 默认 最新
社区专家-Monster-XH 2023-11-02 20:10关注基于Monster 组和GPT的调写:
#include <stc8g.h> // 假设系统时钟为11.0592MHz #define FOSC 11059200L // 简单的微秒级延时函数,需要根据实际时钟频率调整 void DelayUs(unsigned int us) { unsigned int i = (FOSC / 1000000) * us / 12; while(i--); } // 毫秒级延时函数 void DelayMs(unsigned int ms) { while (ms--) { DelayUs(1000); } } void main() { // 初始化P3.2和P3.3为输出 P3M0 |= 0x0C; // 设置P3.2和P3.3为推挽输出模式 P3M1 &= ~0x0C; // 清除P3.2和P3.3的辅助功能 // 初始化P3.0和P3.1为输入 P3M0 &= ~0x03; // 清除P3.0和P3.1的推挽输出模式 P3M1 |= 0x03; // 设置P3.0和P3.1为高阻输入模式 // 初始状态 P3_2 = 1; // P3.2设置为高电平 P3_3 = 0; // P3.3设置为低电平 while(1) { // 检测P3.0输入 if (P3_0 == 0) { DelayMs(200); P3_2 = 0; DelayMs(200); P3_2 = 1; DelayMs(300); P3_2 = 0; DelayMs(500); P3_2 = 1; P3_3 = 1; // 此时P3.3也设置为高电平 } // 检测P3.1输入 if (P3_1 == 0) { DelayMs(500); P3_3 = 0; // P3.3回到低电平 P3_2 = 0; DelayMs(300); P3_2 = 1; DelayMs(200); P3_2 = 0; DelayMs(200); P3_2 = 1; // P3.2回到高电平,完成反向延时逻辑 } } }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录