久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5306|回復: 6
打印 上一主題 下一主題
收起左側

顯示透明背景字符在單片機上咋弄? 俺來支招。

[復制鏈接]
跳轉到指定樓層
樓主
       地球上的愛好者或沒有留意,若在已有的界面上疊加透明背景字,不大影響界面表現,但卻美美地新增了文字信息,似乎平添了一“顯示域”。但是流行字符顯示方法卻硬要把背景與字跡一同寫出,出字就見方疤,放哪哪不爽。以俺《觸摸屏》貼為例,空心透明的鍵控符號很大方,杵那都不討嫌,明示卻不妨圖,可謂親和也。
招式描述:
1、其實忒簡單,也非俺發明,竟然就是LCD都支持的“直接寫點”法,屬于撿來的應用招式(習慣性的口出“招式”、“命門”之類,都怪金庸俠文給鬧的)。
及有字跡的地方就寫點,沒有就不寫,于是立馬透明”了?珊薜氖牵蠰CD都笨笨的沿用寫點自動遞增屏點地址的搞法,不寫他就不走,所以才不     成。
2、這要用到所有LCD屏都支持的的定位指令,如例程片段里的“  {LCD_SetDispAddr(x1,y1); LLCD_WRITE_DATA(color); y1++;} “。  然后不論寫點與否都遞增地址,這樣行了。
3、靠譜的辦法是把字庫和圖庫放到SD卡或flash里。單片機的容量空間實在太金貴,STC單片機的容量最大的也只64K字節,俺用的單幅圖片就要150K字節,那夠消費呢? 好在STC的SPI接口與SD卡和flash都可直連,不要任何外圍電路,忒方便。
4、”寫點法“意外派生了新的名堂,及錯位雙寫就有了立體字的效果。俺還利用錯位雙寫異色透明圖標的辦法有效防止了同色背景淹沒圖標的現象。
5、動態顯示透明字時會出現討厭的字跡存留現象,需要背景整屏或局部刷新。此時正規的高端方法顯得有用了,高端的方法是讀出將被覆蓋的圖形顯存內容,依序分別保存原始與最新圖形內容備用,加入字庫數據異或運算處理,然后回寫之。得失輕重各有分說。


















代碼片段鑒賞:
//==================本地字庫  16x24  寫點成字=============================================
void LCD_X_HZ1624(unsigned char x, unsigned char y, unsigned int color,unsigned char const *lcdHZ)
{
    u8 k,x1=x,y1=y,CharCode,Cnt;
    for (k=0;k<48;k++){ CharCode = *lcdHZ;   
       for(Cnt=0;Cnt<8;Cnt++) {
            if((CharCode&0x80)==0x80){LCD_SetDispAddr(x1,y1); LLCD_WRITE_DATA(color); y1++;}
      else {y1++;}      
       if((y1-y)>15){x1++;y1=y;}  CharCode<<=1;}
         *lcdHZ++;      }                        
}            

//========SD字庫 51x80  逐點寫屏,透明背景(每字占512字節)======================
void LCD_X_ZF5180(u16 x, u16 y,u16 color,u32 add)
{
     u16 x1=x,y1=y;   u8 CharCode,Cnt;
     u16 temp,d=508;                             //每字符508字節。
   u8 table[]={0x51,0x00,0x00,0x00,0x00,0xff}; //寫入讀頁命令幀CMD17
     add=add*512;
        table[1]=((add&0xff000000)>>24);         //填入地址
      table[2]=((add&0x00ff0000)>>16);
      table[3]=((add&0x0000ff00)>>8);
      table[4]=add;     
           SPI_SD_CS =0;                     
    do{ temp=write_cmd(table); }while(temp!=0);
     SPI_SendByte(0xff);
     while(SPI_SendByte(0xff)!=0xfe);            
       while(d--)                                //讀SD卡直接寫dX8個點
     {
             CharCode = SPI_SendByte(0xff);
          for(Cnt=0;Cnt<8;Cnt++) {
            if((CharCode&0x80)==0x80){LCD_SetDispAddr(x1,y1); LLCD_WRITE_DATA(color); y1++;}
        else {y1++;}      
          if((y1-y)>79){x1++;y1=y;}  CharCode<<=1;
                                   }
         }      
     SPI_SendByte(0xff);                      //空讀校驗碼約定動作
     SPI_SendByte(0xff);
     SPI_SD_CS =1;
     SPI_SendByte(0xff);
}        

//=============讀SD圖形庫直接寫屏(每幅150K字節)============================
//-----------     LCD_WRITE_DATA(SPI_SendByte為寫屏命令----------------------------------------------
//-----------     SPI_SendByte 為兩用SD卡寫讀命令------------------------------------------------------------
void SD_TX_ALL(u32 add)
  {  
      u16 temp,c=300,d;                           //每幅圖占150.36K字節,合300頁。
      u8 table[]={0x51,0x00,0x00,0x00,0x00,0xff}; //寫入讀頁命令幀CMD17  
      add=add*512;                    
      adderset(0,239,0,319);                                   //開窗  
   while(c--){         
        table[1]=((add&0xff000000)>>24);              //填入地址   
        table[2]=((add&0x00ff0000)>>16);
        table[3]=((add&0x0000ff00)>>8);     
        table[4]=add;     
            add=add+512;                                       //頁遞增   
     SPI_SD_CS =0;                     
    do{ temp=write_cmd(table); }while(temp!=0);     SPI_SendByte(0xff);
     while(SPI_SendByte(0xff)!=0xfe);          d=256;                                 //每次兩字節搞256次為一頁
     while(d--)                                                                                            //讀SD卡直接寫屏  
         { LCD_WRITE_DATA(SPI_SendByte(0xff),SPI_SendByte(0xff)); }
     SPI_SendByte(0xff);                                                                         //空讀校驗碼約定動作   
     SPI_SendByte(0xff);
     SPI_SD_CS =1;     
     SPI_SendByte(0xff);
                }   
}

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:507641 發表于 2021-7-29 12:11 | 只看該作者
初學,還沒看懂多看看唄,有原型更直接,51也能實現吧?
回復

使用道具 舉報

板凳
ID:517951 發表于 2021-7-30 08:54 | 只看該作者
AT89C52 肯定干不了,速度太慢。 STM32F10x系列72Mhz的LCD總線連接+DMA方式應該可以
回復

使用道具 舉報

地板
ID:777208 發表于 2023-3-12 16:02 | 只看該作者
我想顯示一個透明無背景的進度條圖標怎么實現呀?
回復

使用道具 舉報

5#
ID:777208 發表于 2023-3-12 17:00 | 只看該作者
請教一下,LCD_SetDispAddr(x1,y1)函數內容是什么?
回復

使用道具 舉報

6#
ID:149799 發表于 2023-3-12 20:59 | 只看該作者
這樣做確實美觀,又增加了功能,謝謝分享經驗。
回復

使用道具 舉報

7#
ID:156220 發表于 2024-6-21 11:00 | 只看該作者
又學習了一招。謝謝樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩一区二区 | 一区二区三区精品视频 | 日本精品一区二区 | 久久影音先锋 | 亚洲 欧美 日韩 在线 | 国产成人久久精品一区二区三区 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 成人精品一区二区三区 | 国产精品美女久久久久久久网站 | 亚洲精品二三区 | 亚洲精品3 | 久久蜜桃资源一区二区老牛 | 亚洲精品女优 | 亚洲成av人影片在线观看 | 日韩欧美三区 | 亚洲一区二区免费电影 | 欧美视频区 | 蜜桃av一区二区三区 | 日韩视频精品在线 | 中文字幕a√| 久久中文字幕一区 | 一区视频 | 亚洲第一视频网 | 国产精品高清一区二区 | 在线观看亚洲专区 | 欧美成人一区二免费视频软件 | 国精品一区二区 | 亚洲视频在线播放 | 51ⅴ精品国产91久久久久久 | 国产精品久久久久久福利一牛影视 | 婷婷色国产偷v国产偷v小说 | 亚洲精品一区在线观看 | 国产免费色 | 农村真人裸体丰满少妇毛片 | 日日爱视频 | 91在线电影| 国产乱码精品一区二区三区av | gogo肉体亚洲高清在线视 | 成年网站在线观看 | 国产在线观看一区二区 | 天天看天天操 |