历史上的今天
今天是:2025年01月30日(星期四)
2018年01月30日 | MSP430单片机步进电机程序
2018-01-30 来源:eefocus
MSP430 单片机 步进电机程序
#include "msp430x22x4.h"
#define uchar unsigned char
#define uint unsigned int
uchar i=0;
// 扫描式4x4键盘
#define keyin (P2IN&0x0F)
//数码管值0~f
unsigned char key[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
unsigned char hang[]={0xef,0xdf,0xbf,0x7f};// 选中行码
unsigned char lie[]={0x0e,0x0d,0x0b,0x07};//相应列值
unsigned char save,a,b;
void DELAY(uint aj)
{
while(aj--);
}
void init_port(void)
{
P1SEL |=BIT2+BIT3; //TA1,TA2输出功能
P1DIR |=BIT2+BIT3;
P2DIR=0XF0;
P2SEL=0;
P2OUT=0;
P2IE=0X0F;
P2IES=0XF0;
P2IFG=0;
P3DIR=0XFF; //p3.0--A P3.1---B P3.2---C P3.3---D
P3SEL=0X00;
P3OUT=0XF0;
_EINT();
return;
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD; //关看门狗
BCSCTL1 =CALBC1_1MHz; //设定DCO为1MHZ
DCOCTL =CALBC1_1MHZ;
init_port();
while(1)
{
while(i==1) // 单四拍
{
P3OUT=0XF1;//11110100
DELAY(390);
P3OUT=0XF2;//11110010
DELAY(390);
P3OUT=0XF4;//11110001
DELAY(390);
P3OUT=0XF8;//11111000
DELAY(390);
}
while(i==2)//单四拍反转
{
P3OUT=0X08;//D
DELAY(390);
P3OUT=0X04;//C
DELAY(390);
P3OUT=0X02;//B
DELAY(390);
P3OUT=0X01;//A
DELAY(390);
}
while(i==3) //双四拍
{
P3OUT=0X03;//AB
DELAY(390);
P3OUT=0X06;//BC
DELAY(390);
P3OUT=0X0c;//CD
DELAY(390);
P3OUT=0X09;//DA
DELAY(390);
}
while(i==4) //双四拍反转
{
P3OUT=0X09;//DA
DELAY(390);
P3OUT=0X0c;//CD
DELAY(390);
P3OUT=0X06;//BC
DELAY(390);
P3OUT=0X03;//AB
DELAY(390);
}
while(i==5)//单八拍
{
P3OUT=0X01;//A
DELAY(390);
P3OUT=0X03;//AB
DELAY(390);
P3OUT=0X02;//B
DELAY(390);
P3OUT=0X06;//BC
DELAY(390);
P3OUT=0X04;//C
DELAY(390);
P3OUT=0X0c;//CD
DELAY(390);
P3OUT=0X08;//D
DELAY(390);
P3OUT=0X09;//DA
DELAY(390);
}
while(i==6)//单八拍反转
{
P3OUT=0X09;//DA
DELAY(390);
P3OUT=0X08;//D
DELAY(390);
P3OUT=0X0c;//CD
DELAY(390);
P3OUT=0X04;//C
DELAY(390);
P3OUT=0X06;//BC
DELAY(390);
P3OUT=0X02;//B
DELAY(390);
P3OUT=0X03;//AB
DELAY(390);
P3OUT=0X01;//A
DELAY(390);
}
while(i==7)//双八拍
{
P3OUT=0X03;//AB
DELAY(390);
P3OUT=0X07;//ABC
DELAY(390);
P3OUT=0X06;//BC
DELAY(390);
P3OUT=0X0E;//BCD
DELAY(390);
P3OUT=0X0c;//CD
DELAY(390);
P3OUT=0X0D;//CDA
DELAY(390);
P3OUT=0X09;//DA
DELAY(390);
P3OUT=0X0B;//DAB
DELAY(390);
}
while(i==8)//双八拍 反转
{
P3OUT=0X0B;//DAB
DELAY(390);
P3OUT=0X09;//DA
DELAY(390);
P3OUT=0X0D;//CDA
DELAY(390);
P3OUT=0X0c;//CD
DELAY(390);
P3OUT=0X0E;//BCD
DELAY(390);
P3OUT=0X06;//BC
DELAY(390);
P3OUT=0X07;//ABC
DELAY(390);
P3OUT=0X03;//AB
DELAY(390);
}
}
}
void keyprocess(void)
{
for(a=0;a<4;a++)
{
P2OUT=hang[a]; //逐行扫描
if(keyin != 0x0f)break;//检测该行有键按下则退出循环
}
for(b=0;b<4;b++) //逐列扫描
{
if(keyin==lie[b])
{
save=key[a][b];break; //检测该列有键按下则退出循环
}
}
switch(save)
{
case 1:i=1;break;
case 2:i=2;break;
case 3:i=3;break;
case 4:i=4;break;
case 5:i=5;break;
case 6:i=6;break;
case 7:i=7;break;
case 8:i=8;break;
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:break;
}
return;
}
#pragma vector = PORT2_VECTOR
__interrupt void PORT_ISR(void)
{
keyprocess();
P2IFG=0;
P2OUT = 0;
return;
}
下一篇:MSP430超声波测距
史海拾趣
|
在WINCE 6.0系统中,运行.NET编写的C#应用程序.发现Label控件的的字很多时候需要换行时候,英文可以自动换行,而中文只能显示一行字,其它字被截断,不能显示.采用容器进行FILL仍然不行,请高手帮忙解决!… 查看全部问答> |
|
求购vxworks 6.6 Bsp for atmel sam9260 那位手头有vxworks 6.6 Bsp for atmel sam9260的?并能提供技术支持的,留个联系方式好吧。谢谢… 查看全部问答> |
|
wince s3c2440使用COM1读写都很正常,但是COM3、COM4不行 COM3、COM4是可以打开的。但是发送数据异常,没有看到数据输出。一开始是死在了WriteFile上面,后来我加入了超时间隔等参数,可以返回,但是写数据就失败了。有谁遇到过这样的问题吗?… 查看全部问答> |
|
C:\\Documents and Settings\\Administrator>SET _WINCEROOT=C:\\WINCE600 C:\\Documents and Settings\\Administrator>CD %_WINCEROOT%\\PUBLIC\\COMMON\\OAK\\MISC C:\\WINCE600\\PUBLIC\\COMMON\\OAK\\MISC>WINCE.BAT _WINCEDRIVE=C: C:\\WI ...… 查看全部问答> |
|
NMAKE : U1073: don't know how to make WinCE5.0 生成系统时出现: BUILD: [01:0000000913:ERRORE] NMAKE : U1073: don\'t know how to make \'D:\\WINCE500\\platform\\common\\lib\\ARMV4I\\retail\\oal_memory_s3c2440a.lib\' BUILD: [01:0000000915:ERRORE] NMAKE.EXE ...… 查看全部问答> |
|
现在有五个数,FF C0 00 C0 FF,在第一数(FF)的下降沿开始进行计时,到第五个下降 沿停止,现在想判断从开始计时到停止计时,所花的时间是不是小于5ms,现在有计时芯 片,示波器,不知道怎么办,怎么才能知道发生的时间… 查看全部问答> |
|
有没有人懂得怎么样用fpga开发板用vhdl语言做一个48进32出的fifo?有相关资料也行!大家帮帮忙咯!感激不尽! [ 本帖最后由 hefeifei1990 于 2010-12-22 16:14 编辑 ]… 查看全部问答> |
|
如题,一般FPGA都要使用外带的FLASH芯片存放程序,为节约成本不知道可不可以使用同一块板上的DSP内部FLASH存放程序,各位高人都来讨论讨论… 查看全部问答> |
|
帮忙看下我写这个程序有什么不对的地方 现在的情况是下载到单片机上就第一个数码管显示一个零,然后就停在那里 单片机原理图在这里http://wenku.baidu.com/view/0fc085f5f90f76c661371a1e.html #include #define uint unsigned int #defin ...… 查看全部问答> |




