无线餐厅点菜机 - 图文(2)

2019-05-24 17:12

图4-2-4

3.热释电:

为了更优化的管理终端电源,我们使用了热释电对外界信息进行采集,其核心为BIS0001和热释电传感器组成,原理图祥见(图4-2-5)

图2-4-5

3. 无线收发:

根据本设计速度的要求,我们选用了315M的无线传输模块BT1000,巧妙的使用串行通信协议,以减小软件实现难度,其传输速度可达6000BPS、射频输出功率为10MW、接受灵敏度-106DBM、误码率<0.001、传输距离最大300M。

原理图见(图4-2-6)

图4-2-6

2 上位机连接模块(以下称连接模块):

由于本设计的无线模块借用了串行通信协议,而连接模块控制核心使用的MICROCHIP公司的PIC16F877单片机只有一组UART,因此我们使用了模拟串行通信的方案,使用PIC16F877的B2和B3作模拟串口的RX和TX(输入和输出)PL-2303为核心的UART转USB,与PC机通信,以便于数据传输和为连接模块供电,原理图见(图4-2-7)

图4-2-7

3 上位机:

上位机人机界面采用LabVIEW实现,(实现方法请参阅上位机软件实现)

4 电源: 1

终端电源:终端电源使用电池供电,经7805和CX1117电压变换滤波得到5.0V

和3.3V两组电压,分别为外围模块和

7805 MSP430F1611供电,具体电路与各元件连接方式如图(图4-2-8)

图4-2-8

2

连接模块电源:根据连接模块功耗要求小于500MA的要求,我们选择使

用USB电源供电。

5. 系统软件设计

本系统的MCU使用了TI 公司的超低功耗单片机MSP430F1611,在软件设计中,充分利用了该MCU的低功耗特点。主程序中仅完成了系统的初始化和开始的显示部分,然后就进入最低功耗模式(LPM4)。其他功能模块都在中断服务子程序中完成。当产生中断时,MCU被唤醒并执行相应的中断服务子程序,从中断子程序返回后,系统又进入到LPM4模式,整个程序的设计使系统在绝大多数时间都处于最低功耗状态。

整个程序用全部用C 语言编写,使用模块化的设计方法,把各个模块相关的程序放在一个文件中,便于分块调试和管理,缩短了调试周期,增加了程序的可移植性和可剪裁性。

整个程序结构如下:

Menu.c Menu.c为主函数,它包含了header.h、

uart.c、lcd.c、list.c、key.c这些功能模块文件。在

Header.h Uart.c Lcd.c List.c Key.c menu.c文件中主要完成MCU和各模块的初始化,并打开中断并进入低功耗模式:

WDTCTL = WDTPW + WDTHOLD; _DINT(); //关中断 Init_CLK(); //时钟初始化 Init_lcd(); //LCD初始化 Init_interrupt(); //中断初始化

程序结构图 _BIS_SR(LPM4_bits+GIE);

//打开全局中断

//进入最低功耗模式

在header.h文件中,对数据类型进行了重定义,不仅简化了程序的书写,而且

提高了程序在不同编译环境下的可移植性: typedef unsigned char uchar ; //定义无符号字符型为uchar

typedef unsigned int uint ; //定义无符号整型为uint

全局变量和延时函数也在这里做了定义。而且,考虑到一条记录包含有编号、菜名、单价三个成员,于是使用结构体进行了定义:

struct menu //定义一个结构体类型 struct menu { uchar Num[2]; //给每个菜定义一个唯一标识符 uchar Name[14]; //菜名 uchar Price[8]; //单价

};

Uart.c程序中,对系统时钟、UART1进行了初始化,由于UART波特率对时序的严格要求,必须对系统时钟进行正确的初始化,否则计算的波特率将与实际不符而导致数据无法正确传输:

BCSCTL1 = 0X04; BCSCTL2 = 0X00; BCSCTL2 += SELM1; BCSCTL2 += SELS;

//将寄存器的内容清零 //XT2震荡器开启 //LFTX1工作在低频模式 //ACLK的分频因子为1 //将寄存器的内容清零 //MCLK的时钟源为TX2CLK,分频因子为1 //SMCLK的时钟源为TX2CLK,分频因子为1

MSP430的波特率发生器使用一个分频计数器和一个调整器,分频因子N 由送到分频计数器的时钟(BRCLK)频率和所需要的波特率来决定:

N=BRCLK/(UBR+(M7+M6+M5+M4+M3+M2+M1+M0))/8

根据以上公式及所需要的波特率(9600)可以得到分频计数器和调整器的值:

U1TCTL = SSEL1; //波特率发生器选择SMCLK

UBR0_1 = 0X43; //波特率为9600 UBR1_1 = 0X03; UMCTL_1 = 0X03; //调整寄存器

通过以上公式得到的波特率可以使误差降到最低,经过计算,本程序中波特率的误差为4.17% 。

Lcd.c程序中包含了所有与LCD显示有关的函数,包括清屏、上下左右移动、反色显示、显示ASCII码、汉字、点阵图形等函数。其中清屏、移动,反色等函数简单且比较常用,所以使用宏定义的方式来实现,不仅简化了书写,而且增加了程序的可读性:

#define CLEAR send_data1(0xF4 ) #define MOVE_UP send_data1(0xF5) #define MOVE_DOWN send_data1(0xF6) #define MOVE_LEFT send_data1(0xF7) #define MOVE_RIGHT send_data1(0xF8) #define OVERTURN send_data1(0xFA) #define DISP_CURSOR(l) send_data1(0xFB);send_data1(l) #define CH_SPEED(v) send_data1(0xFC);send_data1(v) ASCII

码、汉字显示程序可以实现在指定位置显示,当一行写满时可以自动换行:

void disp_ascii(uint addr_x, uint addr_y, uchar *eng) { uint i; uint lenght; lenght=strlen(eng); for(i=0;i


无线餐厅点菜机 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:模拟量输入输出模块

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: