单片机
返回首页

TFT画出任意斜率的直线

2015-10-16 来源:eefocus

   在之前共享的几篇关于TFT的应用程序中,大家可以看出程序的主要框架没有发生大的变化;变化的只是将带你用的函数做了更为灵活的改变!

  所以大家学习程序时,一定要能从长篇的程序中找出精华,并及时拷贝下来做积累,最终能够灵活的应用!! 

这篇文章或许是关于TFT的最后一遍文章了!再有也只是TFT的应用程序!

  只要大家能掌握之前的几篇文章,就可以自己灵活的应用了!!!TFT画出任意斜率的直线

#include
#define  uint unsigned int
#define uchar unsigned char
#define  TYPE_LCD_DATA  1
#define  TYPE_LCD_COMMAND 0
#define  LCD_SIZE_X  128
#define  LCD_SIZE_Y  160
#define  DATA   P0
sbit LCD_RST  = P2^7;    //RST 引脚定义
sbit LCD_RD   = P3^2;  //RD  引脚定义
sbit LCD_WR   = P3^3;  //WR  引脚定义
sbit LCD_RS   = P2^5;  //RS  引脚定义
sbit LCD_CS   = P2^6;  //CS  引脚定义
uint colors[]=
{
  0xf800,0x07e0,0x001f,0xffe0,0x0000,0x07ff,0xf81f,0xffff ,0x7bef
};
void delay_ms(uint ms)
{
  unsigned char k;
  while (ms--)
  {
    for (k = 0; k < 228; k++)
      ;
  }
}


void LCD_Write(uchar type, uint value) 
{
 LCD_CS = 0;
 LCD_RS  = type;      // 0: command    1: data
 
 LCD_WR  = 0;
 DATA  = (uchar)value;;
 LCD_WR  = 1;
 LCD_CS = 1;
}

 



void LCD_Wirte_Data16(uint value)    // color data
{
 LCD_CS = 0;
    LCD_RS  = 1;
 LCD_WR  = 0;
 DATA  = (uchar)value;
 LCD_WR  = 1;
 LCD_WR  = 0;
 DATA  = (uchar)(value>>8) ;
 LCD_WR  = 1;
 LCD_CS = 1;
}


void Reg_Write(uint reg,uint value)
{
   LCD_Write(TYPE_LCD_COMMAND,reg);
   LCD_Write(TYPE_LCD_DATA,value);
}



void LCD_SetRamAddr(uint xStart, uint xEnd, uint yStart, uint yEnd)
{
    Reg_Write(0x09, xStart);
    Reg_Write(0x10, yStart);
    Reg_Write(0x11, xEnd);
    Reg_Write(0x12, yEnd);
    Reg_Write(0x18, xStart);
 Reg_Write(0x19, yStart);
    LCD_Write(TYPE_LCD_COMMAND,0x22);  // 0x22
}



void LCD_init(void)

 uint num;
 Reg_Write(0x0001,0x0002);  //MODE_SEL1
 Reg_Write(0x0002,0x0012);   //MODE_SEL2
 Reg_Write(0x0003,0x0000);   //MODE_SEL3
 Reg_Write(0x0004,0x0010); //MODE_SEL3
 LCD_SetRamAddr(0,127, 0,159);
 for(num=20480;num>0;num--)
    LCD_Wirte_Data16(0xffff);
  
 Reg_Write(0x0005,0x0008);   //VCO_MODE 
 Reg_Write(0x0007,0x007f); //VCOMHT_CTRL
 Reg_Write(0x0008,0x0017);   //VCOMLT_CTRL     
 Reg_Write(0x0009,0x0000);   //write SRAM window start X point
 Reg_Write(0x0010,0x0000);   //write SRAM window start y point
 Reg_Write(0x0011,0x0083);   //write SRAM window end x point
 Reg_Write(0x0012,0x009f);   //write SRAM window end y point
 Reg_Write(0x0017,0x0000);   //SRAM contrl
 Reg_Write(0x0018,0x0000);   //SRAM x position
 Reg_Write(0x0019,0x0000);   //SRAM y position
 Reg_Write(0x0006,0x00c5);   //DAC_OP_CTRL2
 delay_ms(10); //延时

}

//打点函数
void Dadian(uint Xposition, uint Yposition,uint n)
{
    uint  num ;
    LCD_SetRamAddr(Xposition,Xposition,Yposition ,Yposition);
   for(num=2;num>0;num--)         
   LCD_Wirte_Data16(colors[n]);
}

void Xiexian(uint x1,uint y1,uint x2,uint y2,uint color) 

    uint t; 
    int xerr=0,yerr=0,delta_x,delta_y,distance; 
    int incx,incy; 
    uint row,col; 
    delta_x = x2-x1;//计算坐标增量 
    delta_y = y2-y1; 
    col=x1; 
    row=y1; 
    if(delta_x>0) incx=1;//设置单步方向 
    else  
    { 
        if(delta_x==0) incx=0;//垂直线 
        else {incx=-1;delta_x=-delta_x;} 
    } 
    if(delta_y>0)incy=1; 
    else 
    { 
        if(delta_y==0) incy=0;//水平线 
        else
       {
 incy=-1;
 delta_y=-delta_y;
 
    } 
    if(delta_x>delta_y) distance=delta_x;//选取基本增量坐标轴 
    else distance=delta_y; 

    for(t=0;t<=distance+1;t++) 
                                     //画线输出 
     Dadian(col, row, color);
        xerr+=delta_x; 
        yerr+=delta_y; 
       if(xerr>distance) 
        { 
            xerr-=distance; 
            col+=incx; 
        } 
        if(yerr>distance) 
        { 
            yerr-=distance; 
            row+=incy; 
        } 
    } 
}
void main()
{
  P2 = 0xff;
     P0 = 0xff;
     LCD_init();
  while(1)
  {
  Xiexian(0,0,100,160,0);
  }
}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章