|
- #include "MSP430F5529.h"
- #define uchar unsigned char
- #define uint unsigned int
- #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))
- //12864/1602液晶控制管腳
- #define RS_CLR P6OUT &= ~BIT1 //RS置低
- #define RS_SET P6OUT |= BIT1 //RS置高
- #define RW_CLR P6OUT &= ~BIT2 //RW置低
- #define RW_SET P6OUT |= BIT2 //RW置高
- #define EN_CLR P6OUT &= ~BIT3 //E置低
- #define EN_SET P6OUT |= BIT3 //E置高
- //彩屏/12864液晶/1602液晶的數據口,三液晶共用
- #define DataDIR P3DIR //數據口方向
- #define DataPort P3OUT //P4口為數據口
- void clock_init()
- {
- UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO
- UCSCTL4 |= SELA_2; // Set ACLK = REFO
- UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
- // Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
- do
- {
- UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
- // Clear XT2,XT1,DCO fault flags
- SFRIFG1 &= ~OFIFG; // Clear fault flags
- }while (SFRIFG1&OFIFG); // Test oscillator fault flag
-
- __bis_SR_register(SCG0); // Disable the FLL control loop
- UCSCTL1 = DCORSEL_5; // Select DCO range 16MHz operation
- UCSCTL2 |= 249; // Set DCO Multiplier for 8MHz
- // (N + 1) * FLLRef = Fdco
- // (249 + 1) * 32768 = 8MHz
- __bic_SR_register(SCG0); // Enable the FLL control loop
- // Worst-case settling time for the DCO when the DCO range bits have been
- // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
- // UG for optimization.
- // 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle
- __delay_cycles(250000);
- }
- //*************************************************************************
- // 初始化IO口子程序
- //*************************************************************************
- void Port_init()
- {
- P1DIR|=BIT0;
- P1OUT|=BIT0;
- P3SEL = 0x00;
- P3DIR = 0xFF; //數據口輸出模式
- P6SEL = 0x00;
- P6DIR|= BIT1 + BIT2 + BIT3; //控制口設置為輸出模式
- }
- //***********************************************************************
- // 顯示屏命令寫入函數
- //***********************************************************************
- void LCD_write_com(unsigned char com)
- {
- RS_CLR;
- RW_CLR;
- EN_SET;
- DataPort = com; //命令寫入端口
- delay_ms(5);
- EN_CLR;
- }
- //***********************************************************************
- // 顯示屏數據寫入函數
- //***********************************************************************
- void LCD_write_data(unsigned char data)
- {
- RS_SET;
- RW_CLR;
- EN_SET;
- DataPort = data; //數據寫入端口
- delay_ms(5);
- 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 main( void )
- {
- // Stop watchdog timer to prevent time out reset
- WDTCTL = WDTPW + WDTHOLD;
- clock_init();
- uchar i,*p;
- Port_init(); //系統初始化,設置IO口屬性
- delay_ms(100); //延時100ms
- LCD_init(); //液晶參數初始化設置
- LCD_clear(); //清屏
- while (1)
- {
- i = 1;
- p = "xxxxxxxx"; //字符串輸出顯示
- LCD_clear();
- LCD_write_str(0,0,"Welcome.DM430-L");
- delay_ms(250);
-
- while (*p) {
- LCD_write_char(i,1,*p); //單個字符輸出顯示
- i ++;
- p ++;
- delay_ms(100); //延時250ms
- }
- delay_ms(250);
- P1OUT^=BIT0;
- }
- }
復制代碼
|
-
-
1602.zip
2020-10-6 15:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
423.5 KB, 下載次數: 28, 下載積分: 黑幣 -5
評分
-
查看全部評分
|