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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機控制LCD12864液晶屏顯示圖形菜單

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年10月20日   【字體:

想了很久,每次做菜單都受限于12864字符模式的各種限制,比如字體大小,不能顯示圖標等等,沒有任何效果,這次就來個徹底的解脫,寫一個單函數就能完成所有功能的函數,只需要2個圖片就能完成任意菜單內容的菜單,可以有2的8次方=256個選擇結果,應該能滿足所有的要求了吧?菜單的內容就是圖片的內容,因此可以顯示任意大小的圖形文字混合的菜單條目,比如使用字符模式,一屏只能顯示4行菜單(64/16=4),且只能顯示漢字和字符等,顯示位置等等的都受限,而這個方法可以顯示比如12*12(64/12=5行)的字符,8*8(64/8=8行)的字符,甚至不是字符,可以是圖標+文字+任意其他的圖像,只要是圖片能顯示的,都可以。。哈哈,比較復雜,現在只寫了一少半,預期能夠提供多種顯示效果,希望我能完成。。。。

void Lcd_Draw_BmpMenu(UINT8 *pMenu,UINT8 *pTitleBmp,UINT8 *pMenuBmp)
{
/*使用2張圖片作為純圖形菜單來選擇和操作,返回被選擇的項,pMenu是一個指向菜單的各種參數的結構體的指針,pTitleBmp指向作為菜單標題的一張圖片,pMenuBmp指向作為菜單內容的圖片(液晶的控制芯片是ST7920)

yx-->>

|

\|/

*/

xdata struct { //除非另有說明x坐標均為大列的坐標,一個大列是16個像素,一行共有8大列數據
//========= 以下是入參基本參數,一旦確定,最好不要隨意更改 ======
UINT8 Title_x;//標題圖片在屏幕上的顯示起始位置X
UINT8 Title_y;//標題圖片在屏幕上的顯示起始位置Y
UINT8 Title_Len_x;//標題圖片的寬
UINT8 Title_Len_y;//標題圖片的高
UINT8 Menu_x;//菜單在屏幕上的顯示起始位置X
UINT8 Menu_y;//菜單在屏幕上的顯示起始位置Y
UINT8 Menu_End_y;//菜單在屏幕上的顯示結束位置Y
UINT8 Menu_Bmp_x;//菜單圖片的寬
UINT8 Menu_Bmp_y;//菜單圖片的高
UINT8 Menu_Item_Height;//每一菜單項的高度(像素為單位)
UINT8 Line_x;//最后下劃線的起始坐標x
UINT8 Line_y;//最后下劃線的起始坐標Y
UINT8 Line_Len;//最后下劃線的長度,如果為0,則表示不畫出這條線(像素為單位)
//====== 以下是菜單的風格設置 ========

UINT8 Scroll_Speed;//菜單滾動的速度,0~9個級別,越低越快,越高越慢(液晶屏顯示速度有快有慢,調整這個參數用于適用不同的液晶屏
UINT8 Continue_Scroll;//指定菜單是否可以形成一個連續滾動選擇的效果;0不連續,背景和反白位置都會根據實際情況滾動 1菜單連續滾動,反白位置不動
UINT8 RePaint;//=0不重畫菜單,=1重畫整個菜單的圖像,一般都是首次調用本函數的時候置1,用于畫出整個菜單,以后調用置0就可以了
UINT8 MenuEffect;//菜單運動的效果;0沒有任何效果,只是最普通的菜單形態,1平滑滾動,2平滑滾動,具有慣性效果,3具有減速效果,沒有慣性效果,4具有減速和慣性效果

//====== 以下用于控制菜單的選擇參數 =======
UINT8 Last_Select_Item;//上次執行本函數后,所選擇的菜單項
UINT8 Select_Item;//本次執行本函數,要選擇的菜單項
}M;


//============== 以下是變量定義 ===============
UINT8 xdata Menu_Item_Count;//總共有幾個菜單項
UINT8 xdata Menu_Screen_Count;//當前一屏最多可以顯示幾個菜單項
UINT8 xdata Menu_Box_x,Menu_Box_y,Menu_Box_End_x,Menu_Box_End_y;//需要刷新的區域的坐標
UINT8 *pMenu_Box_Bmp;//需要顯示的菜單項的指針
StructCopy(&M.Title_x,pMenu,19);//把參數復制到本函數內,便于操作
Menu_Item_Count=M.Menu_Bmp_y/M.Menu_Item_Height;//總共有幾個菜單項
Menu_Screen_Count=(M.Menu_End_y-M.Menu_y)/M.Menu_Item_Height;//一屏最多可以顯示多少項菜單

//---------------------------------------------------------------------------
if(M.RePaint==1)//如果需要重畫整個菜單圖像
{
Lcd_Draw_BMP(M.Title_x,
M.Title_y,
M.Title_x+M.Title_Len_x,
M.Title_y+M.Title_Len_y,
pTitleBmp
);//畫出標題的圖片

if(M.Line_Len!=0)
Lcd_DrawRowLine(M.Line_x,M.Line_y,M.Line_Len,1);//畫出最下面的線
}
//---------------------------------------------------------------------------
//-----------需要刷新的圖像的區域
Menu_Box_x=M.Menu_x;
Menu_Box_y=M.Menu_y;
Menu_Box_End_x=M.Menu_x+M.Menu_Bmp_x;
Menu_Box_End_y=M.Menu_End_y;
。。。。。 還沒有寫完。。。

關閉窗口

相關文章

主站蜘蛛池模板: 91精品国产综合久久小仙女图片 | 性欧美精品一区二区三区在线播放 | 国产999精品久久久 日本视频一区二区三区 | 成人免费xxxxx在线视频 | 亚洲激精日韩激精欧美精品 | 日韩电影一区 | 亚洲精品在线看 | 精品国产精品国产偷麻豆 | 91福利在线观看视频 | 国产在线精品一区二区三区 | 欧美一区二区在线观看 | 91精品国产乱码久久蜜臀 | 久久综合成人精品亚洲另类欧美 | 在线成人www免费观看视频 | 亚洲综合伊人 | 亚洲成av人片在线观看 | 亚洲欧美在线视频 | 一级黄色片美国 | 日本精品一区二区 | 97视频在线观看免费 | 日韩在线 | 91亚洲国产成人久久精品网站 | av天天看| 亚洲手机视频在线 | 亚洲国产精品人人爽夜夜爽 | 中文字幕在线精品 | 日产精品久久久一区二区福利 | 夜夜夜操| 国产高清在线精品一区二区三区 | 羞羞的视频在线观看 | 日韩亚洲一区二区 | 成人影视网址 | 欧美激情亚洲天堂 | 在线观看av网站永久 | 国产片侵犯亲女视频播放 | 久久精品一区二区三区四区 | 一级a性色生活片久久毛片 一级特黄a大片 | 日韩欧美三区 | 午夜激情视频在线 | 国产美女久久久 | 国产精品久久久久久久久久妞妞 |