你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MBED下的SPI驱动TFT的程序

[复制链接]
一花一世界003 发布时间:2015-2-2 18:54
花了一下午时间写完并且测试我的程序,现在共享出来补给一下
#include "mbed.h"

SPI device(SPI_MOSI, SPI_MISO, SPI_SCK);
QQ截图20150202184406.png QQ截图20150202184432.png
其中SPI_MOSI对应你的开发板上面的默认的MOSI,MISO,SCK引脚
QQ截图20150202184739.png
//这是我的板子上面的引脚分布图,SPI协议引脚都有在上面
typedef unsigned char uchar;
typedef unsigned int uint;
DigitalOut rs(D10);
//RS,是这种液晶屏幕的一个重要引脚,也常常标记为PC
DigitalOut cs(D9);
//CS与片选使能还是有一定区别
DigitalOut reset(D8);
//RESET复位引脚
uchar bitdata;
void  delay(uint t);

延时函数
void delay(uint time)
{
uint i,j;
  for(i=0;i<time;i++)
   for(j=0;j<2500;j++);
}
写命令
void  write_command(uchar c)
{
cs=0;
rs=0;
bitdata=c;
device.write(bitdata);
cs=1;      
}
写数据
void  write_data(uchar d)
{
cs=0;
rs=1;
bitdata=d;
device.write(bitdata);
cs=1;
}
写16位数据
void wr_com16(unsigned char i,unsigned char j)   
{         
  cs=0;
  rs=1;
  bitdata=i;
device.write(bitdata);
cs=1;  
  cs=0;
rs=1;
bitdata=j;
device.write(bitdata);
cs=1;

}
写命令与数据
void LCD_Write_COM_DATA(uchar i,uint j)   
{         
write_command(i);
wr_com16(j>>8,j);
}

初始化液晶屏幕
void lcd_initial()
{
   reset=0;
   delay(100);
   reset=1;
   delay(100);
    LCD_Write_COM_DATA(0x10, 0x0000); // Set SAP,DSTB,STB
    LCD_Write_COM_DATA(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC
    LCD_Write_COM_DATA(0x12, 0x0000); // Set BT,DC1,DC2,DC3
    LCD_Write_COM_DATA(0x13, 0x0000); // Set GVDD
    LCD_Write_COM_DATA(0x14, 0x0000); // Set VCOMH/VCOML voltage
    delay(40); // Delay 20 ms

    // Please follow this power on sequence
    LCD_Write_COM_DATA(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC
    LCD_Write_COM_DATA(0x12, 0x1121); // Set BT,DC1,DC2,DC3
    LCD_Write_COM_DATA(0x13, 0x0063); // Set GVDD
    LCD_Write_COM_DATA(0x14, 0x3961); // Set VCOMH/VCOML voltage
    LCD_Write_COM_DATA(0x10, 0x0800); // Set SAP,DSTB,STB
    delay(10); // Delay 10 ms
    LCD_Write_COM_DATA(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC
    delay(30); // Delay 30 ms


    LCD_Write_COM_DATA(0x02, 0x0100); // set 1 line inversion


    //R01H:SM=0,GS=0,SS=1 (for details,See the datasheet of ILI9225)
    LCD_Write_COM_DATA(0x01, 0x011C); // set the display line number and display direction
    //R03H:BGR=1,ID0=1,ID1=1,AM=0 (for details,See the datasheet of ILI9225)
    LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction.


    LCD_Write_COM_DATA(0x07, 0x0000); // Display off
    LCD_Write_COM_DATA(0x08, 0x0808); // set the back porch and front porch
    LCD_Write_COM_DATA(0x0B, 0x1100); // set the clocks number per line
    LCD_Write_COM_DATA(0x0C, 0x0000); // CPU interface
    LCD_Write_COM_DATA(0x0F, 0x0501); // Set Osc
    LCD_Write_COM_DATA(0x15, 0x0020); // Set VCI recycling
    LCD_Write_COM_DATA(0x20, 0x0000); // RAM Address
    LCD_Write_COM_DATA(0x21, 0x0000); // RAM Address

    //------------------------ Set GRAM area --------------------------------//
    LCD_Write_COM_DATA(0x30, 0x0000);
    LCD_Write_COM_DATA(0x31, 0x00DB);
    LCD_Write_COM_DATA(0x32, 0x0000);
    LCD_Write_COM_DATA(0x33, 0x0000);
    LCD_Write_COM_DATA(0x34, 0x00DB);
    LCD_Write_COM_DATA(0x35, 0x0000);
    LCD_Write_COM_DATA(0x36, 0x00AF);
    LCD_Write_COM_DATA(0x37, 0x0000);
    LCD_Write_COM_DATA(0x38, 0x00DB);
    LCD_Write_COM_DATA(0x39, 0x0000);


    // ---------- Adjust the Gamma 2.2 Curve -------------------//
    LCD_Write_COM_DATA(0x50, 0x0603);
    LCD_Write_COM_DATA(0x51, 0x080D);
    LCD_Write_COM_DATA(0x52, 0x0D0C);
    LCD_Write_COM_DATA(0x53, 0x0205);
    LCD_Write_COM_DATA(0x54, 0x040A);
    LCD_Write_COM_DATA(0x55, 0x0703);
    LCD_Write_COM_DATA(0x56, 0x0300);
    LCD_Write_COM_DATA(0x57, 0x0400);
    LCD_Write_COM_DATA(0x58, 0x0B00);
    LCD_Write_COM_DATA(0x59, 0x0017);



    LCD_Write_COM_DATA(0x0F, 0x0701); // Vertical RAM Address Position
    LCD_Write_COM_DATA(0x07, 0x0012); // Vertical RAM Address Position
    delay(50); // Delay 50 ms
    LCD_Write_COM_DATA(0x07, 0x1017); // Vertical RAM Address Position  

}
设置显示位置的命令
void addset(unsigned int x,unsigned int y)
{
   LCD_Write_COM_DATA(0x20,x);
  //write_command(0x20);
   // LCD_Write_COM_DATA(0x36,x);
  //wr_com16(x>>8,x);
  LCD_Write_COM_DATA(0x21,y);
  //write_command(0x21);
   // LCD_Write_COM_DATA(0x36,x);
  //wr_com16(y>>8,y);
    write_command(0x22);
}
显示区域设置命令
void Lcd_SetRegion(uchar xStar, uchar yStar,uchar xEnd,uchar yEnd)
{

    LCD_Write_COM_DATA(0x36,xEnd);
    LCD_Write_COM_DATA(0x37,xStar);
    LCD_Write_COM_DATA(0x38,yEnd);
    LCD_Write_COM_DATA(0x39,yStar);
    LCD_Write_COM_DATA(0x20,xStar);
    LCD_Write_COM_DATA(0x21,yStar);

    write_command(0x22);   
}
屏幕清除命令
void Lcd_Clear(uchar DH,uchar DL)               
{   
   unsigned int i,m;
   Lcd_SetRegion(0,0,175,219);
   for(i=0;i<175;i++)
    for(m=0;m<219;m++)
    {   
        wr_com16(DH,DL);
    }   
}



int main() {
    lcd_initial();
   Lcd_Clear(0x07,0xe0);//绿色
/*RGB
#define RED          0xf800
#define GREEN        0x07e0
#define BLUE         0x001f
#define WHITE        0xffff
#define BLACK        0x0000
#define YELLOW  0xFFE0
#define GRAY0   0xEF7D          
#define GRAY1   0x8410             
#define GRAY2   0x4208             

*/
   while(1);
    {}
}


收藏 评论6 发布时间:2015-2-2 18:54

举报

6个回答
我夏了夏天 回答时间:2015-2-2 19:28:05
这是自己写的还是MBED上的?
wu1169668869 回答时间:2015-2-2 20:21:04
程序要是大些就不好调试了吧
sacq12 回答时间:2015-2-2 21:52:26
好分享,谢楼主
一花一世界003 回答时间:2015-2-3 12:50:53
我夏了夏天 发表于 2015-2-2 19:28
这是自己写的还是MBED上的?

当然是自己写的
时光碎了天 回答时间:2015-2-3 13:14:40
很不错的
20091217083309-1058990770.jpg
wgsxsm 回答时间:2015-2-4 09:24:57
马克,谢谢楼主。。。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版