本代码需要注意的细节
代码实现
主函数
#include <msp430f169.h> #include "Config.h" #include "LCD.h" #include "Init.h" #include "UART.h" //#include "stdlib.h"    本来想用全局指针来存储接收的数据 //                       结果发现自己用不来........ //#include "string.h" //unsigned char a[60]; int main(void) {     WDTCTL = WDTPW | WDTHOLD; //停止看门狗 Clock_Init(); //系统时钟设置 LCD_Port_init(); //LCD IO初始化 delay_ms(100); //延时100ms, LCD_init(); //液晶参数初始化设置 LCD_clear(); //清屏 UART_Init(); //串口设置初始化 _EINT(); //开中断 Print_Str("DM430-L Board UART Test...n");//发送字符串测试,使用串口助手显示 while(1) {       LPM0; //采用低功耗模式接收中断 } } UART.C配置
/*  * UART.c  *  *  Created on: 2020年4月20日  *      Author: qq_rowosr  */ #include "UART.h" #include "stdlib.h" //#include "string.h" //#include "LCD.h" //extern unsigned char a[60]; //串口初始化 void UART_Init() {   U0CTL|=SWRST + CHAR; //复位SWRST,8位数据模式   U0TCTL|=SSEL1; //SMCLK为串口时钟   U0BR1=0X1A; //BRCLK=8MHZ,Baud=BRCLK/N   U0BR0=0X0A; //N=UBR+(UxMCTL)/8   U0MCTL=0x00; //微调寄存器为0,波特率1200bps   ME1|=UTXE0; //UART0发送使能   ME1|=URXE0; //UART0接收使能   U0CTL&=~SWRST;   IE1|=URXIE0; //接收中断使能位    P3SEL|= BIT4 + BIT5; //设置IO口为第二功能模式,启用UART功能   P3DIR|= BIT4; //设置TXD0口方向为输出 } void Send_Byte(uchar data) { while(!(IFG1&UTXIFG0)); //发送寄存器空的时候发送数据     U0TXBUF=data; } //************************************************************************* //              串口0发送字符串函数 //************************************************************************* void Print_Str(uchar *s) { while(*s != ' ') { Send_Byte(*s++); } } //************************************** //              中断函数 //************************************** #pragma vector=USART0RX_VECTOR __interrupt void UART0_RX_ISR(void) {     LPM0_EXIT; //退出低功耗     uchar data = 0;     data = U0RXBUF; //接收到的数据存起来     Send_Byte (data); //将接收到的数据再发送出去 Display_Character_String(data); //在1602显示接收的字符 } UART.h
/*  * UART.h  *  *  Created on: 2020年4月20日  *      Author: QQ_rowosr  */ #ifndef UART_H_ #define UART_H_ #include <msp430f169.h> #include "Config.h" void Print_Str(uchar *s); void Send_Byte(uchar data); void UART_Init(); #endif /* UART_H_ */ LCD.h
/*  * 1602.h  *  *  Created on: 2020年4月20日  *      Author: QQ_rowosr  */ #ifndef LCD_H_ #define LCD_H_ #include <msp430f169.h> #include "Config.h" void LCD_Port_init(); void LCD_write_com(unsigned char com); void LCD_write_data(unsigned char data); void LCD_clear(void); void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s); void LCD_write_char(unsigned char x,unsigned char y,unsigned char data); void LCD_init(void); void Display_Character_String(unsigned char data); #endif /* 1602_H_ */ LCD.c
/*  * 1602.c  *  *  Created on: 2020年4月20日  *      Author: QQ_rowosr  */ #include "LCD.h" //************************************************************************* //          初始化IO口子程序 //************************************************************************* void LCD_Port_init() {      P4SEL = 0x00;     P4DIR = 0xFF; //数据口输出模式     P5SEL = 0x00;     P5DIR |= BIT5 + BIT6 + BIT7; //控制口设置为输出模式 } //*********************************************************************** //  显示屏命令写入函数 //*********************************************************************** void LCD_write_com(unsigned char com) {     RS_CLR;     RW_CLR;     EN_SET;     DataPort = com; //命令写入端口 delay_us(100);     EN_CLR; } //*********************************************************************** //  显示屏数据写入函数 //*********************************************************************** void LCD_write_data(unsigned char data) {     RS_SET;     RW_CLR;     EN_SET;     DataPort = data; //数据写入端口 delay_us(100);     EN_CLR; } //*********************************************************************** //  显示屏清空显示 //*********************************************************************** void LCD_clear(void) { LCD_write_com(0x01); //清屏幕显示 delay_ms(5); } //*********************************************************************** //  显示屏字符串写入函数 //*********************************************************************** void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_write_com(0x80 + x); //第一行显示 } else { LCD_write_com(0xC0 + x); //第二行显示 } while (*s) { LCD_write_data( *s);         s ++; } } //*********************************************************************** //  显示屏单字符写入函数 //*********************************************************************** void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) { if (y == 0) { LCD_write_com(0x80 + x); //第一行显示 } else { LCD_write_com(0xC0 + x); //第二行显示 } LCD_write_data( data); } //*********************************************************************** //  显示屏初始化函数 //*********************************************************************** void LCD_init(void) { LCD_write_com(0x38); //显示模式设置 delay_ms(5); LCD_write_com(0x08); //显示关闭 delay_ms(5); LCD_write_com(0x01); //显示清屏 delay_ms(5); LCD_write_com(0x06); //显示光标移动设置 delay_ms(5); LCD_write_com(0x0C); //显示开及光标设置 delay_ms(5); } //************************************ //          字符串显示函数 //*********************************** void Display_Character_String(unsigned char data) { static int i = 0; static int y = 0; if (i % 2 == 0) //第一行显示 {     LCD_write_com (0x80 + y);            LCD_write_data (data);     y++; if (y == 16){ i++;y = 0;} } else //第二行显示 {              LCD_write_com (0xc0 + y);             LCD_write_data (data);             y++; if (y == 16) {             i++ ;             y = 0; delay_ms(1000); //读者可以自行设置延时时间,但是两次发送字符串的间隔时间,大于你设置的延时时间 LCD_clear(); //接收到32个字符,清屏 } } } Config.h
/*  * Config.h  *  *  Created on: 2020年4月20日  *      Author: QQ_rowosr  */ #ifndef CONFIG_H_ #define CONFIG_H_ #define CPU_F ((double)8000000)   //外部高频晶振8MHZ //#define CPU_F ((double)32768)   //外部低频晶振32.768KHZ #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //自定义数据结构,方便使用 #define uchar unsigned char #define uint  unsigned int #define ulong unsigned long //8个LED灯,连接在P6口,可通过断开电源停止使用,ADC使用时断开电源 #define LED8DIR         P6DIR #define LED8            P6OUT                             //P6口接LED灯,8个 //4个独立按键连接在P10~P13 #define KeyPort         P1IN                              //独立键盘接在P10~P13 //串口波特率计算,当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数 #define baud           9600                                //设置波特率的大小 #define baud_setting   (uint)((ulong)CPU_F/((ulong)baud))  //波特率计算公式 #define baud_h         (uchar)(baud_setting>>8)            //提取高位 #define baud_l         (uchar)(baud_setting)               //低位 //RS485控制管脚,CTR用于控制RS485处于收或者发状态 #define RS485_CTR1      P5OUT |= BIT2;          //控制线置高,RS485发送状态 #define RS485_CTR0      P5OUT &= ~BIT2;         //控制线置低,RS485接收状态 //2.8寸TFT彩屏显示控制相关硬件配置 #define RS_CLR          P5OUT &= ~BIT5           //RS置低 #define RS_SET          P5OUT |=  BIT5           //RS置高 #define RW_CLR          P5OUT &= ~BIT6           //RW置低 #define RW_SET          P5OUT |=  BIT6           //RW置高 #define RD_CLR          P5OUT &= ~BIT7           //E置低 #define RD_SET          P5OUT |=  BIT7           //E置高 #define CS_CLR          P5OUT &= ~BIT0            //CS置低 #define CS_SET          P5OUT |=  BIT0            //CS置高 #define RST_CLR         P5OUT &= ~BIT3            //RST置低 #define RST_SET         P5OUT |=  BIT3            //RST置高 #define LE_CLR          P5OUT &= ~BIT1            //LE置低 #define LE_SET          P5OUT |=  BIT1            //LE置高 //2.8寸TFT彩屏触摸屏控制相关硬件配置 #define PEN_CLR         P2OUT &= ~BIT0           //PEN置低,触碰触摸屏时,Penirq引脚由未触摸时的高电平变为低电平 #define PEN_SET         P2OUT |=  BIT0           //PEN置高 #define PEN             (P2IN & 0x01)            //P2.0输入的值 #define TPDO_CLR    P2OUT &= ~BIT1           //TPDO置低 #define TPDO_SET    P2OUT |=  BIT1           //TPDO置高 #define TPDOUT          ((P2IN>>1)&0x01)         //P2.1输入的值 #define BUSY_CLR    P2OUT &= ~BIT3           //BUSY置低 #define BUSY_SET    P2OUT |=  BIT3           //BUSY置高 #define TPDI_CLR    P2OUT &= ~BIT4            //TPDI置低 #define TPDI_SET    P2OUT |=  BIT4            //TPDI置高 #define TPCS_CLR    P2OUT &= ~BIT5            //TPCS置低 #define TPCS_SET    P2OUT |=  BIT5            //TPCS置高 #define TPCLK_CLR   P2OUT &= ~BIT6            //TPCLK置低 #define TPCLK_SET   P2OUT |=  BIT6            //TPCLK置高 //彩屏/12864液晶/1602液晶的数据口,三液晶共用 #define DataDIR         P4DIR                     //数据口方向 #define DataPort        P4OUT                     //P4口为数据口 //12864/1602液晶控制管脚 #define RS_CLR          P5OUT &= ~BIT5           //RS置低 #define RS_SET          P5OUT |=  BIT5           //RS置高 #define RW_CLR          P5OUT &= ~BIT6           //RW置低 #define RW_SET          P5OUT |=  BIT6           //RW置高 #define EN_CLR          P5OUT &= ~BIT7           //E置低 #define EN_SET          P5OUT |=  BIT7           //E置高 #define PSB_CLR         P5OUT &= ~BIT0            //PSB置低,串口方式 #define PSB_SET         P5OUT |=  BIT0            //PSB置高,并口方式 #define RST_CLR         P5OUT &= ~BIT1            //RST置低 #define RST_SET         P5OUT |= BIT1             //RST置高 //12864应用指令集 #define CLEAR_SCREEN    0x01                  //清屏指令:清屏且AC值为00H #define AC_INIT     0x02                  //将AC设置为00H。且游标移到原点位置 #define CURSE_ADD   0x06                  //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动) #define FUN_MODE    0x30                  //工作模式:8位基本指令集 #define DISPLAY_ON  0x0c                  //显示开,显示游标,且游标位置反白 #define DISPLAY_OFF 0x08                  //显示关 #define CURSE_DIR   0x14                  //游标向右移动:AC=AC+1 #define SET_CG_AC   0x40                  //设置AC,范围为:00H~3FH #define SET_DD_AC   0x80                      //设置DDRAM AC #define FUN_MODEK   0x36                  //工作模式:8位扩展指令集 //颜色代码,TFT显示用 #define White          0xFFFF                                                               //显示颜色代码 #define Black          0x0000 #define Blue           0x001F #define Blue2          0x051F #define Red            0xF800 #define Magenta        0xF81F #define Green          0x07E0 #define Cyan           0x7FFF #define Yellow         0xFFE0 //NRF2401模块控制线 #define  RF24L01_CE_0        P1OUT &=~BIT5         //CE在P15 #define  RF24L01_CE_1        P1OUT |= BIT5 #define  RF24L01_CSN_0       P2OUT &=~BIT7         //CS在P27 #define  RF24L01_CSN_1       P2OUT |= BIT7 #define  RF24L01_SCK_0       P3OUT &=~BIT3         //SCK在P33 #define  RF24L01_SCK_1       P3OUT |= BIT3 #define  RF24L01_MISO_0      P3OUT &=~BIT2         //MISO在P32 #define  RF24L01_MISO_1      P3OUT |= BIT2 #define  RF24L01_MOSI_0      P3OUT &=~BIT1         //MOSI在P31 #define  RF24L01_MOSI_1      P3OUT |= BIT1 #define  RF24L01_IRQ_0       P1OUT &=~BIT4         //IRQ在P14 #define  RF24L01_IRQ_1       P1OUT |= BIT4 //DS18B20控制脚,单脚控制 #define DQ_IN           P1DIR &= ~BIT7        //设置输入,DS18B20接单片机P53口 #define DQ_OUT          P1DIR |= BIT7         //设置输出 #define DQ_CLR          P1OUT &= ~BIT7            //置低电平 #define DQ_SET          P1OUT |= BIT7             //置高电平 #define DQ_R            P1IN & BIT7       //读电平 //红外接收头H1838控制脚,单脚控制 #define RED_IN          P1DIR &= ~BIT6            //设置输入,红外接收头接单片机PE3口 #define RED_OUT         P1DIR |=  BIT6            //设置输出 #define RED_L           P1OUT &= ~BIT6            //置低电平 #define RED_H           P1OUT |= BIT6             //置高电平 #define RED_R           (P1IN & BIT6)             //读电平 #endif /* CONFIG_H_ */ Init.h
/*  * Init.h  *  *  Created on: 2020年4月20日  *      Author: QQ_rowosr  */ #ifndef INIT_H_ #define INIT_H_ #include <msp430f169.h> #include "Config.h" void Clock_Init_Inc() {   uchar i; // DCOCTL = DCO0 + DCO1 + DCO2;              // Max DCO // BCSCTL1 = RSEL0 + RSEL1 + RSEL2;          // XT2on, max RSEL    DCOCTL = 0x60 + 0x00; //DCO约3MHZ,3030KHZ   BCSCTL1 = DIVA_0 + 0x07;   BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0; } //*********************************************************************** //                   系统时钟初始化,外部8M晶振 //*********************************************************************** void Clock_Init() {   uchar i;   BCSCTL1&=~XT2OFF; //打开XT2振荡器   BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ do{     IFG1&=~OFIFG; //清楚振荡器错误标志 for(i=0;i<100;i++) _NOP(); } while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待   IFG1&=~OFIFG; } #endif /* INIT_H_ */ 
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
 官方软件产品操作指南 (170)
官方软件产品操作指南 (170)