سلام دوستان . من یه کد دارم برای استپر موتور(خودم ننوشتم از کسی گرفتم قبلا که الان دسترسی بهشون ندارم) بعضی قسمتاشو متوجه نمشم میشه کمکم کنید.
1- nt چیه ؟
2- اون تیکه اخر که میاد جهت رو مشخص میکنه این قسمتشو نمیفهمم.
کد:
if (stepMotor == 0x20) stepMotor = 0x2; }
else
{
stepMotor = stepMotor >> 1;
if (stepMotor == 0x1) stepMotor = 0x10;
}
3- آیا کتابخانه کیبورد قابلیت دریافت عدد دورقمی رو داره ؟
کد:
#include "lpc17xx.h"#include "ARM_delay.h"
#include "ARM_keypad.h"
/*--------------------------------------------------*/
/* Char LCD definition */
#define LCD_LPC1768
#define LCD_PORT_0
#define LCD_RS 8
#define LCD_RW 9
#define LCD_E 10
#define LCD_DB4 11
#define LCD_DB5 15
#define LCD_DB6 16
#define LCD_DB7 17
#include "lcd.h"
/*------------------------------------------------------*/
// char ch1[] = { 'S', 'h', 'a', 'h', 'e', 'd', 'U', 'n', 'i', 'v', 'e', 'r', 's', 'i', 't', 'y' };
// char ch2[] = { 'M', 'i', 'c', 'r', 'o', 'p', 'r', 'o', 'c', 'e', 's', 's', 'o', 'r', 'l', 'a', 'b', ' ', 'm', 'a', 'n', 'u', 'a', 'l' };
// char ch3[] = { '2', '0', '1', '6', '-', 'a', 'p', 'r', 'i', 'l', '-', '1', '0' };
char s[16];
int speed,ENTERflag=0, dir, i, stepMotor, k,nt=0;
int main(){
lcd_init();
lcd_clear();
LPC_GPIO0->FIODIR |= 0xFFF;
speed = 0;
dir = 0x2;
stepMotor = 0x100;
i = 0;
while (1){
sprintf(s,"nt: ");
lcd_gotoxy(1, 1);
lcd_putsf(s);
while ((ENTERflag!=1) || (nt == 0))//e:enter s:set r:reset o:stop a:start m:mode
{
i = keypad();
if(i=='e')
ENTERflag=1;
if((i!=20)&&(i<10))
nt = i + (nt*10);
if (i == 'r')
nt = 0;
lcd_gotoxy(2,1);
sprintf(s, "nt= %d ", nt);
lcd_putsf(s);
while (keypad() != 20);
}
nt=nt*22;
ENTERflag=0;
lcd_clear();
sprintf(s,"speed 1,2,3 : ");
lcd_gotoxy(1, 1);
lcd_putsf(s);
while ((ENTERflag!=1) || (speed == 0))//e:enter s:set r:reset o:stop a:start m:mode
{
i = keypad();
if(i=='e')
ENTERflag=1;
if((i!=20)&&(i<4))
speed = i;
if (i == 'r')
speed = 0;
if ((speed == 1) || (speed == 2) || (speed == 3) || (speed == 0))
{
lcd_gotoxy(2,1);
sprintf(s, "speed= %d ", speed);
// for (k = 0; k < 16; k++)
// {
// lcd_putchar(s[k]);
// delay_m(100);
// }
lcd_putsf(s);
while (keypad() != 20);
}
}
ENTERflag=0;
lcd_clear();
lcd_gotoxy(1, 1);
while (keypad() == 'e');
sprintf(s, "DIRECTION 1,2 ");
// for (k = 0; k < 16; k++)
// {
// lcd_putchar(s[k]);
// delay_m(100);
// }
lcd_putsf(s);
while ((ENTERflag!=1) ||(dir == 0))
{
i = keypad();
if(i=='e')
ENTERflag=1;
if((i!=20)&&(i<3))
dir = i;
if (i == 'r')
dir = 0;
if ((dir == 1) || (dir == 2)|| (dir == 0))
{
lcd_gotoxy(2, 1);
sprintf(s, "dir=%d ", dir);
// for (k = 0; k < 16; k++)
// {
// lcd_putchar(s[k]);
// delay_m(100);
// }
lcd_putsf(s);
while (keypad() != 20);
}
}
lcd_clear();
lcd_gotoxy(2, 1);
sprintf(s, "start... ");
lcd_putsf(s);
ENTERflag=0;
while (keypad() == 'e');
LPC_GPIO0->FIOSET = 0xff;
while ((keypad() != 'o')&&(nt!=0))
{
if (dir == 1)
{
stepMotor = stepMotor << 1;
if (stepMotor == 0x20) stepMotor = 0x2;
}
else
{
stepMotor = stepMotor >> 1;
if (stepMotor == 0x1) stepMotor = 0x10;
}
LPC_GPIO0->FIOCLR = stepMotor;
delay_m((speed * 250));
LPC_GPIO0->FIOSET = stepMotor;
nt=nt-1;
}
speed = 0;
lcd_clear();
}
///////////////////////////////////////////
//}
}
کتابخانه کی پد
کد:
#ifndef __ARM_keypad_h#define __ARM_keypad_h
/* row & column for keypad */
#define row1 0
#define row2 1
#define row3 2
#define row4 3
#define Column1 4
#define Column2 5
#define Column3 6
#define Column4 7
#define keypad_DPIO LPC_GPIO2
/* code for kaypad */
//const unsigned char keypad_codes[4][4] = { { 1, 2, 3, 10 }, { 4, 5, 6, 11 }, { 7, 8, 9, 12 }, { 13, 0, 14, 15 } };
//const unsigned char keypad_codes[4][4] = { { 1, 2, 3, 's' }, { 4, 5, 6, 'r' }, { 7, 8, 9, 'm'}, { 'o', 0, 'a', 'e' } };
//const unsigned char keypad_codes[4][4] = { { 7, 8 ,9 ,'/'}, { 4, 5, 6, '*'}, { 1, 2, 3, '-'}, {'c', 0, '=','+'} };
void keypad_init(void){
keypad_DPIO->FIODIR = (1 << row1) | (1 << row2) | (1 << row3) | (1 << row4); //set row to output
keypad_DPIO->FIODIR &= ~((1 << Column1) | (1 << Column2) | (1 << Column3) | (1 << Column4)); //set columns to input
}
/* priori keypad function */
// int keypad1(void)
// {
// int row, num_keypad;
// unsigned int data;
// keypad_init();
// for (row = 0; row < 4; row++)
// {
// keypad_DPIO->FIOSET = (1 << row1) | (1 << row2) | (1 << row3) | (1 << row4);
// keypad_DPIO->FIOCLR = (1 << (row1 + row)); //row
// delay_m(100);
// data = ((keypad_DPIO->FIOPIN) >> Column1) & 0xf;
// if (data == 0xf){ // 1111
// num_keypad = 20;
// }
// if (data == 0xe){ //1110 1 ; 4 ; 7 ; 13
// num_keypad = keypad_codes[row][0]; break;
// }
// if (data == 0xd){ //1101 2 ; 5 ; 8 ; 0
// num_keypad = keypad_codes[row][1]; break;
// }
// if (data == 0xb){ // 1011 3 ; 6 ; 9 ; 14
// num_keypad = keypad_codes[row][2]; break;
// }
// if (data == 0x7){ // 0111 10 ; 11 ; 12 ; 15
// num_keypad = keypad_codes[row][3]; break;
// }
// }
// return num_keypad;
// }
///////////////////////////////////////
int keypad1(void){
char keyCodes[16]={1,2,3,'s',4,5,6,'r',7,8,9,'m','o',0,'a','e'};
int i,j;
keypad_init();
for(i=0;i<4;i++){
keypad_DPIO->FIOSET=0XF<< row1;
keypad_DPIO->FIOCLR=1<<( row1 +i);
delay_m(200);
if(((keypad_DPIO->FIOPIN)&(0XF<< Column1 ))!=(0XF<< Column1)){
for(j=0;j<4;j++){
if(((keypad_DPIO->FIOPIN)&(1<< (Column1 + j)))!=(1<< (Column1 +j))){
return keyCodes[(i*4+j)];
}
}
}
}
return 20;
}