MSP430控制手机液晶屏

发布者:滁州鱼儿最新更新时间:2016-08-22 来源: eefocus关键字:MSP430控制  手机液晶屏 手机看文章 扫描二维码
随时随地手机看文章
液晶屏为2.4寸TFT彩屏,

#include 
#define uchar unsigned char
#define uint unsigned int


#include "qqp.H"
#include "ascii hex(8x16).h"
#include "GB2312.h"
uint color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};

void delay_us(uint t);
void delay_us(uint t);

#define LCD_CONTROL_PORT           P5OUT
#define LCD_CONTROL_DIR_PORT       P5DIR
#define LCD_RST     0x01           
#define LCD_RD     0x02           
#define LCD_RS      0x04  
#define LCD_CS      0x08 
#define LCD_WR      0x10

void LCD_WR_REG(uchar index);  
void LCD_WR_DATA8(uchar pd);
void LCD_WR_CMD(uchar index,uint val);
unsigned int LCD_RD_REG16(uchar index);

void LCD_WR_Data(uint val);
void LCD_Init();
void LCD_test();
void LCD_QQ();
void LCD_clear(uint p);

void DisplayChar(uchar casc,uchar postion_x,uchar postion_y);
void DisplayGB2312(uchar gb,uchar postion_x,uchar postion_y);
void DisplayString(uchar *s,uchar x,uchar y);//英文字符串显示.

 

void delay_us(uint t)
{
 t+=170;
 while(--t);
}
void delay_ms(uint t)
{
 uchar i,j;
 while(--t)
 {
  j=5;
  while(--j)
   while(--i);
 }
}

 

void    SET_LCD_CONTROL_PORT()
{
LCD_CONTROL_DIR_PORT&=0X1F;
}

void SET_LCD_RST_HIGH(){LCD_CONTROL_PORT|=LCD_RST; };
void SET_LCD_RST_LOW() {LCD_CONTROL_PORT&=~LCD_RST;};

void SET_LCD_RD_HIGH(){LCD_CONTROL_PORT|=LCD_RST;};
void SET_LCD_RD_LOW() {LCD_CONTROL_PORT&=~LCD_RD;};

 void  SET_LCD_RS_HIGH(){LCD_CONTROL_PORT|=LCD_RS; };
 void  SET_LCD_RS_LOW() {LCD_CONTROL_PORT&=~LCD_RS;};

 void  SET_LCD_CS_HIGH(){LCD_CONTROL_PORT|=LCD_CS; };
 void  SET_LCD_CS_LOW() {LCD_CONTROL_PORT&=~LCD_CS;};

 void SET_LCD_WR_HIGH(){LCD_CONTROL_PORT|=LCD_WR; };
 void SET_LCD_WR_LOW() {LCD_CONTROL_PORT&=~LCD_WR;};

 void  SET_LCD_DATA(unsigned char lcd_data)
{
  P4DIR&=0XFF;
  P4OUT|=lcd_data; 
};
 unsigned int GET_LCD_DATA()
 {
  unsigned int lcd_data1;
   P4DIR|=0X00;
   lcd_data1=P4IN; 
        return(lcd_data1);
 };
          
void LCD_WR_REG(uchar index)
{
 SET_LCD_RS_LOW();
 SET_LCD_CS_LOW ( );
// DATA = index;
 SET_LCD_DATA(index);
 SET_LCD_WR_LOW();
 SET_LCD_WR_HIGH();
 SET_LCD_CS_HIGH();
 SET_LCD_RS_LOW();
}

void LCD_WR_DATA8(uchar pd)
{
 SET_LCD_RS_HIGH();
 SET_LCD_CS_LOW();
// DATA = pd;
 SET_LCD_DATA(pd);
 SET_LCD_WR_LOW();
 SET_LCD_WR_HIGH();
 SET_LCD_CS_HIGH();
 SET_LCD_RS_LOW();
}

void LCD_WR_CMD(uchar index,uint val)
{
 SET_LCD_RS_LOW();
 SET_LCD_CS_LOW();
 //DATA = index;
 SET_LCD_DATA(index);
 SET_LCD_WR_LOW();
 SET_LCD_WR_HIGH();
 SET_LCD_CS_HIGH();
 SET_LCD_RS_LOW();

 SET_LCD_RS_HIGH();
 SET_LCD_CS_LOW();
// DATA = (uchar)(val>>8);
 SET_LCD_DATA(val>>8);
 SET_LCD_WR_LOW();
 SET_LCD_WR_HIGH();
 SET_LCD_CS_HIGH();
 SET_LCD_RS_LOW();
 SET_LCD_RS_HIGH();
 SET_LCD_CS_LOW();
// DATA = (uchar)val;
 SET_LCD_DATA(val);
 SET_LCD_WR_LOW();
 SET_LCD_WR_HIGH();
 SET_LCD_CS_HIGH();
 SET_LCD_RS_LOW();
}

unsigned int LCD_RD_REG16(uchar index)
{
 unsigned int pd,ppd;

 SET_LCD_RS_LOW();
 SET_LCD_CS_LOW();
 _nop_();
 _nop_();

 SET_LCD_DATA(index);
 _nop_();
 _nop_();

 SET_LCD_WR_LOW();
 _nop_();
 _nop_();

 SET_LCD_WR_HIGH();
 _nop_();
 _nop_();

 SET_LCD_RS_HIGH();
 _nop_();
 _nop_();

// DATA = 0xFF;
 SET_LCD_DATA(0xff);
 _nop_();
 _nop_();

 SET_LCD_RD_LOW();
 _nop_();
 _nop_();
 SET_LCD_RD_HIGH();
 pd=GET_LCD_DATA();
// pd = DATA;
 
 pd = pd<<8;

 _nop_();
 _nop_();
// DATA = 0xFF;
 SET_LCD_DATA(0xff);
 SET_LCD_RD_LOW();
 _nop_();
 _nop_();
 SET_LCD_RD_HIGH();
 ppd=GET_LCD_DATA();
 pd = pd + ppd;
 SET_LCD_CS_HIGH();
 SET_LCD_RS_LOW();
 return pd;
}

void LCD_WR_Data(uint val)
{
 //SET_LCD_RS_HIGH();
 //SET_LCD_CS_LOW();
// DATA = (uchar)(val>>8);
        SET_LCD_DATA(val>>8);
 SET_LCD_WR_LOW();
 SET_LCD_WR_HIGH();
 //SET_LCD_RS_HIGH();
// DATA = (uchar)val;
 SET_LCD_DATA((uchar)val);
 SET_LCD_WR_LOW();
 SET_LCD_WR_HIGH();
 //SET_LCD_CS_HIGH();
 //SET_LCD_RS_LOW();
}

void LCD_Init()
{     
        SET_LCD_CONTROL_PORT();
// LCD_RST = 0;
 SET_LCD_RST_LOW();  
 delay_ms(200);
// LCD_RST = 1;
 SET_LCD_RST_HIGH();
 delay_ms(200);

 //initializing funciton 1
 delay_us(10);
 LCD_WR_CMD(0xA1,0x00);
 LCD_WR_CMD(0xA0,0x00);
 delay_us(10);
 LCD_WR_CMD(0x70,0xC8); //Start osc

 delay_ms(20);
 
 //Power Setting
 LCD_WR_CMD(0x72,0xA3);
 LCD_WR_CMD(0x73,0x04); 
 LCD_WR_CMD(0x75,0x45); 
 LCD_WR_CMD(0x76,0x23); 
 LCD_WR_CMD(0x77,0x08); 
 LCD_WR_CMD(0x78,0x08); 
 LCD_WR_CMD(0x79,0x00); 
 LCD_WR_CMD(0x7F,0xF0); 
 LCD_WR_CMD(0x71,0x81); 

 delay_ms(2);
 
 LCD_WR_CMD(0x0D,0x23); 
 //delay_us(10);
 LCD_WR_CMD(0x11,0x00); 
 LCD_WR_CMD(0x12,0x00); 
 LCD_WR_CMD(0x21,0x37); 
 //delay_us(10);
 LCD_WR_CMD(0x22,0x02); 
 //delay_us(10);
 LCD_WR_CMD(0x23,0x24); 
 LCD_WR_CMD(0x24,0x13); 
 LCD_WR_CMD(0x25,0x0A); 
 LCD_WR_CMD(0x26,0x82); 
 LCD_WR_CMD(0x27,0x01); 
 LCD_WR_CMD(0x1E,0x25); 
 LCD_WR_CMD(0x1F,0x59); 
 
 //GAMMA Setting
 LCD_WR_CMD(0x30,0x0777);
 LCD_WR_CMD(0x31,0x0444);
 LCD_WR_CMD(0x32,0x0555);
 LCD_WR_CMD(0x33,0x0444);
 LCD_WR_CMD(0x34,0x0333);
 LCD_WR_CMD(0x35,0x0333);
 LCD_WR_CMD(0x36,0x0333);
 LCD_WR_CMD(0x37,0x0333);
 LCD_WR_CMD(0x38,0x0444);
 LCD_WR_CMD(0x39,0x0555);
 LCD_WR_CMD(0x3A,0x0666);
 LCD_WR_CMD(0x3B,0x0666);
 LCD_WR_CMD(0x3C,0x0777);
 LCD_WR_CMD(0x3D,0x0777);
 LCD_WR_CMD(0x3E,0x0777);
 LCD_WR_CMD(0x3F,0x0777);
 LCD_WR_CMD(0x40,0x0777);
 LCD_WR_CMD(0x41,0x0777);
 LCD_WR_CMD(0x42,0x0777);
 LCD_WR_CMD(0x43,0x0777);
 LCD_WR_CMD(0x44,0x0777);
 LCD_WR_CMD(0x45,0x0777);
 LCD_WR_CMD(0x46,0x0777);
 LCD_WR_CMD(0x47,0x0777);
 LCD_WR_CMD(0x48,0x0777);
 LCD_WR_CMD(0x49,0x0777);
 LCD_WR_CMD(0x4A,0x0777);
 LCD_WR_CMD(0x4B,0x0777);
 LCD_WR_CMD(0x4C,0x0777);
 LCD_WR_CMD(0x4D,0x0666);
 LCD_WR_CMD(0x4E,0x0666);
 LCD_WR_CMD(0x4F,0x0666);
 
 LCD_WR_CMD(0x85,0x74); //在手机和MP4播视频时很重要.

 LCD_WR_CMD(0x00,0x04);
 LCD_WR_CMD(0x01,0x07);

 //LCD display area setting
 LCD_WR_CMD(0x02,0x00);
 LCD_WR_CMD(0x03,0x0000);
 LCD_WR_CMD(0x04,0xEF);
 LCD_WR_CMD(0x05,0x013F);
 LCD_WR_CMD(0x06,0x00);
 LCD_WR_CMD(0x07,0x0000);
 LCD_WR_CMD(0x08,0xEF);
 LCD_WR_CMD(0x09,0x013F);

 LCD_WR_CMD(0x0A,0x00);
 LCD_WR_CMD(0x0B,0x00);
 LCD_WR_CMD(0x0C,0x00);
 LCD_WR_CMD(0x14,0x00);
 LCD_WR_CMD(0x15,0x00);
 LCD_WR_CMD(0x16,0x00);
 LCD_WR_CMD(0x17,0x01FF);
 LCD_WR_CMD(0x18,0x01FF);
 LCD_WR_CMD(0x13,0x00);
 LCD_WR_CMD(0x19,0x01FF);
 LCD_WR_CMD(0x1B,0x01FF);
 LCD_WR_CMD(0x1C,0x01FF);
 LCD_WR_CMD(0x1A,0x01FF); 
 LCD_WR_CMD(0x1D,0x0E);
 LCD_WR_CMD(0x10,0x06);  //开显示.
 LCD_WR_REG(0x0E);
 delay_us(10);
}

 

void LCD_test()
{
 uint temp,num,i;
 uchar n;
 
 LCD_WR_CMD(0x02,0x00);
 LCD_WR_CMD(0x03,0x0000);
 LCD_WR_CMD(0x04,0xEF);
 LCD_WR_CMD(0x05,0x013F);
 
 LCD_WR_REG(0x0E);
 SET_LCD_CS_LOW();
 SET_LCD_RS_HIGH();
 for(n=0;n<8;n++)
 {
     temp=color[n];
  for(num=40*240;num>0;num--)
    LCD_WR_Data(temp);
 }
 for(n=0;n<8;n++)
 {
 LCD_WR_CMD(0x02,0x00);
 LCD_WR_CMD(0x03,0x0000);
 LCD_WR_CMD(0x04,0xEF);
 LCD_WR_CMD(0x05,0x013F);
 
 LCD_WR_REG(0x0E);
 SET_LCD_CS_LOW();
 SET_LCD_RS_HIGH();
     temp=color[n];
  for(i=0;i<240;i++)
  for(num=0;num<320;num++)
    LCD_WR_Data(temp);
 }
 SET_LCD_CS_HIGH();
}
void LCD_QQ()
{
 uint temp,num;
 const unsigned int *p; 
 uchar n,c,g;
 //显示小QQ图标
    for(g=0;g<8;g++)
 {
  for(c=0;c<6;c++)
  {
   LCD_WR_CMD(0x02,c*40);
   LCD_WR_CMD(0x03,g*40);
   LCD_WR_CMD(0x04,c*40+39);
   LCD_WR_CMD(0x05,g*40+39);
   LCD_WR_REG(0x0E);
   SET_LCD_CS_LOW();
   SET_LCD_RS_HIGH();
   p = (uint*)gImage_qqp;
      for(num=0;num<1600;num++) //
   {  
    LCD_WR_Data(*p++);
   }
   //delay_ms(100);   
  }
   }
 SET_LCD_CS_HIGH();
}

void LCD_clear(uint p)
{
 uint i,j;
 
 LCD_WR_CMD(0x02,0x00);
 LCD_WR_CMD(0x03,0x0000);
 LCD_WR_CMD(0x04,0xEF);
 LCD_WR_CMD(0x05,0x013F);
 
 LCD_WR_REG(0x0E);
 SET_LCD_CS_LOW();
 SET_LCD_RS_HIGH();
 for(i=0;i<320;i++)
 {
  for(j=0;j<240;j++)
  {
    LCD_WR_Data(p);
  }
 }
 SET_LCD_CS_HIGH();
}


//8X16点阵的字符显示函数
//参数说明:
//    casc:字符对应字模中的位置
//         x:显示位置第几列,每行是240/8 ==30列
//         y:显示位置第几行,整屏是320/16==20行

void DisplayChar(uchar casc,uchar postion_x,uchar postion_y)
{
 uchar cTemp;
 uchar i,j,b;
 const uchar *p;
 
 LCD_WR_CMD(0x02,postion_x*8);  //x start point
 LCD_WR_CMD(0x03,postion_y*16);  //y start point
 LCD_WR_CMD(0x04,postion_x*8+7); //x end point
 LCD_WR_CMD(0x05,postion_y*16+15); //y end point
 LCD_WR_REG(0x0E);
 SET_LCD_CS_LOW();
 SET_LCD_RS_HIGH();
 p=ascii;
 p+=casc*16;
 for(j=0;j<16;j++)
 {
  b=*(p+j);
  for(i=0;i<8;i++)
  {
   if(b&0x80)
   {
    LCD_WR_Data(0xffff);
   }
   else
   {
    LCD_WR_Data(0x0000);
   }
   b=b<<1;
   
  } 
 }
 SET_LCD_CS_HIGH();
}

//16X16点阵的汉字显示函数
//参数说明:
//    gb:汉字对应字模中的位置
//         x:显示位置第几列
//         y:显示位置第几行
void DisplayGB2312(uchar gb,uchar postion_x,uchar postion_y)
{
 uchar cTemp;
 uchar i,j,b;
 const uchar *p;
 
 LCD_WR_CMD(0x02,postion_x*16);  //x start point
 LCD_WR_CMD(0x03,postion_y*16);  //y start point
 LCD_WR_CMD(0x04,postion_x*16+15); //x end point
 LCD_WR_CMD(0x05,postion_y*16+15); //y end point
 LCD_WR_REG(0x0E);
 SET_LCD_CS_LOW();
 SET_LCD_RS_HIGH();
 p=(char*)GB2132;
 p+=gb*32;
 for(j=0;j<32;j++)
 {
  b=*(p+j);
  for(i=0;i<8;i++)
  {
   if(b&0x80)
   {
    LCD_WR_Data(0xffff);
   }
   else
   {
    LCD_WR_Data(0x0000);
   }
   b=b<<1;   
  } 
 }
 SET_LCD_CS_HIGH();
}

void DisplayString(uchar *s,uchar x,uchar y)//英文字符串显示.
{
 while (*s) 
 { 
  DisplayChar(*s,x,y);
  if(++x>=30)
  {
   x=0;
   if(++y>=20)
   {
    y=0;
   }
  }
  s++;
    }
}


void main()
{
   uchar x=0;
  uchar y=0;
  uchar i;

  LCD_Init();
  LCD_clear(0);
  
    
  //  delay_ms(1000);
      // LCD_test();
  //  delay_ms(2000);
//  LCD_clear(0);
//    LCD_QQ();
  //  delay_ms(2000);
 
 /* delay_ms(2000);
  LCD_clear(0);
  DisplayString("LTM024D250 testing!",0,0);
  delay_ms(500);
  
  LCD_clear(0);
  for(i=2;i<8;i++)
  {
   DisplayGB2312(i-2,i*2,0);
  }
  DisplayString("2009",4,0);
  DisplayString(  "06",10,0);
  DisplayString(  "15",14,0);
  DisplayString(  "14",18,0);
  DisplayString(  "30",22,0);
  DisplayString(  "22",26,0);
   }
 */ 

  
    for(i=0;i<128;i++)
    {
     DisplayChar(i,x,y);
   if(++x>=30)
   {
    x=0;
    if(++y>=20)
    {
     y=0;
    }
   }
  }  
 while(1) ;
 
}

关键字:MSP430控制  手机液晶屏 引用地址:MSP430控制手机液晶屏

上一篇:单片机数字滤波方法
下一篇:MSP430控制段式液晶

推荐阅读最新更新时间:2024-03-16 15:06

MSP430单片机在电源控制中的应用
MSP430系列单片机是美国TI公司生产的新一代16位单片机,是一种超低功耗的混合信号处理器(MixedSignal Processor),它具有低电压、超低功耗、强大的处理能力、系统工作稳定、丰富的片内外设、方便开发等优点,具有很高的性价比,在工程控制等领域有着极其广泛的应用范围。开关Boost稳压电源利用开关器件控制、无源磁性元件及电容元件的能量存储特性,从输入电压源获取分离的能量,暂时把能量以磁场的形式存储在电感器中,或以电场的形式存储在电容器中,然后将能量转换到负载。对DC—DC主回路采用Boost升压斩波电路。 2 系统结构和总设计方案     本开关稳压电源是以 MSP430F449 为主控制器件,它是TI公司生产
[电源管理]
<font color='red'>MSP430</font>单片机在电源<font color='red'>控制</font>中的应用
MSP430控制段式液晶
//****************************************************************************** // MSP-FET430P430 Demo - LCD, Display 0123456 on SBLCDA4 LCD // // Description: Displays 0123456 on SBLCDA4 LCD as used on 430 Day Watch // board. // ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz // //* An exte
[单片机]
MSP430f5529LP通过串口数据控制LED亮灭
根据TI官网的串口回环例程改编,判断串口接收的数据。如果接收到“1”就点亮LED1,熄灭LED2;接收到“2”点亮LED2,熄灭LED1;接收到“3”同时点亮两个LED;接收到“4”同时熄灭两个LED。 演示 串口调试助手设置如下 接线图如下 程序 #include msp430.h void sendstring(unsigned char *p) { while(*p!='') { while(!(UCA0IFG&UCTXIFG)); UCA0TXBUF=*p++; } } int main(void) { WDTCTL = WDTPW + WDTHOLD;
[单片机]
<font color='red'>MSP430</font>f5529LP通过串口数据<font color='red'>控制</font>LED亮灭
矩阵键盘控制forMSP430
/***************************************************************** //文件名 :Keypad.c //描述 :该文件定义与矩阵键盘有关的各种接口、函数,适用于MSP430F149 //编写人 :小邪@清水 //版本号 :1.01 *****************************************************************/ #include msp430x14x.h #include 12864.h uchar keyPressed;
[单片机]
利用单片机MSP430作为控制核心实现六自由度自动寻迹机械人
当代科学技术发展的特点之一就是机械技术,电子技术和信息技术的结合,机器人就是这种结合的产物之一。现代机器人都是由机械发展而来。与传统的机器的区别在于,机器人有计算机控制系统,因而有一定的智能,人类可以编制动作程序,使它们完成各种不同的动作。六自由度自动寻迹搬运机器人就是其中一种,这种搬运机器人不但能够代替人的某些功能,有时还能超过人的体力能力,可以24小时甚至更长时间连续重复运转,还可以承受各种恶劣环境,因此,搬运机器人是人体局部功能的延长和发展。 本设计主要应用单片机MSP430作为控制核心,直流电机、热释电型红外传感器等相结合的系统。它充分发挥了单片机的性能,其优点硬件电路简单,软件功能完善,控制系统可靠,性价比较高等特点
[单片机]
利用单片机<font color='red'>MSP430</font>作为<font color='red'>控制</font>核心实现六自由度自动寻迹机械人
msp430之DMA控制
1.只有F15/16x具有DMA(Direct Memory Access是一种不经过CPU而直接从内存了存取数据的数据交换模式。)为数据告诉传输提供保证。(例如,利用DMA控制器可以直接将ADC转换存储器的内容传送到RAM中)处理数据,而非处理任务。 2.特性: 数据传送无需CPU 块传输可达到65536字节 提高片内外设吞吐能力,每个字或者字节仅需2个MCLK 处理数据是CPU处于低功耗 字节和字可以混合传输 四种传输寻址模式:固定地址到固定地址,固定地址到块地址,块地址到固定地址,块地址到块地址。 触发方式灵活:边沿或电平 单个、块、或突发块传输模式:每次触发DMA操作,可根据需要传输不同模式数据。 3.结构 三个独立的传输
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved