msp430单片机开发笔记

msp430是一块主打低功耗的芯片,相比51系列单片机性能好得多,片内资源也非常丰富,缺点是价格比较贵。而如果不在意功耗的话,stm32明显是更好的选择。

我用的是某宝上的DM430—L最小系统版。这块板的资料详尽,针对初学者有视频教程,入门非常方便。下面的代码需要依赖Config.h头文件。

控制15BY2二相四线步进电机

这是一个二相四线的电机,我用4拍的方式进行控制,具体电平如图。

开数组存储4拍的电平,通过传入参数d判断正转或反转。其中position存储着全局的电机位置,由于我的电机转速比是1:1000,所以一圈是20000步。最后控制电平在P3.0~P3.3输出接电机驱动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int position = 0;
uchar step_up[4] = {0x09,0x0A,0x06,0x05}; //正转
uchar step_down[4] = {0x05,0x06,0x0A,0x09}; //反转
void motor_step(uchar d){
if (d){
for(uchar i = 0; i < 4; i++){
P3OUT = step_up[i];
delay_ms(1);
}
position++;
if(position == 20000){
position = 0;
}
P3OUT = 0x00;
}
else{
for(char i = 0; i < 4 ; i++){
P3OUT = step_down[i];
delay_ms(1);
}
position--;
if(position < 0){
position = 19999;
}
P3OUT = 0x00;
}

在1602LCD上输出一个整数

DM430的例程中只给了输出单个字符和以及输出字符串的函数,如果要输出整形则需要转换。递归分拆整数至单个字符输出,只需要3行代码:

1
2
3
4
5
6
7
8
9
10
11
//***********************************************************************
// 显示屏整形写入函数
//***********************************************************************

void LCD_write_int(unsigned char x,unsigned char y,unsigned int data)
{
if(data >= 10){
LCD_write_int(x - 1, y, data / 10);
}
LCD_write_char(x, y, data % 10 + 0x30);
}

这里有一个不同的地方是函数的x参数需要传入期望输出个位数的位置,而不是整形最高位的位置。当然,也可以用sprintf将整形转换至字符串,这个方法需要包含stdio.h头文件。

-------------本文结束 感谢阅读-------------