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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 724|回復: 11
收起左側

求大神幫忙搞個LCD12864顯示進度條

[復制鏈接]
ID:61140 發表于 2025-3-29 20:48 | 顯示全部樓層 |閱讀模式
因為要學習LCD12864,想弄個初始百分比進度條顯示,想三天也沒搞明白
在此求教大神了

這里是我的原程序,
直接在本程序后面再弄個子函數方便調用即可,在此謝謝各位大神!!!


//******************************************************************************
#include "hong.h"
void   Delay(u8 us);                         //定義微秒程序
void   DelayMs(u16 ms);                      //定義毫秒程序
void   WriteDataLCD(u8 WDLCD);               //給LCD12864寫數據
void   WriteCommandLCD(u8 WCLCD);            //給LCD12864寫指令
void   LCDInit(void);                        //LCD12864初始化
void   LCDClear(void);                       //LCD12864清屏
void   CheckBusy(void);                      //忙檢測
void   LCDSendWord(u8 *p);                   //向LCD發送一個字符串
void   DisplayImage(u8 code *DData);         //顯示一幅128*64圖片程序
void   LCDTestWord(bit i,u8 word);           //向LCD寫數據或指令
//******************************************************************************
sbit    LCD_RS = P4^5;                       //高電平數據低電平指令
sbit    LCD_RW = P4^2;                       //高電平讀低電平寫
sbit    LCD_E  = P4^4;                       //LCD12864使能控制端
#define LCD_Data P2                          //LCD12864數據端口
#define Busy    0x80                         //用于檢測LCD狀態字中的Busy標識
//******************************************************************************
//***************************【LCD12864相關功能】*******************************
//******************************************************************************
//【LCD12864忙檢測函數】
void CheckBusy(void)
{
LCD_RS=0;                                   //RS置低電平
LCD_RW=1;                                   //RW置高電平
LCD_E=1;                                    //E置高電平
LCD_Data=0xff;
while((LCD_Data&0x80)==0x80);
LCD_E=0;                                    //E置低電平
Delay(50);                                 //延時一點時間
}

//【向LCD12864寫數據】
void WriteDataLCD(u8 WDLCD)
{
  CheckBusy();                               //檢測忙
  LCD_RS = 1;                                //RS為高電平,DB7----DB0為數據      
  LCD_RW = 0;                                //RW為低電平,E從高電平到低電平,則是把DB7----DB0的數據寫到DR或者IR
  LCD_E = 1;
  LCD_Data = WDLCD;                          //傳送數據WDLCD
  Delay(50);                                //延時一點時間
  LCD_E = 0;                                 //E低電平
  Delay(50);                                //延時一點時間
}

//【向LCD12864寫指令】
void WriteCommandLCD(u8 WCLCD)               //BuysC為0時忽略忙檢測
{
  CheckBusy();                               //檢測忙
  LCD_RS = 0;                                //RS為低,DB7----DB0為指令
  LCD_RW = 0;                                //RW為低,E從高電平到低電平,則是把DB7----DB0的數據寫到DR或者IR
  LCD_E = 1;
  LCD_Data = WCLCD;                          //傳送數據
  Delay(50);
  LCD_E = 0;                                 //E低電平
  Delay(50);
}

//【LCD12864初始化】

void LCDInit(void)
{
  WriteCommandLCD(0x30);                     //顯示模式設置,開始要求每次檢測忙信號
        Delay(40);                               //延時一點時間
  WriteCommandLCD(0x01);                     //顯示清屏
        Delay(40);                               //延時一點時間
  WriteCommandLCD(0x06);                     // 顯示光標移動設置
        Delay(40);                               //延時一點時間
  WriteCommandLCD(0x0C);                     // 顯示開,無游標,不反白
        Delay(40);                               //延時一點時間
}

//【LCD12864清屏】
void LCDClear(void)
{
  WriteCommandLCD(0x01);                     //顯示清屏
        Delay(100);                               //延時一點時間
}

//【向LCD12864發送一個字符串】
void LCDSendWord(u8 *p)                      //向LCD發送一個字符串,
{
while(*p>0)                                 //比如void LCDSendWord('你好');就是讓LCD顯示"你好"
{
  WriteDataLCD(*p);                          //橫向字符自動加   
  p++;
}
}

//【向LCD12864寫數據或者指令】
void LCDTestWord(bit i,u8 word)
{
if(i==0)                                    
{
  WriteCommandLCD(word);                     //如果i=0;則寫入指令
}
else
{
  WriteDataLCD(word);                        //如果i=1;則寫入數據  
}
}

//******************************************************************************
//【名稱:128*64圖片顯示函數 ,圖片取模值放到數組gImage_gxw】
//******************************************************************************
void DisplayImage(u8 code *DData)
{
    u8 x,y,i;                                //定義x,y,i三個變量
    u16 tmp=0;                               //定義一個16位變量
    for(i=0;i<9;)                            //分兩屏,上半屏和下半屏,因為起始地址不同,需要分開
    {
    for(x=0;x<32;x++)                        //32行
    {
    WriteCommandLCD(0x34);                   //關閉繪圖功能
    WriteCommandLCD((u8)(0x80+x));           //列地址
    WriteCommandLCD((u8)(0x80+i));           //行地址,下半屏,即第三行地址0X88
    WriteCommandLCD(0x30);                                                 //正常顯示功能
    for(y=0;y<16;y++)   
    WriteDataLCD(DData[tmp+y]);              //讀取數據寫入LCD
    tmp+=16;        
    }
    i+=8;
    }
    WriteCommandLCD(0x36);                   //擴充功能設定(打開繪圖功能)
    WriteCommandLCD(0x30);                   //正常顯示功能
    Delay(50);               
}
//******************************************************************************
//【名稱:128*64顯示百分比進度條】
//******************************************************************************


回復

使用道具 舉報

ID:69038 發表于 2025-3-30 09:47 | 顯示全部樓層
給你一段代碼參考一下,這個是TFT上用的:
  1. //小進度條
  2. #define pb_x 10   // 進度條x坐標
  3. #define pb_y 115  // 進度條y坐標
  4. #define pb_w 206  // 進度條左右尺寸,3+3+200,核心長200
  5. #define pb_h 12   // 進度條上下尺寸,3+3+6,  核心高6
  6. #define pb_bc RED // 進度條框色
  7. #define pb_fc BLUE// 進度條芯色


  8. void  rst_Progress_bar() //重置小進度條@固定位置
  9. {
  10.        
  11. save_color();                                              //保存大環境的前景、背景色
  12.         POINT_COLOR =pb_fc;                               //重設前景色
  13.         BACK_COLOR=pb_bc;                                 //重設背景色
  14. LCD_Fill(0,pb_y-1,240,pb_y+pb_h+1,GREEN);  //清除進度條所在位置的顏色
  15. LCD_DrawRectangle(pb_x, pb_y, pb_x+pb_w+6, pb_y+pb_h);            //進度條外框
  16. LCD_DrawRectangle(pb_x+1, pb_y+1, pb_x+pb_w+5, pb_y+pb_h-1); //進度條外框
  17. recall_color();   //回調大環境的前景、背景色
  18.        
  19. }
  20. void  set_Progress_bar(u8 value) //設小進度條當前值@固定位置
  21. {

  22. save_color();
  23.         POINT_COLOR =pb_fc;
  24.         BACK_COLOR=pb_bc;
  25. LCD_DrawLine(pb_x+4+value, pb_y+3, pb_x+4+value, pb_y+pb_h-2);  //畫進度條內核
  26. recall_color();
  27. }
復制代碼



回復

使用道具 舉報

ID:61140 發表于 2025-4-1 09:28 | 顯示全部樓層
zhuls 發表于 2025-3-30 09:47
給你一段代碼參考一下,這個是TFT上用的:

TFT和這個工作原理不一樣,況且我也不會改。
回復

使用道具 舉報

ID:69038 發表于 2025-4-1 11:22 | 顯示全部樓層
xiaoyuxinke 發表于 2025-4-1 09:28
TFT和這個工作原理不一樣,況且我也不會改。

工作原理是不一樣,但進度條的原理相差無幾。
如果改不了代碼,就只能等待,等待有人剛好有相似的項目,并且愿意分享,然后把代碼發上來了。
回復

使用道具 舉報

ID:584814 發表于 2025-4-1 21:27 | 顯示全部樓層
這玩易貌似沒啥工作原理,好像就是根據百分比大小畫方塊長短吧。
回復

使用道具 舉報

ID:320097 發表于 2025-4-4 21:21 | 顯示全部樓層
這不就是一個簡單的繪圖么,計算你需要的坐標和內容就可以了,不過帶7920那種字庫的屏幕好像只能滿屏繪圖,不能在某一個位置單獨繪
回復

使用道具 舉報

ID:61140 發表于 2025-4-5 21:07 | 顯示全部樓層
歐陽云天 發表于 2025-4-4 21:21
這不就是一個簡單的繪圖么,計算你需要的坐標和內容就可以了,不過帶7920那種字庫的屏幕好像只能滿屏繪圖, ...

正確,確實是這樣的,所以一直犯愁
回復

使用道具 舉報

ID:69038 發表于 2025-4-5 22:50 | 顯示全部樓層
誰說不能指定位置指定大小繪圖?
ST7920可以字符模式和繪圖模式任意切換,圖文混合隨心所欲。。
本壇有很多7920的時鐘、萬年厲的代碼,里邊都有相關的案例,你可以搜一下。
回復

使用道具 舉報

ID:879348 發表于 2025-4-7 09:03 | 顯示全部樓層
拿現成是不可能的,思路是單片機開辟一個RAM,然后再刷新屏幕,操作這個RAM比直接操作屏幕方便一點
回復

使用道具 舉報

ID:275826 發表于 2025-4-7 14:45 | 顯示全部樓層
歐陽云天 發表于 2025-4-4 21:21
這不就是一個簡單的繪圖么,計算你需要的坐標和內容就可以了,不過帶7920那種字庫的屏幕好像只能滿屏繪圖, ...

可以畫點,線等任意圖形,進度條就是畫豎線呀,很簡單的
回復

使用道具 舉報

ID:743654 發表于 2025-4-8 08:36 | 顯示全部樓層
進度條實際就是畫線,歷程一般都有哈
回復

使用道具 舉報

ID:828160 發表于 2025-4-8 12:25 | 顯示全部樓層
很簡單的,控制字符反色顯示
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线一区视频 | 精品国产精品三级精品av网址 | 一区二区三区回区在观看免费视频 | 在线欧美视频 | jlzzjlzz欧美大全 | 中文字幕亚洲精品 | 久久av网 | 永久免费av | 欧美日日| 久久国产精品久久久久久 | 亚洲成人免费观看 | 亚洲国产精品久久久久婷婷老年 | 在线免费观看黄a | 国产精品18hdxxxⅹ在线 | 欧美αv | 国产精品免费播放 | 岛国毛片在线观看 | 中文字幕一区二区三区日韩精品 | 欧美九九九| 欧美福利| 久久久精品一区二区三区 | 91精品久久久久久久久 | 亚洲高清视频在线观看 | 久久精品国产一区二区电影 | 亚洲一区二区三区在线播放 | 亚洲在线一区二区 | 国产永久免费 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 精品国产一区二区三区性色av | 欧美一区二区三区国产 | 亚洲人在线播放 | 视频在线一区二区 | 99精品国产一区二区三区 | 精品一区二区免费视频 | 一本大道久久a久久精二百 国产成人免费在线 | 久久精品久久久久久 | 欧美日韩在线视频一区二区 | 国产精品欧美一区二区三区不卡 | 欧美三级电影在线播放 | 国产精品一区二区三区久久久 | 天天舔天天 |