新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TFT畫出矩形

        TFT畫出矩形

        作者: 時間:2016-11-26 來源:網絡 收藏
        51單片機為平臺,用TFT畫出實心矩形!

        以下程序關鍵在于自己的應用,有多余的經歷則可以深入研究!

        本文引用地址:http://www.104case.com/article/201611/321646.htm

        關鍵在于用!!!

        希望能給大家帶來幫助

        #include
        #defineuint unsigned int
        #define uchar unsigned char
        #defineTYPE_LCD_DATA1
        #defineTYPE_LCD_COMMAND0
        #defineLCD_SIZE_X128
        #defineLCD_SIZE_Y160
        #defineDATAP0

        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
        };


        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: command1: 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); //延時

        }



        voidLCD_clear(uchar n)
        {
        uint num;

        LCD_SetRamAddr(0,127, 0,159);

        for(num=20480;num>0;num--)//160*128=20480
        {
        LCD_Wirte_Data16(colors[n]);
        }
        }

        voidLCD_Juxing(uint xStart, uint xEnd, uint yStart, uint yEnd,uchar n)
        {
        uint num,count;

        LCD_SetRamAddr(xStart,xEnd, yStart,yEnd);
        count=(xEnd-xStart)*(yEnd- yStart);
        for(num=count;num>0;num--)//160*128=20480
        {
        LCD_Wirte_Data16(colors[n]);
        }
        }
        void main()
        {
        P2 = 0xff;
        P0 = 0xff;
        LCD_init();
        while(1)
        {
        LCD_Juxing(10, 120,10,150,3);
        }
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 都安| 无棣县| 灌云县| 突泉县| 从江县| 乐陵市| 平安县| 伊春市| 苍山县| 罗城| 潞城市| 临朐县| 铜山县| 揭东县| 叙永县| 广饶县| 阳江市| 洪泽县| 特克斯县| 大化| 上思县| 嘉定区| 纳雍县| 淮北市| 白水县| 汉寿县| 平遥县| 上饶市| 历史| 商河县| 林芝县| 财经| 青浦区| 六枝特区| 河东区| 桐庐县| 福清市| 涪陵区| 揭西县| 武宣县| 庆云县|