void SetpMotorRun(unsigned char cnt) { unsigned char i,j; unsigned char buf[8] = {0xf6, 0xf7, 0xf3, 0xfb, 0xf9, 0xfd, 0xfc, 0xfe}; for (i = 0; i < cnt; i++) { for (j = 0; j < 8; j++) { GPIO_Write(GPIOE, buf[j]); Delay_ms(10); } } }
时间: 2023-12-06 08:41:39 浏览: 74
这段代码是控制步进电机旋转的函数,函数中的参数cnt表示旋转的步数。首先定义了一个长度为8的数组buf,数组中的元素对应步进电机每个步进的状态。在循环中,先循环步数cnt次,然后在每次旋转中循环8次,将buf数组中的每个元素依次输出到GPIOE引脚上,控制步进电机旋转。每次输出后,函数等待10ms,以保证电机旋转到位。
相关问题
#include <reg51.h> sbit K1=P3^1; unsigned char cnt; void key_proc(); void disp_proc(); unsigned char code disp_code[]={0x3f,0x06,0x5b,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; unsigned int j; unsigned char disp_buf[8]; unsigned char i,tmp; void delay(unsigned char n) { for(i=0;i<n;i++) { for(j=0;j<100;j++); } } void main(void) { while(1) { key_proc(); disp_proc(); } } void key_proc(void) { if(K1==0) { delay(10); if(K1==0) { cnt++; cnt=cnt%10; } while(K1==0); } } void disp_proc(void) { P2=0X1C; P0=disp_code[cnt]; delay(1); P2=0X18; P0=disp_code[cnt]; delay(1); P2=0X14; P0=disp_code[cnt]; delay(1); P2=0X10; P0=disp_code[cnt]; delay(1); } 如何同时亮
如果你想让所有数码管同时亮,可以将disp_proc函数修改如下:
```
void disp_proc(void) {
for(i=0; i<4; i++) {
P2 = 0x1C >> i;
P0 = disp_code[cnt];
delay(1);
}
}
```
此时,程序会循环控制P2口的输出,使得所有数码管段选都被选中,并且P0口输出的数字相同,从而实现所有数码管同时显示的效果。
void USART1_Pro(void) { unsigned char buf1[32]; static unsigned char Cnt; if(++Cnt > 20) { Cnt = 0; sprintf(buf1,"H:%d,%d,%d,%d,%dE\r\n",Light_Value,DHT_BUFF.Hum,DHT_BUFF.Temp,Water_Value,CO2_Value); UART1_Send_String(buf1); } if(UART0_Rx_Flag) { UART0_Rx_Flag = 0; // UART0_Send_Nbyte(UART0_Rxd); switch(UART0_Rxd[5]) { case 'A': memset(UART0_Rxd, 0, sizeof UART0_Rxd); //P0 ^= 1<<0; KEY = 1; break; case 'B': memset(UART0_Rxd, 0, sizeof UART0_Rxd); //P0 ^= 1<<1; KEY = 2; break; case 'C': memset(UART0_Rxd, 0, sizeof UART0_Rxd); //P0 ^= 1<<2; KEY = 3; break; case 'D': memset(UART0_Rxd, 0, sizeof UART0_Rxd); //P0 ^= 1<<3; KEY = 4; break; case 'E': memset(UART0_Rxd, 0, sizeof UART0_Rxd); //P0 ^= 1<<3; KEY = 5; break; default : break; } memset(UART0_Rxd, 0, sizeof UART0_Rxd); UART0_Rxd_Index = 0; UART0_Rx_Flag = 0; } }这些代码分别是什么意思,以及UART0_Rxd[5]里面的参数5是什么意思,
这段代码是一个函数,名为USART1_Pro,它包含了两个if语句块。
第一个if语句块是一个计数器,每次函数被调用时Cnt自增,当Cnt大于20时,将Light_Value,DHT_BUFF.Hum,DHT_BUFF.Temp,Water_Value和CO2_Value这些变量的值按照一定格式组装成一个字符串buf1,并通过UART1发送出去。
第二个if语句块判断了一个标志位UART0_Rx_Flag,如果标志位被设置,则对UART0_Rxd[5]进行判断。UART0_Rxd是一个字符数组,[5]表示数组的第6个元素,即判断了接收到的数据的第6个字节。根据不同的字节,执行不同的操作(例如将P0的某个引脚翻转或者更新KEY的值)。最后将UART0_Rxd数组清零,将UART0_Rx_Flag标志位清零,以便下一次接收。
阅读全文