久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4722|回復: 1
打印 上一主題 下一主題
收起左側

msp430g2553的串口發送程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:164961 發表于 2017-2-16 17:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <msp430g2553.h>
#include <intrinsics.h>
#include <msp430.h>
#define uint unsigned int
#define LCD_EN_PORT P1OUT    //以下2個要設為同一個口
#define LCD_EN_DDR P1DIR
#define LCD_RS_PORT P1OUT    //以下2個要設為同一個口
#define LCD_RS_DDR P1DIR
#define LCD_DATA_PORT P2OUT  //以下3個要設為同一個口
#define LCD_DATA_DDR P2DIR   //一定要用高4
#define LCD_RS BIT6
#define LCD_EN BIT7
#define LCD_DATA    BIT7|BIT6|BIT5|BIT4 //4位數據線連接模式
void LCD_init(void);
void LCD_init_first(void);
void LCD_en_write1(void);  //上升沿使能
void LCD_en_write2(void);  //下降沿使能
void LCD_write_command(unsigned charcommand);
void LCD_write_data(unsigned char data);
void LCD_set_xy (unsigned char x, unsignedchar y);
void LCD_write_string(unsigned charX,unsigned char Y, unsigned char s);
void LCD_write_char(unsigned charX,unsigned char Y, unsigned char data);
void delay_1ms(void);
void delay_nus(unsigned int n);
void delay_nms(unsigned int n);
unsigned char rev;
void putchar(unsigned char c)    //發送字符函數
{
   while (!(IFG2&UCA0TXIFG));  // USCI_A0 TX buffer ready? 等待TX buffer為空
   UCA0TXBUF = c;      // TX ->RXed character  發送字符c
}
void putstr(char *s)  //發送字符串函數
{
   IE2 &= ~UCA0RXIE;  //發送時先關閉接收中斷,不接收
   while((*s)!='\0')  //如果沒有發完,就繼續循環發送
    {
     putchar(*s);
     putchar('\n');  //發送換行符
     s++;
    }
   IE2 |= UCA0RXIE;    //發送完了打開接收中斷
}
void Init_USTAR(void)
{
BCSCTL1 =CALBC1_1MHZ;   // Set DCO1MHz
DCOCTL =CALDCO_1MHZ;
P1SEL = BIT1 + BIT2;    // P1.1 =RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2;   //第二外圍模式選擇
UCA0CTL1 |= UCSSEL_2;   // SMCLK 其他默認:軟件復位使能 USCI邏輯保持在復位狀態,用于設置串口
UCA0BR0 = 8;            // SMCLK1MHz 115200    8
UCA0BR1 = 0;            // 1MHz115200
UCA0MCTL = UCBRS2 + UCBRS0;   
UCA0CTL1 &= ~UCSWRST;     
  IE2|= UCA0RXIE;            //  接收中斷使能
}
void main()//主函數
{
WDTCTL = WDTPW + WDTHOLD;     // 關閉看門狗
LCD_init_first();
LCD_init();
Init_USTAR();
_BIS_SR(LPM3_bits+GIE); // Enter LPM0, interrupts enabled
}
// LCD液晶操作函數
void LCD_init_first(void)     //LCD1602液晶初始化函數(熱啟動)
{
    delay_nms(500);
    LCD_DATA_DDR|=LCD_DATA;   //數據口方向為輸出
    LCD_EN_DDR|=LCD_EN;       //設置EN方向為輸出
    LCD_RS_DDR|=LCD_RS;       //設置RS方向為輸出
    delay_nms(50);
    LCD_write_command(0x30);
    delay_nms(50);
    LCD_write_command(0x30);
    delay_nms(5);
    LCD_write_command(0x30);
    delay_nms(500);
}
//LCD1602液晶初始化函數
void LCD_init(void)
{
   delay_nms(500);
   LCD_DATA_DDR|=LCD_DATA;   //數據口方向為輸出
   LCD_EN_DDR|=LCD_EN;       //設置EN方向為輸出
   LCD_RS_DDR|=LCD_RS;       //設置RS方向為輸出
   delay_nms(500);
   LCD_write_command(0x28);  //4位數據接口
   delay_nms(50);
   LCD_write_command(0x28);  //4位數據接口
   delay_nms(50);
   LCD_write_command(0x28);  //4位數據接口
   delay_nms(50);
   LCD_en_write2();
   delay_nms(50);
   LCD_write_command(0x28); //4位數據接口
    delay_nms(500);
   LCD_write_command(0x01); //清屏
   LCD_write_command(0x0c); //顯示開,關光標,不閃爍
   LCD_write_command(0x06); //設定輸入方式,增量不移位
   delay_nms(50);
}
//液晶使能上升沿
void LCD_en_write1(void)
{
   LCD_EN_PORT&=~LCD_EN;
   delay_nus(10);
   LCD_EN_PORT|=LCD_EN;
}
//液晶使能下降沿
void LCD_en_write2(void)
{
  LCD_EN_PORT|=LCD_EN;
  delay_nus(10);
  LCD_EN_PORT&=~LCD_EN;
}
//寫指令函數
void LCD_write_command(unsigned charcommand)
{
  delay_nus(16);
  P2SEL=0x00;
  LCD_RS_PORT&=~LCD_RS; //RS=0
  LCD_en_write1();
  LCD_DATA_PORT&=0X0f; //清高四位
  LCD_DATA_PORT|=command&0xf0; //寫高四位
  delay_nus(16);
  LCD_en_write2();
  command=command<<4; //低四位移到高四位
  LCD_en_write1();
  LCD_DATA_PORT&=0x0f; //清高四位
  LCD_DATA_PORT|=command&0xf0; //寫低四位
  LCD_en_write2();
}
//寫數據函數
void LCD_write_data(unsigned char data)
{
  delay_nus(16);
  P2SEL=0x00;
  LCD_RS_PORT|=LCD_RS;      //RS=1
  LCD_en_write1();          //E上升沿
  LCD_DATA_PORT&=0X0f;      //清高四位
  LCD_DATA_PORT|=data&0xf0; //寫高四位
  delay_nus(16);
  LCD_en_write2();
  data=data<<4;             //低四位移到高四位
  LCD_en_write1();
  LCD_DATA_PORT&=0X0f;      //清高四位
  LCD_DATA_PORT|=data&0xf0; //寫低四位
  LCD_en_write2();
}
//寫地址函數
void LCD_set_xy( unsigned char x, unsignedchar y )
{
  unsigned char address;
   if (y == 0) address = 0x80 + x;
  else address = 0xc0 + x;
  LCD_write_command( address);
}
//LCD在任意位置寫字符串,列x=0~15,y=0,1
void LCD_write_string(unsigned charX,unsigned char Y,unsigned char s)
{
LCD_set_xy( X, Y ); //寫地址
LCD_write_data( s );   
}
//LCD在任意位置寫字符,x=0~15,y=0,1
void LCD_write_char(unsigned charX,unsigned char Y,unsigned char data)
{
  LCD_set_xy( X, Y ); //寫地址
  LCD_write_data( data);
}
//1us延時函數
void delay_1us(void)
{
  asm("nop");
}
//N us延時函數
void delay_nus(unsigned int n)
{
  unsigned int i;
  for(i=0;i<n;i++)
  delay_1us();
}
//1ms延時函數
void delay_1ms(void)
{
  unsigned int i;
  for (i=0;i<1140;i++);
}
//N ms延時函數
void delay_nms(unsigned int n)
{
  unsigned int i=0;
  for (i=0;i<n;i++)
  delay_1ms();
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG));    // USCI_A0 TX buffer ready? 等待TX buffer為空
UCA0TXBUF = UCA0RXBUF;         //TX -> RXed character  發送接收到是數據
rev=UCA0RXBUF;
putchar(rev);
LCD_write_string(0,0,rev);
  delay_nms(10);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:165166 發表于 2017-2-17 20:28 | 只看該作者
學習了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费视频网站在线观看 | 精品久久久久久久久久久久久久 | 欧美一区二区三区大片 | 国产在线二区 | 欧美日韩国产一区二区 | 青青草视频免费观看 | 亚洲成人中文字幕 | 精品免费国产一区二区三区四区 | 亚洲精品99 | 国产一区二区不卡 | 伊人春色在线观看 | 黄色片免费看视频 | 色小姐综合网 | 干干干操操操 | 男插女下体视频 | 最新中文字幕在线 | 欧美日韩在线精品 | 夜夜爽99久久国产综合精品女不卡 | 亚洲毛片 | 精品国产一区一区二区三亚瑟 | 国产羞羞视频在线观看 | 一级黄色片免费在线观看 | 国产精品久久99 | 精品美女 | 欧美乱大交xxxxx另类电影 | 成人午夜电影网 | 91精品国产一区二区三区 | 欧美一级二级在线观看 | 精品欧美一区二区三区久久久 | 久久亚洲一区二区三区四区 | 国产亚洲精品一区二区三区 | 一级片在线播放 | 国产精品污www一区二区三区 | 不卡一二区 | 中文字幕av一区二区三区 | 日韩不卡视频在线 | www.一区二区三区 | 偷拍自拍网站 | 黄色免费在线观看网站 | 欧美激情视频网站 | 草草草网站 |