单片机/MCU论坛
直播中

ZXC

7年用户 100经验值
擅长:EMC/EMI设计 嵌入式技术 制造/封装 接口/总线/驱动 处理器/DSP 控制/MCU EDA/IC设计
私信 关注
[文章]

TI MSP430系列:T5UIC1串口彩屏与MSP430F149单片机交互, 实现常用功能(附例程)

`
一、评估板使用说明
1. 功能
序号
功能
描述
1
MCU
MSP430F149
2
串口
控制esp8266交换数据
3
I/O
5路I/O
4
LED
工作指示灯
5
按键
复位按键
6
5V电源输入

注:可实现的功能
a.可以显示预先存入屏幕内的图片广告信息
b.可通过手机app通过wifi切换图片
IMG_2194.JPG

IMG_2195.JPG

IMG_2196.JPG

2. 需使用的工具
a.硬件:MSP430F149最小系统,ESP8266模块。
b. 软件: IAR。
c.原理图:详见“硬件原理图”文件夹。
d.程序: 430程序在“MSP430F149程序”文件夹。

二、评估板硬件和软件部分详细介绍
1.硬件部分
(1)硬件接口定义

功能
对应MSP430F149的IO

TXD(屏端子显示)
P34
RXD(屏端子显示)
P35
Esp8266串口
P36->RXT,P37->TXD




(2) 硬件原理图





GZ9_KY@I@97CXP`{T)O6SBK.png

2. 软件程序
(1)界面设置在“DWIN_SET”文件夹中。STM32程序在“MSP430F149程序”文件夹中。 操作过程:将app工程文件夹下的apk文件安装到安卓手机;将手机wifi连接上ESP8266的热点“电子便签”。


(2)MCU程序

         main.c
  1. [size=4][size=4]#include  
  2. #include
  3. #include
  4. #include "dwin.h"
  5. #define CPU_CLK 8000000    //系统时钟8M
  6. #define CPU_F ((double)8000000)
  7. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  8. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
  9. void Delays(void);
  10. void PutString(char *ptr);
  11. void UART0_Init(unsigned long baud)
  12. {
  13.     u16 baudset;
  14.     baudset=(u16)(CPU_CLK/baud);
  15.    
  16.     P3SEL |= BIT4 + BIT5;       // P3.4,5 = USART0 TXD/RXD
  17.     ME1 |= UTXE0 + URXE0;       // 使能UART0的TXD和RXD
  18.     UCTL0 |= CHAR;              // 数据位为8bit
  19.     UTCTL0 |= SSEL1;            // 选择时钟源,SSEL0 32.768KHZ SSEL1 8M
  20.     UBR00 = (u8)(baudset);      // 初值整数部分低8位
  21.     UBR10 = (u8)(baudset>>8);   // 初值整数部分高8位
  22.     UMCTL0 =(u8)((baudset-U0BR0)*8); //初值小数部分
  23.     UCTL0 &= ~SWRST;            // Initialize USART state machine
  24.     IE1 |= URXIE0;                    // 使能UART0的RX中断
  25.     _EINT();                    // 打开全局中断控制位
  26. }
  27. void Init_CLK(void)
  28.   {

  29.       unsigned int qq;

  30.       WDTCTL= WDTPW + WDTHOLD ; // 关看门狗

  31.       BCSCTL1 &= ~XT2OFF;           //打开XT2高速晶体振荡器

  32.       do

  33.       {

  34.         IFG1 &= ~OFIFG;           // 清除振荡器失效标志

  35.         for(qq=0xff;qq>0;qq--);  //延时,等待XT2起振

  36.       }

  37.       while((IFG1&OFIFG));       //判断XT2是否起振

  38.       BCSCTL2 |= SELM_2;          //MCLK=XT2

  39.       //BCSCTL2 |= DIVM_0;        //控制MCLK不分频,默认

  40.       BCSCTL2 |= SELS;            //SMCLK=XT2

  41.       //BCSCTL2 |= DIVS_0;        //控制SMCLK不分频,默认

  42.   }
  43. /**************************************************************
  44. *函数功能:初始化UART1
  45. *P3.6  TXD    P3.7  RXD
  46. ***************************************************************/
  47. void UART1_Init(unsigned long baud)
  48. {
  49.     u16 baudset;
  50.     baudset=(u16)(CPU_CLK/baud);
  51.    
  52.     P3SEL |= BIT6 + BIT7;       // P3.6,7 = USART0 TXD/RXD
  53.     ME2 |= UTXE1 + URXE1;       // 使能UART1的TXD和RXD
  54.     UCTL1 |= CHAR;              // 数据位为8bit
  55.     UTCTL1 |= SSEL1;            // 选择时钟源,SSEL0 32.768KHZ SSEL1 8M
  56.     UBR01 = (u8)(baudset);      // 初值整数部分低8位
  57.     UBR11 = (u8)(baudset>>8);   // 初值整数部分高8位
  58.     UMCTL1 =(u8)((baudset-U0BR0)*8); //初值小数部分
  59.     UCTL1 &= ~SWRST;            // Initialize USART state machine
  60.     IE2 |= URXIE1;                    // 使能UART1的RX中断
  61.     _EINT();                    // 打开全局中断控制位
  62. }
  63. /**************************************************************
  64. 函数功能:从UART1发送一个字符
  65. 输入参数:Byte -- 要发送的字符
  66. ***************************************************************/
  67. void UART1_SendChar(u8 Byte)
  68. {
  69.     while (!(IFG2 & UTXIFG1));              
  70.     TXBUF1 = Byte;  // 将要发送的字符送到数据寄存器                                         
  71. }
  72. /**************************************************************
  73. 函数功能:发送字符串函数
  74. 输入参数: s  要发送的字符串
  75. **************************************************************/
  76. void UART1_Send_Str(char *s)
  77. {
  78.         while (*s)
  79.         {
  80.                 UART1_SendChar(*s);        
  81.                 s++;
  82.         }
  83. }


  84. void esp_8266_init()
  85. {
  86. #define usart2_send_string UART1_Send_Str
  87. usart2_send_string("AT+RST
  88. ");
  89. delay_ms(2200);        
  90. usart2_send_string("AT+CWMODE=3
  91. ");
  92. delay_ms(2200);
  93. usart2_send_string("AT+CWSAP="电子便签","66666666",11,0
  94. ");
  95. delay_ms(2200);
  96. usart2_send_string("AT+CIPSTART="UDP","255.255.255.255",9001,9005,0
  97. ");
  98. delay_ms(2200);
  99. usart2_send_string("AT+CIPMODE=1
  100. ");        
  101. delay_ms(2200);
  102. usart2_send_string("AT+CIPSEND
  103. ");        
  104.         
  105. }        
  106. /********************主函数**********************/
  107. int p_n=1;
  108. void main(void)
  109. {
  110.   
  111.     /*下面六行程序关闭所有的IO口*/
  112.     P1DIR = 0XFF;P1OUT = 0XFF;
  113.     P2DIR = 0XFF;P2OUT = 0XFF;
  114.     P3DIR = 0XFF;P3OUT = 0XFF;
  115.     P4DIR = 0XFF;P4OUT = 0XFF;
  116.     P5DIR = 0XFF;P5OUT = 0XFF;
  117.     P6DIR = 0XFF;P6OUT = 0XFF;
  118.    
  119.     WDTCTL = WDTPW + WDTHOLD;                 // 关狗
  120.     Init_CLK();
  121.     P6DIR |= BIT2;P6OUT |= BIT2;              // 关电平转换

  122.    UART0_Init(115200);
  123.    UART1_Init(115200);
  124.    LCD_printf(0x04,0xfFFF,0xf00f,200-72,50,"自动浇花系统");
  125.    esp_8266_init();
  126.     while(1)
  127.     {     

  128.         pic(p_n);
  129.     }
  130. }


  131. //串口1中断函数
  132. #pragma vector=UART1RX_VECTOR
  133. __interrupt void UART1_RX_ISR(void)
  134. {
  135.     u8 c;
  136.     IFG2&=~URXIFG1;
  137.     c = RXBUF1; // 接收到数据了
  138.     if(c!=0)p_n=c;

  139. }
  140. [/size][/size]

          dwin.h
  1. [size=4][size=4]#ifndef _DWIN
  2. #define _DWIN

  3. #include  
  4. #include
  5. #include

  6. typedef unsigned char u8;
  7. typedef unsigned int  u16;
  8. /*******************************************
  9. 函数名称:PutSting
  10. 功    能:向PC机发送字符串
  11. 参    数:无
  12. 返回值  :无
  13. ********************************************/
  14. void PrintString1(char *ptr)
  15. {
  16.       while(*ptr != '\0')
  17.       {
  18.             while (!(IFG1 & UTXIFG0));                // TX缓存空闲?
  19.             TXBUF0 = *ptr++;                       // 发送数据
  20.       }
  21. }
  22. char  tmp[100];

  23. /****************显示字符串函数*****************/
  24. /*参数:mode:D7********************************/

  25. void TX1_write2buff(char txh)
  26. {
  27.             while (!(IFG1 & UTXIFG0));                // TX缓存空闲?
  28.             TXBUF0 = txh;                       // 发送数据
  29. }


  30. void LCD_printf(u8 mode,u16 Color,u16 Bcolor,u16 x,u16 y,const char *format, ...)
  31. {
  32.   
  33.   va_list arg;
  34.   va_start(arg, format);
  35.   vsprintf(tmp,format,arg);
  36.   va_end(arg);
  37.         TX1_write2buff(0xaa);
  38.         
  39.         TX1_write2buff(0x11);
  40.         TX1_write2buff(mode);//模式
  41.         TX1_write2buff(Color/256);
  42.         TX1_write2buff(Color%256);//前景颜色
  43.         TX1_write2buff(Bcolor/256);
  44.         TX1_write2buff(Bcolor%256);//背景颜色
  45.         TX1_write2buff(x/256);
  46.         TX1_write2buff(x%256);//横坐标
  47.         TX1_write2buff(y/256);
  48.         TX1_write2buff(y%256);//Y坐标
  49.         
  50.         PrintString1(tmp);        
  51.         TX1_write2buff(0xcc);
  52.         TX1_write2buff(0x33);
  53.         TX1_write2buff(0xc3);
  54.         TX1_write2buff(0x3c);
  55. }
  56. /****************显示二维码函数*****************/
  57. /*参数:mode:D7********************************/
  58. void erweima(u16 x,u16 y,u8 QR_Pixel,const char *format, ...)
  59. {
  60.   va_list arg;
  61.   va_start(arg, format);
  62.   vsprintf(tmp,format,arg);
  63.   va_end(arg);
  64.         
  65.         TX1_write2buff(0xaa);
  66.         
  67.         TX1_write2buff(0x21);

  68.         TX1_write2buff(x/256);
  69.         TX1_write2buff(x%256);//横坐标
  70.         TX1_write2buff(y/256);
  71.         TX1_write2buff(y%256);//Y坐标
  72.         TX1_write2buff(QR_Pixel);//二维码每个点的大小
  73.         
  74.   PrintString1(tmp);        
  75.         TX1_write2buff(0xcc);
  76.         TX1_write2buff(0x33);
  77.         TX1_write2buff(0xc3);
  78.         TX1_write2buff(0x3c);
  79. }
  80. /****************绘图清屏函数*****************/
  81. /*参数:mode:D7********************************/
  82. void clr(u16 Color)
  83. {

  84.         TX1_write2buff(0xaa);
  85.         
  86.         TX1_write2buff(0x01);

  87.         TX1_write2buff(Color/256);
  88.         TX1_write2buff(Color%256);//颜色

  89.         
  90.         TX1_write2buff(0xcc);
  91.         TX1_write2buff(0x33);
  92.         TX1_write2buff(0xc3);
  93.         TX1_write2buff(0x3c);
  94. }
  95. /****************绘图直线插入函数*****************/
  96. /*参数:mode:D7********************************/
  97. void Linear_interpolation(u8 num,u16 Color,...)
  98. {
  99.     va_list arg_ptr;
  100.     int  tempValue;
  101.                 num*=2;
  102.     TX1_write2buff(0xaa);
  103.                 TX1_write2buff(0x03);
  104.                 TX1_write2buff(Color/256);
  105.                 TX1_write2buff(Color%256);
  106.     va_start(arg_ptr,Color);
  107.     while(num--)
  108.     {
  109.           tempValue=va_arg(arg_ptr,int);
  110.           TX1_write2buff(tempValue/256);
  111.                                         TX1_write2buff(tempValue%256);
  112.     }

  113.     va_end(arg_ptr);
  114.                 TX1_write2buff(0xcc);
  115.                 TX1_write2buff(0x33);
  116.                 TX1_write2buff(0xc3);
  117.                 TX1_write2buff(0x3c);
  118. }
  119. /****************绘图打点插入函数*****************/
  120. /*参数:mode:D7********************************/
  121. void Place_point(u8 num,u16 Color,u16 nx,u16 ny,...)
  122. {
  123.     va_list arg_ptr;
  124.     int tempValue;
  125.                 num*=2;
  126.     TX1_write2buff(0xaa);
  127.                 TX1_write2buff(0x02);
  128.                 TX1_write2buff(Color/256);
  129.                 TX1_write2buff(Color%256);
  130.                 TX1_write2buff(nx%256);
  131.                 TX1_write2buff(ny%256);
  132.     va_start(arg_ptr,ny);
  133.     while(num--)
  134.     {
  135.           tempValue=va_arg(arg_ptr,int);
  136.           TX1_write2buff(tempValue/256);
  137.                                         TX1_write2buff(tempValue%256);
  138.     }

  139.     va_end(arg_ptr);
  140.                 TX1_write2buff(0xcc);
  141.                 TX1_write2buff(0x33);
  142.                 TX1_write2buff(0xc3);
  143.                 TX1_write2buff(0x3c);
  144. }
  145. /****************屏幕背光亮度设置*****************/
  146. /*参数:mode:D7********************************/
  147. void DIM_Set(u8 Set)
  148. {

  149.     TX1_write2buff(0xaa);
  150.                 TX1_write2buff(0x30);
  151.                 TX1_write2buff(Set);
  152.                 TX1_write2buff(0xcc);
  153.                 TX1_write2buff(0x33);
  154.                 TX1_write2buff(0xc3);
  155.                 TX1_write2buff(0x3c);
  156. }
  157. /****************设置扩展串口波特率**************/
  158. /*参数:mode:D7********************************/
  159. void Bode_Set(u16 Set)//调节扩展串口波特率
  160. {
  161.           TX1_write2buff(0xaa);
  162.                 TX1_write2buff(0x38);
  163.                 TX1_write2buff(15667200/Set/256);
  164.                 TX1_write2buff(15667200/Set%256);
  165.                 TX1_write2buff(0xcc);
  166.                 TX1_write2buff(0x33);
  167.                 TX1_write2buff(0xc3);
  168.                 TX1_write2buff(0x3c);
  169. }
  170. /****************从扩展串口发送字符串**************/
  171. /*参数:mode:D7********************************/
  172. void UART_TX(const char *format, ...)//串口发送字符串
  173. {
  174.                 va_list arg;
  175.                 va_start(arg, format);
  176.                 vsprintf(tmp,format,arg);
  177.                 va_end(arg);
  178.           TX1_write2buff(0xaa);
  179.                 TX1_write2buff(0x39);
  180.                 PrintString1(tmp);
  181.                 TX1_write2buff(0xcc);
  182.                 TX1_write2buff(0x33);
  183.                 TX1_write2buff(0xc3);
  184.                 TX1_write2buff(0x3c);
  185. }
  186. /****************显示ICO图标**************/
  187. /*参数:mode:D7********************************/
  188. void dis_ico(u16 x,u16 y,u8 mode,u8 ids)//显示ico图标
  189. {
  190.           TX1_write2buff(0xaa);
  191.                 TX1_write2buff(0x23);
  192.                 TX1_write2buff(x/256);
  193.                 TX1_write2buff(x%256);
  194.                 TX1_write2buff(y/256);
  195.                 TX1_write2buff(y%256);        
  196.                 TX1_write2buff(y%256);        
  197.           TX1_write2buff(mode);        
  198.                 TX1_write2buff(ids);
  199.                 TX1_write2buff(0xcc);
  200.                 TX1_write2buff(0x33);
  201.                 TX1_write2buff(0xc3);
  202.                 TX1_write2buff(0x3c);
  203. }
  204. /****************设置动态图标*******************/
  205. /*参数:mode:D7********************************/
  206. void disd_ico(u16 x,u16 y,u8 mode,u8 Icon_lib,u8 Icon_IDs,u8 Icon_0IDe,u8 Delay_time)//显示ico图标
  207. {
  208.           TX1_write2buff(0xaa);
  209.                 TX1_write2buff(0x28);
  210.                 TX1_write2buff(x/256);
  211.                 TX1_write2buff(x%256);
  212.                 TX1_write2buff(y/256);
  213.                 TX1_write2buff(y%256);        
  214.                 TX1_write2buff(y%256);        
  215.                 TX1_write2buff(mode);
  216.                 TX1_write2buff(Icon_lib);
  217.                 TX1_write2buff(Icon_IDs);
  218.                 TX1_write2buff(Icon_0IDe);
  219.                 TX1_write2buff(Delay_time);
  220.                 TX1_write2buff(0xcc);
  221.                 TX1_write2buff(0x33);
  222.                 TX1_write2buff(0xc3);
  223.                 TX1_write2buff(0x3c);
  224. }
  225. /****************设置动态图标*******************/
  226. /*参数:mode:D7********************************/
  227. void disc_ico(u16 set)//控制ico动态图标
  228. {
  229.           TX1_write2buff(0xaa);
  230.                 TX1_write2buff(0x29);
  231.         
  232.                 TX1_write2buff(set/256);
  233.                 TX1_write2buff(set%256);

  234.                 TX1_write2buff(0xcc);
  235.                 TX1_write2buff(0x33);
  236.                 TX1_write2buff(0xc3);
  237.                 TX1_write2buff(0x3c);
  238. }

  239. /****************写存储器***********************/
  240. /*参数:mode:D7********************************/
  241. void writ_sram_flsh(u16 Length,u8 Type,u16 Address)//写数据存储器
  242. {
  243.           TX1_write2buff(0xaa);
  244.                 TX1_write2buff(0x31);
  245.                 TX1_write2buff(Type);
  246.                 TX1_write2buff(Address/256);
  247.                 TX1_write2buff(Address%256);
  248.                 while(Length--)
  249.                 {
  250.                         TX1_write2buff(Address++);
  251.                 }        

  252.                 TX1_write2buff(0xcc);
  253.                 TX1_write2buff(0x33);
  254.                 TX1_write2buff(0xc3);
  255.                 TX1_write2buff(0x3c);
  256. }

  257. /****************读存储器***********************/
  258. /*参数:mode:D7********************************/
  259. void read_sram_flsh(u16 Length,u8 Type,u16 Address)//写数据存储器
  260. {
  261.           TX1_write2buff(0xaa);
  262.                 TX1_write2buff(0x32);
  263.                 TX1_write2buff(Type);
  264.                 TX1_write2buff(Address/256);
  265.                 TX1_write2buff(Address%256);
  266.                 TX1_write2buff(Length);
  267.                 TX1_write2buff(0xcc);
  268.                 TX1_write2buff(0x33);
  269.                 TX1_write2buff(0xc3);
  270.                 TX1_write2buff(0x3c);
  271. }

  272. void pic(u8 id)
  273. {
  274.           TX1_write2buff(0xaa);
  275.                 TX1_write2buff(0x22);
  276.                 TX1_write2buff(0x00);
  277.                 TX1_write2buff(id);

  278.                 TX1_write2buff(0xcc);
  279.                 TX1_write2buff(0x33);
  280.                 TX1_write2buff(0xc3);
  281.                 TX1_write2buff(0x3c);
  282. }

  283. #endif[/size][/size]








`
APP工程.zip (10.5 MB)
(下载次数: 2, 2019-1-8 13:10 上传)
MSP430F149源程序.zip (226.09 KB)
(下载次数: 5, 2019-1-8 13:10 上传)
微信图片_20190108130411.png

回帖(4)

lee_st

2019-1-8 18:50:40
进来看看了
举报

lee_st

2019-1-8 18:50:45
不错的资料
举报

lee_st

2019-1-8 18:50:51
支持一下下
举报

lee_st

2019-1-8 18:50:59
好资料,点个赞
举报

更多回帖

发帖
×
20
完善资料,
赚取积分