我设置了p34-p36延迟循环6000-9000毫秒
但是这玩意40秒才亮一次
#include <reg52.h>
#include <stdlib.h>
sbit EN = P1^6; //使能
sbit A1 = P1^7;
sbit B1 = P1^5;
sbit Key1 = P1^0;
sbit Key2 = P1^1; //按键
sbit Key3 = P1^2; //按键
sbit Key4 = P3^7; //按键!
sbit Key5 = P3^5; //按键!
sbit Key6 = P3^4; //按键!
sbit Key7 = P3^6; //按键!
void delay_ms(unsigned int time_ms) {
unsigned int i, j;
for (i = 0; i < time_ms; i++) {
for (j = 0; j < 1000; j++) {
// 指令延迟
}
}
}
unsigned int generate_random_delay() {
srand(TL0); // 使用定时器 TL0 的值作为种子
return (rand() % 3001) + 6000; // 在6000到9000毫秒之间生成随机延迟时间
}
void D_MS(void){
unsigned int i = 80; //速度 (快60-10000慢)(B-04螺距为3mm时600=200转/分钟,即每秒滑块走10mm)(B-05螺距为2mm时500=250转/分钟,即8.3mm/S)
for(; i > 0; i--) { //(B-05螺距为2mm时1200=100转/分钟,即3.3mm/S)(B-05螺距为2mm时2200=25转/分钟,即2mm/S)
delay_ms(1);
}
}
void RRM(void){
EN = 1;
A1 = 1;
D_MS();
B1 = 1;
D_MS();
A1 = 0;
D_MS();
B1 = 0;
D_MS();
EN = 0;
}
void LLM(void){
EN = 1;
B1 = 0;
D_MS();
A1 = 0;
D_MS();
B1 = 1;
D_MS();
A1 = 1;
D_MS();
EN = 0;
}
void main() {
A1 = 0;
B1 = 0;
EN = 0;
while(1) {
if(Key2 == 0) {
delay_ms(20); // 按键去抖动
if(Key2 == 0) {
RRM();
}
while(Key2 == 0) {} // 等待按键释放
}
if(Key3 == 0) {
delay_ms(20); // 按键去抖动
if(Key3 == 0) {
LLM();
}
while(Key3 == 0) {} // 等待按键释放
}
if(Key4 == 0) {
delay_ms(20); // 按键去抖动
if(Key4 == 0) {
RRM();
}
while(Key4 == 0) {} // 等待按键释放
}
if(Key5 == 0) {
delay_ms(20); // 按键去抖动
if(Key5 == 0) {
LLM();
}
while(Key5 == 0) {} // 等待按键释放
}
delay_ms(1);
Key7 = 0;
delay_ms(600);
Key7 = 1;
delay_ms(1);
Key6 = 0;
delay_ms(600);
Key6 = 1;
delay_ms(generate_random_delay());
}
}