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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 583|回復: 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顯示百分比進度條】
//******************************************************************************


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

使用道具 舉報

沙發
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和這個工作原理不一樣,況且我也不會改。

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

使用道具 舉報

5#
ID:584814 發表于 2025-4-1 21:27 | 只看該作者
這玩易貌似沒啥工作原理,好像就是根據百分比大小畫方塊長短吧。
回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

11#
ID:743654 發表于 2025-4-8 08:36 | 只看該作者
進度條實際就是畫線,歷程一般都有哈
回復

使用道具 舉報

12#
ID:828160 發表于 2025-4-8 12:25 | 只看該作者
很簡單的,控制字符反色顯示
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久看片 | 中文字幕人成乱码在线观看 | 中文字幕一区二区三区在线乱码 | 一区二区三区精品视频 | 毛片av免费在线观看 | 日韩一区二区av | 一区二区三区在线播放 | 亚洲欧美日韩一区 | 天天操精品视频 | 国产精品一区三区 | 国产精品综合一区二区 | 免费观看成人性生生活片 | 日韩欧美精品在线 | 久久婷婷av | 久久99精品久久久久久 | 一区二区在线 | 成人精品网 | 国产一区二| 99精品欧美一区二区三区 | 成人精品在线观看 | 最新中文字幕久久 | 夜夜爽99久久国产综合精品女不卡 | 狠狠操天天操 | 午夜影院 | 国产乱码久久久久久 | 一区二区三区高清不卡 | 狠狠狠干 | 婷婷在线视频 | 欧洲一区在线观看 | 午夜理伦三级理论三级在线观看 | 欧美精品福利 | 亚洲欧美中文日韩在线v日本 | 波多野结衣在线观看一区二区三区 | 国产日韩精品视频 | 欧美在线一区二区三区四区 | 日韩一区二区在线播放 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 亚洲精品国产成人 | 福利片在线观看 | 中文字幕亚洲视频 | 日日淫|