【TI 技术资料分享】msp430+12864
2019-07-30 17:16发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
本帖最后由 胡斯哲 于 2015-3-14 17:48 编辑
12864并口显示图片
- #include <msp430x14x.h>
- #include <math.h>
- #define LCD_RS_High P6OUT|=0x04 // LCD_RS 高电平 显示数据 P62
- #define LCD_RS_Low P6OUT&=0xfb // LCD_RS 低电平 指令数据
-
- #define LCD_RW_High P6OUT|=0x10 // LCD_RW 高电平 数据读到DB0_DB7 P64
- #define LCD_RW_Low P6OUT&=0xef // LCD_RW 低电平 DB0_DB7 数据写入IR DR
- #define LCD_EN_High P6OUT|=0x08 // LCD_EN 高电平 高有效 P63
- #define LCD_EN_Low P6OUT&=0xf7 // LCD_EN 低电平 使能信号
- #define LCD_PSB_High P3OUT|=0x01; // 并口 高电平
- #define LCD_PSB_Low P3OUT&=0xfe; // 串口 低电平 P30
- //P67 悬空
- unsigned char pic1[]= // 图片代码
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFC,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0xFF,0xBC,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFC,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF8,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF8,0x10,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFC,0x10,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0x5B,0xB0,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x18,0x30,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x10,0x30,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x30,0x20,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x03,0xFC,0xF0,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x90,0x27,0xC0,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x01,0x93,0xFC,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x01,0x10,0x20,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x03,0xFC,0x3C,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x10,0x06,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x10,0x84,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x03,0xFC,0x2C,0x00,0x00,0x00,0x37,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x10,0x38,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x10,0x06,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x3F,0x0F,0xFF,0xFF,0xFF,0xBF,
- 0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x7F,0x4F,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x7F,0x0F,0xFF,0xFF,0xFF,0xBF,
- 0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0xFF,0x07,0xFF,0x7F,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x7F,0x01,0xCF,0x7F,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x00,0x01,0xFF,0x10,0x00,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x00,0x00,0x00,0xFF,0x03,0x87,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x01,0xFF,0x1F,0xC7,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x03,0xFD,0x1F,0xC7,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x80,0x00,0x01,0xFC,0x3F,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0x80,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xC0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x01,0x3F,0xC0,0x10,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x02,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x47,0xFF,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- };
- void delay_ms(unsigned int timer)
- {
- unsigned int i;
- for(i=0;i<1000;i--)
- for(;timer>0;timer--)
- ;
- }
- unsigned char lcd_busy()
- {
- unsigned char result;
-
- P4DIR=0x00;
- LCD_RS_Low; // 指令数据
- LCD_RW_High;
- LCD_EN_High;
-
- result = P4IN&0x80; // 读取数据口数据
- LCD_EN_Low;
-
- return(result);
- }
- /*写命令到液晶*/
- void LCD_WCMD(unsigned char cmd)
- {
- while(lcd_busy());
- P4DIR=0xff; // OUT;
- LCD_RS_Low; // 指令数据
- LCD_RW_Low;
- // LCD_EN_Low;
- LCD_EN_High;
- P4OUT = cmd;
-
- LCD_EN_Low;
- }
- /*写数据到液晶*/
- void LCD_WDAT(unsigned char dat)
- {
- while(lcd_busy());
-
- P4DIR=0xff; // OUT;
- LCD_RS_High; // 数据
- LCD_RW_Low;
- // LCD_EN_Low;
-
- LCD_EN_High;
- P4OUT = dat;
-
-
- LCD_EN_Low;
- }
- unsigned char ReadByte(void)
- {
- unsigned char byReturnValue ;
- while(lcd_busy());
- P4DIR=0xff;
- P4OUT = 0xff;
- P4DIR=0x00;
- LCD_RS_High; ;
- LCD_RW_High; ;
- LCD_EN_Low ;
- LCD_EN_High ;
- byReturnValue=P4IN ;
- LCD_EN_Low ;
-
- 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--); // 延时,等待XT2起振
- }
- while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
-
- BCSCTL2 |= SELS+SELM_2; // SMCLK = XT2
- }
- /*液晶初始化*/
- void LCD_init()
- {
- LCD_WCMD(0x34); //扩充指令操作
- LCD_WCMD(0x30); //基本指令操作
- LCD_WCMD(0x0C); //显示开,关光标
- LCD_WCMD(0x01); //清除LCD的显示内容
-
- }
- /*------------------------------------------------
- 清屏
- ------------------------------------------------*/
- void ClrScreen()
- {
- LCD_WCMD(0x01);
- delay_ms(15);
- }
- /*------------------------------------------------
- 设置到绘图模式
- ------------------------------------------------*/
- void SetGraphicMode()
- {
- LCD_WCMD(0x36); //选择8bit数据流 图形模式
- delay_ms(20);
- }
- /*------------------------------------------------
- 显示图片
- ------------------------------------------------*/
- void LCD_PutGraphic(unsigned char *img)
- {
- int i,j;
- //显示上半屏内容设置
- for(i=0;i<32;i++)
- {
- LCD_WCMD(0x80 + i); //SET 垂直地址 VERTICAL ADD
- LCD_WCMD(0x80); //SET 水平地址 HORIZONTAL ADD
- for(j=0;j<16;j++)
- {
- LCD_WDAT(*img);
- img++;
- }
- }
- //显示下半屏内容设置
- for(i=0;i<32;i++)
- {
- LCD_WCMD(0x80 + i); //SET 垂直地址 VERTICAL ADD
- LCD_WCMD(0x88); //SET 水平地址 HORIZONTAL ADD
- 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);
- }
- //----------------------------------------------
- // 清整个GDRAM空间
- //-----------------------------------------------
- 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(); // 时钟初始化
- P6DIR=0x1c;
- P3DIR=0x01;
- LCD_PSB_High; // 液晶显示 并口方式
-
- LCD_init();
- /*-----------------------------------------------------------------------------
- 显示字符
- -----------------------------------------------------------------------------*/
- /*Display(0,0,"电子园");
- Display(1,0,"www.cepark.com");
- Display(2,1,"2013年06月4日");
- Display(3,5,"numen"); // 第四行要显示的内容
- */
- /*-----------------------------------------------------------------------------
- 显示图片
- -----------------------------------------------------------------------------*/
- /* ClrScreen(); //清屏
- SetGraphicMode(); //设置成绘图模式
- LCD_PutGraphic(pic1); //调入一幅图画
- for(i=0;i<20;i++)
- delay_ms(200);*/
- /*----------------------------------------------
- 打点程序
- ----------------------------------------------*/
- clrgdram();
- ClrScreen();
- for(x1=0;x1<128;x1++)
- {
- y1=10*sin(0.314*x1)+20; //T=2pi/w
- DrawPoint(x1,y1,colour);
-
- }
- delay_ms(5000);
- _BIS_SR(LPM0_bits);
-
- }
复制代码
一周热门 更多>