【TI 技术资料分享】msp430+12864串口显示
2019-07-30 16:17发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
本帖最后由 胡斯哲 于 2015-3-14 17:48 编辑
窜口可以节省i/o口 时钟不要太快
- #include <msp430x14x.h>
- #include <math.h>
- //#include "pic.h"
- #define LCD_CS_High P5OUT|=BIT2 // LCD_RS P62
- #define LCD_CS_Low P5OUT&=~BIT2 // LCD_RS
- #define LCD_SID_High P5OUT|=BIT1 // LCD_RW DB0_DB7 P64
- #define LCD_SID_Low P5OUT&=~BIT1 // LCD_RW IR DR
- #define LCD_CLK_High P5OUT|=BIT0 // LCD_EN P63
- #define LCD_CLK_Low P5OUT&=~BIT0 // LCD_EN
- #define LCD_PSB_High P5OUT|=BIT3; //
- #define LCD_PSB_Low P5OUT&=~BIT3; // P30
- //P67 鎮┖
- #define uchar unsigned char
- #define uint unsigned int
- void delay_ms(unsigned int timer)
- {
- unsigned int i;
- for(i=0;i<1000;i--)
- for(;timer>0;timer--)
- ;
- }
- void Send_Byte(unsigned byte)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- LCD_CLK_Low;
- if(byte&0x80)
- {LCD_SID_High; delay_ms(10);}
-
- else
- { LCD_SID_Low ;delay_ms(10);}
- byte<<=1;
- LCD_CLK_High;
- delay_ms(10);
- LCD_CLK_Low;
- delay_ms(10);
- }
- }
- /*鍐欏懡浠ゅ埌娑叉櫠*/
- void LCD_WCMD(unsigned char cmd)
- {
- delay_ms(1);
- Send_Byte(0xf8); //11111,RW(0),RS(0),0;
- delay_ms(2);
- Send_Byte(0xf0&cmd);
- delay_ms(2);
- Send_Byte(0xf0&cmd<<4);
- delay_ms(2);
- }
- /*鍐欐暟鎹埌娑叉櫠*/
- void LCD_WDAT(unsigned char date)
- {
- delay_ms(1);
-
- Send_Byte(0xfa); //11111,RW(0),RS(1),0
- delay_ms(2);
- Send_Byte(0xf0&date);
- delay_ms(2);
- Send_Byte(0xf0&date<<4);
- delay_ms(2);
- }
- uchar re_byte(void)
- {
- uchar re=0,i;
- P6DIR = 0x00;
- for(i=0;i<8;i++)
- {
- LCD_CLK_Low;
- delay_ms(10);
- if(P6IN&0x10)
- {
- re = re| 0x01;
- delay_ms(2);
- re <<= 1;
- }
- else
- {
- re = re| 0x00;
- delay_ms(2);
- re <<= 1;
- }
- LCD_CLK_High; //上升沿触发发送
- delay_ms(10);
- LCD_CLK_Low;delay_ms(2);
- }
- return re;
- }
- unsigned char ReadByte(void)
- {
- unsigned char byReturnValue,a ;
- delay_ms(1);
- Send_Byte(0xfe); //11111,RW(1),RS(1),0
- delay_ms(1);
- byReturnValue=re_byte() ;
- delay_ms(1);
- a=re_byte()>>4;
- byReturnValue = byReturnValue|a;
- return byReturnValue ;
- }
- /*鏄剧ず鐨勫瓧绗︿覆*/
- void Display(unsigned char X,unsigned char Y,unsigned char *string)
- {
- if (X==0)
- {X=0x80;}
- else if (X==1)
- {X=0x90;}
- else if (X==2)
- {X=0x88;}
- else if (X==3)
- {X=0x98;}
- LCD_WCMD(X+Y);
-
- while(*string )
- { //鏄
- LCD_WDAT(*string++);
- }
- }
- void Display_number(unsigned char X,unsigned char Y,unsigned char number)
- {
- if (X==0)
- {X=0x80;}
- else if (X==1)
- {X=0x90;}
- else if (X==2)
- {X=0x88;}
- else if (X==3)
- {X=0x98;}
- LCD_WCMD(X+Y);
- LCD_WDAT(48+number);
- }
- void Clock_init()
- {
- unsigned char t;
- BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL
- BCSCTL1&=~XT2OFF; //鎵撳紑XT2鎸崱鍣?
- do
- {
- IFG1 &= ~OFIFG; // 娓呴櫎鎸崱鍣ㄥけ鏁堟爣蹇?
- for (t = 255; t > 0; t--); // 寤舵椂锛岀瓑寰匵T2璧锋尟
- }
- while ((IFG1 & OFIFG) != 0); // 鍒ゆ柇XT2鏄惁璧锋尟
-
- BCSCTL2 |= SELS+SELM_2; // SMCLK = XT2
- }
- void LCD_init()
- {
- LCD_WCMD(0x34); //鎵嶄綔
- delay_ms(2);
- LCD_WCMD(0x30); //嶄綔
- delay_ms(2);
- LCD_WCMD(0x0C); //鏄叧鍏夋爣
- delay_ms(2);
- LCD_WCMD(0x01); //
- delay_ms(2);
-
- }
- /*------------------------------------------------
- 娓呭睆
- ------------------------------------------------*/
- void ClrScreen()
- {
- LCD_WCMD(0x01);
- delay_ms(15);
- }
- /*------------------------------------------------
- 璁剧疆鍒扮粯鍥炬ā寮?
- ------------------------------------------------*/
- void SetGraphicMode()
- {
- LCD_WCMD(0x36); //閫夋嫨紡
- delay_ms(20);
- }
- /*------------------------------------------------
- 鏄剧ず鍥剧墖
- ------------------------------------------------*/
- void LCD_PutGraphic(unsigned char *img)
- {
- int i,j;
- for(i=0;i<32;i++)
- {
- LCD_WCMD(0x80 + i); //
- LCD_WCMD(0x80); //
- for(j=0;j<16;j++)
- {
- LCD_WDAT(*img);
- img++;
- }
- }
- for(i=0;i<32;i++)
- {
- LCD_WCMD(0x80 + i);
- LCD_WCMD(0x88);
- for(j=0;j<16;j++)
- {
- LCD_WDAT(*img);
- img++;
- }
- }
-
- }
- /*-------------------------------------------------------------------
- 澧炲姞鐢荤偣瀛愮▼搴?
- -------------------------------------------------------------------*/
- void DrawPoint(unsigned char X,unsigned char Y,unsigned char Color)
- {
- unsigned char Row,Tier,Tier_bit ;
- unsigned char ReadOldH,ReadOldL ;
- LCD_WCMD(0x34);
- LCD_WCMD(0x36);
- Tier=X>>4 ;
- Tier_bit=X&0x0f ;
- if(Y<32)
- {
- Row=Y ;
- }
- else
- {
- Row=Y-32 ;
- Tier+=8 ;
- }
- LCD_WCMD(Row+0x80);
- LCD_WCMD(Tier+0x80);
- ReadByte();
- ReadOldH=ReadByte();
- ReadOldL=ReadByte();
- LCD_WCMD(Row+0x80);
- LCD_WCMD(Tier+0x80);
- if(Tier_bit<8)
- {
- switch(Color)
- {
- case 0 :
- ReadOldH&=(~(0x01<<(7-Tier_bit)));
- break ;
- case 1 :
- ReadOldH|=(0x01<<(7-Tier_bit));
- break ;
- case 2 :
- ReadOldH^=(0x01<<(7-Tier_bit));
- break ;
- default :
- break ;
- }
- LCD_WDAT(ReadOldH);
- LCD_WDAT(ReadOldL);
- }
- else
- {
- switch(Color)
- {
- case 0 :
- ReadOldL&=(~(0x01<<(15-Tier_bit)));
- break ;
- case 1 :
- ReadOldL|=(0x01<<(15-Tier_bit));
- break ;
- case 2 :
- ReadOldL^=(0x01<<(15-Tier_bit));
- break ;
- default :
- break ;
- }
- LCD_WDAT(ReadOldH);
- LCD_WDAT(ReadOldL);
- }
- LCD_WCMD(0x30);
- }
- //----------------------------------------------
- // 娓呮暣涓狦DRAM绌洪棿
- //-----------------------------------------------
- void clrgdram()
- {
- unsigned char x,y ;
- for(y=0;y<64;y++)
- for(x=0;x<16;x++)
- {
- LCD_WCMD(0x34);
- LCD_WCMD(y+0x80);
- //琛屽湴鍧€
- LCD_WCMD(x+0x80);
- //鍒楀湴鍧€
- LCD_WCMD(0x30);
- LCD_WDAT(0x00);
- LCD_WDAT(0x00);
- }
- }
- void main( void )
- {
- //char i;
- //unsigned char x1,y1,colour=1 ;
- WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
- Clock_init(); //
- P5DIR=BIT0+BIT1+BIT2+BIT3;
- LCD_PSB_Low;
- LCD_init();
- /*-----------------------------------------------------------------------------
- 鏄剧ず瀛楃
- -----------------------------------------------------------------------------*/
- Display(0,0,"胡斯哲");
- Display(1,0,"武汉交通职业学院");
- Display(2,1,"你好");
- Display(3,2,"2013-7月-11日");
-
- delay_ms(5000);
- _BIS_SR(LPM0_bits);
-
- }
复制代码
一周热门 更多>