在线客服
基于MSP430单片机的控制系统设计图书
人气:17

基于MSP430单片机的控制系统设计

针对MSP430单片机,应用实例丰富,设计方法典型。提供完整硬件电路图、详细程序及软件、开发板,注重分析、解决实际问题。
  • 所属分类:图书 >计算机/网络>计算机理论  
  • 作者:[陈中]、[陈冲]
  • 产品参数:
  • 丛书名:清华开发者书库
  • 国际刊号:9787302462187
  • 出版社:清华大学出版社
  • 出版时间:2017-06
  • 印刷时间:2017-04-01
  • 版次:1
  • 开本:32开
  • 页数:--
  • 纸张:胶版纸
  • 包装:平装-胶订
  • 套装:

内容简介

本书主要介绍MSP430F169单片机设计方法,在适当阐述工作原理基础上,重点介绍了硬件电路图和软件编程,对于重要程序,解释编程方法并说明其工作原理。 全书共分9章:第1章为基础篇,着重MSP430单片机工作原理以及IAR编译软件的应用;第2~9章为单片机设计,包括硬件系统设计和软件编程。全书叙述简洁、概念清晰,提供了大量应用实例,具备完整的硬件电路图和软件清单,涵盖了MSP430F169单片机设计的诸多内容。 本书适合作为高等院校电气、自动化专业高年级本科生、研究生的及高校教师教学参考书,还可以供相关工程技术人员参考。

编辑推荐

本书内容新颖独特,涵盖了MSP430单片机控制系统的诸多内容。通过大量实例,介绍MSP430F169单片机的工作原理及设计方法,使读者对基于单片机的设计有了充分的认识。对于每个课题,首先进行硬件电路设计,再进行软件编程,注重对硬件电路设计和软件编程中可能遇到的问题进行详细解释,并提供问题的解决方法,后通过实验证明设计的正确性。对于初学者可能遇到的困惑,作者深有体会,本书通过项目实例教学,起到解疑与启发的作用,并培养读者分析问题和解决问题的能力。

作者简介

作者简介:陈中,盐城工学院教师,连续多年指导学生进行毕业设计以及学科竞赛,拥有丰富的教学、实践经验。发表过多篇关于单片机的论文,反响良好。已出版《基于STC89C52单片机的控制系统设计》《基于AVR单片机的控制系统设计》等五部著作,即将出版《基于STM32单片机的控制系统设计》一书。陈冲,盐城工学院教师,多年从事教学科研工作。曾获学校青年教师竞赛三等奖1项,完成市级科研项目3项,获市科技进步二等奖1项。发表过多篇具有较高学术水平的论文,先后编著《电力拖动控制系统与MATLAB仿真》《运动控制系统综合实验教程》等多部教材。

目录

目录

第1章单片机原理概述及C编程语

1.1MSP430单片机概述

1.2初步认识MSP430单片机

1.3MSP430F169单片机最小系统

1.4C语言概述

1.4.1C的变量与数据类型

1.4.2C的运算符和表达式

1.5常用的I/O相关寄存器及操作

1.6C语言的程序结构

1.6.1顺序结构

1.6.2选择结构

1.6.3循环结构

1.7C语言的函数

1.8I/O端口常用操作C语言描述及常用C语言解析

1.9把51单片机的C语言转换成MSP430单片机的C语

1.10MSP430编译软件使用

1.11自制(头)文件方法

第2章单片机输出电路设计

2.1单片机控制系统设计概述

2.2液晶1602的显示

2.3液晶12864的显示

2.3.1液晶12864并行显示

2.3.2液晶12864串行显示

2.4LED点阵的显示

2.5液晶12232的显示

2.62.4in彩屏TFT的显示

2.6.12.4in彩屏TFT简介

2.6.2显存地址指针与窗口工作模式

2.6.3常用寄存器设置

第3章单片机输入电路设计

3.1键盘的输入电路

3.2带函数和小数点的计算器设计

3.3电子密码锁设计

3.4步进电机控制系统设计

3.5温度检测系统设计

3.6温湿度传感器的设计

3.7电子秤的设计

第4章定时器/计数器和外部中断系统设计

4.1MSP430单片机时钟源

4.2定时器/计数器概述

4.3TIMER_A工作模式

4.4定时器A模块捕获/比较工作原理

4.5定时器/计数器A与PWM

4.6外部中断的概述

4.7秒表设计

4.8红外遥控设计

4.9超声波测距系统设计

4.10定时器/计数器B

4.11定时器/计数器B与PWM

4.12直流电机控制系统设计

第5章串行通信

5.1串行通信概述

5.2USART相关寄存器

5.3串行通信协议

5.4串行通信系统设计

第6章I2C接口的应用

6.1I2C通信协议概述

6.2I2C模式操作

6.3I2C寄存器说明

6.4具有断电保护的电子密码锁设计

6.4.1AT24C02芯片简介

6.4.2具有断电保护的电子密码锁设计

第7章同步串行SPI接口

7.1同步串行SPI接口概述

7.2SPI相关寄存器

7.3SPI通信设计举例——无线模块通信设计

第8章AD与DA转换器

8.1AD转换器概述

8.2ADC12结构及特点

8.3ADC相关寄存器设置

8.4ADC12转换模式

8.5AD应用实例

8.6DA转换器概述

8.7DAC12结构与性能

8.8DAC相关寄存器设置

8.9DAC12的操作及设置和应用

第9章单片机综合系统设计

9.1两路温度检测系统设计

9.2红外遥控直流电机调速系统设计

9.3无线通信直流电机调速系统设计

9.4用VB语言编制串行助手界面控制步进电机调速系统设计

9.5门禁控制系统设计

9.6蓝牙控制系统设计

9.7彩屏和摄像头控制系统设计

参考文献

在线预览

第3章单片机输入电路设计

3.1键盘的输入电路

键盘是最常用的单片机输入电路,键盘主要分为两类,一类是独立式键盘,另一类是矩阵式键盘。如图31(a)所示为独立式键盘,虽然MSP430单片机工作电压为3.3V,其独立式键盘接的上拉电阻仍为4.8~10kΩ。其工作原理是将对应端口设置为输入并上拉,当键盘未按下,相应的端口为高电平,当键盘被按下时,相应的端口被拉为低电平。在程序中通过查询方法判断端口是否为低电平,如果是,就进入此键盘处理程序。独立式键盘适合键盘数量较少的场合,因为占用单片机的端口较多,比如8个键盘都采用独立式键盘,就需要占用单片机8个端口,而矩阵式键盘可以节省单片机端口。矩阵式键盘见图31(b)。

图31独立式键盘和矩阵式键盘

对于矩阵式键盘通常采用扫描法,设矩阵式键盘接单片机P1口相应的端口。其工作原理是,先将P1.7~P1.4口设置为输出,其中有一位设置为低电平,其余设置为高电平。例如将P1.4设置为输出且低电平,将P1.7~P1.5设置为输出且为高电平,将P1.3~P1.0口设置为输入并上拉,用C语言描述,即P1DIR=0xf0; P1OUT=0xef。 然后读取P1口数值,即检测P1电压,如果没有按钮按下,则P1口电压(数值)保持不变,其数值仍为0xef,如果在矩阵式键盘第4列有按键按下,则P1电压(数值)发生变化,不再为0xef,假定标志为“0”的键盘按下,按键造成短路,则单片机P1.0端口就变成低电平,用C语言描述,即“if((P1IN&0x01)==0)”条件成立,把这个按键取键值为0(keyvalue=0); 如果是标志为“4”的键盘按下,按键造成短路,则单片机P1.1端口就变成低电平; 即“if((P1IN&0x02)==0)”条件成立,把这个按键取键值为4(keyvalue=4); 同理可以确定标志为“8”或“12”的键盘。然后再将P1.5设置为输出且低电平,P1.7、P1.6、P1.4设置为输出且高电平,将P1.3~P1.0口设置为输入并上拉,用同样的方法就能确定第3列键盘哪个键盘按下。同理就可以确定第2列、第1列哪个键盘被按下。对于矩阵式键盘,一般情况下,用9个键盘代表0~9的数值,称为数值键,而大于9的数值键盘可以代表其他功能,称为功能键。对于键盘操作还有一个重要问题,即键抖动现象,简单说来,虽然只按一下按键然后松开,但由于单片机运行程序速度很快,它能多次运行键盘程序,往往会认为按了多次键盘。对于消除键盘抖动,有硬件消抖和软件消抖,最常用的是软件消抖,有多种方法。其中一种方法是在程序中检测到按键按下后,延迟一段时间,在按键处理程序结束后,再延时一段时间,实践表明能够很好地解决键盘抖动问题。

3.2带函数和小数点的计算器设计设计要求有带函数和小数点的计算器设计,设计采用1602作为显示。此设计有一个小数点的位置问题,如果小数点位置是变化的,比如显示3.4或3.48,那么小数点就发生变化,称之为“浮动”小数点; 如果小数点的位置保持不变,比如显示3.40或3.48,称之为“固定”小数点。市面上的计算器都是采用“浮动”小数点,编程复杂得多,本次设计采用“浮动”小数点方法。第二个设计特点就是具有函数运算,把功能键复用,另加一个独立键,当按下独立键盘S1时,表明键盘当作了sina、cos、tang等功能用。其设计思路是,独立键S1未按下时,由于接上拉电阻,P3.0设置为输入,则P3.0输入为高电平,就运行四则运算程序; 独立键S1按下时,则P3.0输入为低电平,就运行函数程序了。按下复位键盘后,重新开始计算。当出现被除数为零时,液晶显示“error input”。函数的运算,好的方法是加个头文件“math.h”,该头文件包含sina、cos、tang、ctang函数等运算。带函数和小数点的计算器硬件电路图如图32所示。

图32带函数和小数点的计算器设计电路图

采用8MHz晶振作为时钟源。P4口接矩阵式键盘,P3.0接独立式键盘。程序清单如下:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define set_rs P1OUT|=BIT3

#define clr_rs P1OUT&=~BIT3

#define set_lcden P1OUT|=BIT5

#define clr_lcden P1OUT&=~BIT5

#define dataout P2DIR=0XFF

#define dataport P2OUT

#define anjian (P3IN&BIT0)

uchar keyvalue;

uchar wei0=0,fuhao=0,flag1=0,flag2=0;

uchar tab1[]={"sin"};

uchar tab2[]={"cos"};

uchar tab3[]={"tan"};

uchar tab4[]={"="};

uchar dis_flag=0,time_1s_ok;

uint num=0;

uint time=0;

uchar dis_flag;

uint i,j;

int t,a,shu,k;

int jd,jd1,result,result1;

uint time_counter;

void int_clk()

{

unsigned char i;

BCSCTL1&=~XT2OFF; //打开XT振荡器

BCSCTL2|=SELM1 SELS; //MCLK为8MHz,SMCLK为1MHz

do

{

IFG1&=~OFIFG; //清除振荡器错误标志

for(i=0; i

_NOP(); //延时等待

}

while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待

IFG1&=~OFIFG;

}

void delay5ms(void)

{

unsigned int i=40000;

while (i != 0)

{

i--;

}

}

void write_com(uchar com) //1602写命令

{

P1DIR|=BIT3 ;

P1DIR|=BIT5 ;

P2DIR=0xff;

clr_rs;

clr_lcden;

P2OUT=com;

delay5ms( );

delay5ms( );

set_lcden;

delay5ms( );

clr_lcden;

}

void write_date(uchar date) //1602写数据

{

P1DIR|=BIT3 ;

P1DIR|=BIT5 ;

P2DIR=0xff;

set_rs;

clr_lcden;

P2OUT=date;

delay5ms( );

delay5ms( );

set_lcden;

delay5ms( );

clr_lcden;

}

void disp(unsigned char s

{

while(s > 0

{

write_date(s);

s ;

}

}

void lcddelay

{

unsigned int j;

for(j=400; j>0; j--);

}

void lcd_pos(unsigned char x,unsigned char y

{

dataport=0x80 0x40x y;

P1DIR|=BIT3 ;

P1DIR|=BIT5 ;

P2DIR=0xff;

clr_rs;

clr_lcden;

delay5ms( );

delay5ms( );

set_lcden;

delay5ms( );

clr_lcden;

}

void init( )

{

clr_lcden;

write_com(0x38);

delay5ms( );

write_com(0x0c);

delay5ms( );

write_com(0x06);

delay5ms( );

write_com(0x01);

}

void display(unsigned long int num

{

uchar dis_flag=0;

uchar table[7];

if(num0

{

dis_flag=1;

table[0]=num%10 '0';

}

else if(num9)

{

dis_flag=2;

table[0]=num/10 '0';

table[1]=num%10 '0';

}

else if(num99)

{

dis_flag=3;

table[0]=num/100 '0';

table[1]=num/10%10 '0';

table[2]=num%10 '0';

}

else if(num999)

{

dis_flag=4;

table[0]=num/1000 '0';

table[1]=num/10 '0';

table[2]=num/10%10 '0';

table[3]=num%10 '0';

}

else if(num9999)

{

dis_flag=5;

table[0]=num/10000 '0';

table[1]=num/1000%10 '0';

table[2]=num/10 '0';

table[3]=num/10%10 '0';

table[4]=num%10 '0';

}

else if(num99999)

{

dis_flag=6;

table[0]=num/100000 '0';

table[1]=num/10000%10 '0';

table[2]=num/1000%10 '0';

table[3]=num/10 '0';

table[4]=num/10%10 '0';

table[5]=num%10 '0';

}

else if(num999999)

{

dis_flag=7;

table[0]=num/1000000 '0';

table[1]=num/100000%10 '0';

table[2]=num/10000%10 '0';

table[3]=num/1000%10 '0';

table[4]=num/10 '0';

table[5]=num/10%10 '0';

table[6]=num%10 '0';

}

if((fuhao==4)&&(flag1==1

{

if(dis_flag

{

write_date('0');

delay5ms();

write_date('.');

delay5ms();

for(i=0; i

{

write_date('0');

delay5ms();

}

}

}

for(i=0; i

{

if((fuhao==1)||(fuhao==2

{

if(i==dis_flag-wei0

{

write_date('.');

delay5ms();

}

}

if(fuhao==3

{

if(i==dis_flag-wei02

{

write_date('.');

delay5ms();

}

}

if(fuhao==4

{

if(dis_flag>3

{

if(i==dis_flag-3

{

write_date('.');

delay5ms();

}

}

}

write_date(table[i]);

delay5ms();

}

}

uchar keyscan(void

{

P4OUT=0xef;

if((P4IN&0x0f)!=0x0f

{

delay5ms();

if((P4IN&0x0f)!=0x0f

{

if((P4IN&0x01)==0

keyvalue=1;

if((P4IN&0x02)==0

keyvalue=2;

if((P4IN&0x04)==0

keyvalue=3;

if((P4IN&0x08)==0

keyvalue=4;

while((P4IN&0x0f)!=0x0f);

}

}

P4OUT=0xdf;

if((P4IN&0x0f)!=0x0f

{

delay5ms();

if((P4IN&0x0f)!=0x0f

{

if((P4IN&0x01)==0

keyvalue=5;

if((P4IN&0x02)==0

keyvalue=6;

if((P4IN&0x04)==0

keyvalue=7;

if((P4IN&0x08)==0

keyvalue=8;

while((P4IN&0x0f)!=0x0f);

}

}

P4OUT=0xbf;

if((P4IN&0x0f)!=0x0f

{

delay5ms();

if((P4IN&0x0f)!=0x0f

网友评论(不代表本站观点)

来自匿名用**的评论:

这本书有很多的印刷错误,不过里面的知识点归纳还行,

2017-09-20 14:02:23

免责声明

更多出版社