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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

國網集中屏HYG160160的單片機驅動子程序

  [復制鏈接]
跳轉到指定樓層
樓主
學習單片機中,想做電動車儀表盤。用12864總覺得屏小,就掏了幾塊國網集中屏HYG160160,主要是拆機的便宜貨源足,折騰了幾天終于把驅動調通了,做一般顯示夠用了,51單片機的網上驅動程序太難找了,參考手冊里的例程做了大量修改,可以任意位置顯示任意大小文字和圖片。自由修改字庫。可方便使用sprintf函數對接。使用方便分享給需要的朋友。說明和注意事項都放在程序注釋中了。

顯示效果


調試中遇到很多坑終于跳出來了。
1,時序問題 例程給的時序延時遠遠不夠,手冊說明是10-100ns ,但我的實際情況是5us,還是cup推逸輸出,不知道是不是模塊自身問題,模塊接口有100歐電阻+47PF電容濾波。子程序延時中我用的是C8051F410 的硬件延時。移植其他51需要根據CPU主頻修改延時函數和更換子程序內的頭文件。



2,字庫掃描方向,配合PCtolcd取模軟件修改即可
3,任意大小字模函數,坑在LCD160160使用的是UC1698驅動,這是彩屏驅動模塊驅動單色液晶需要數據變換,字模寬度必須是3的倍數,高度任意。
  字庫較大多變根據自己需要添加刪除,例程中的繪圖函數沒有使用而是使用任意大小字模圖片顯示函數disp_PLH()替代,節約程序空間

吐槽一下sprintf函數非常好用但做浮點數整形顯示太費空間了 ,大神們做浮點數整形顯示有什么站空間比較小的程序分享一下

驅動函數.h
#ifndef __LCD_160160_H__
#define __LCD_160160_H__
#include<intrins.h>
#include "stdio.h"
#include <STRING.H>

sbit A0  = P1^7;
sbit _WR = P1^6;
sbit _RD = P1^5;
sbit _CS = P1^4;
sbit _RST= P1^3;
#define LCDBUS P0

extern uchar ContrastLevel ; //對比度寄存器
extern xdata u8 disp_tmp[24];          //顯示臨時存儲

extern unsigned char code ASCII_SY[];
extern unsigned char code ASCII6_8[];
extern unsigned char code ASCII9_12[];
extern unsigned char code shuzi2440[];
extern unsigned char code Chinese12_12[];
extern unsigned char code dianliang21_12[];
extern unsigned char code xinhao9_12[];
extern unsigned char code dianling3_12[];
extern void ClearRAM();       //3、清屏函數
extern void initLCDM(void);  //初始化函數 (單色顯示時初始化設置)
extern void SdCmd(uchar Command); //指令代碼傳送函數
/*****************************************************************
函數功能: 任意大小字模圖片顯示函數
入口參數:x,y,num *ziku
說    明:掃描方式為列-行 列塊+1完成后自動換行+1
         x起始列取值范圍0-53,uc1698驅動3色素為1個列塊對應單色像素為3*X點0-159
         y行起始列取值范圍0-160
         num 字塊/圖在字庫中的序號 范圍0-字庫內字數
         *ziku  字庫名字
注    明:注意字模及圖片寬高XX基本信息放在字庫前4位  字模寬度必須是3的倍數
                            1寬度,2高度,3指向索引表,4備用
      例:for(ii=0;ii<25;ii++){        disp_PLH( (ii*2+2), 16, (ii+52),ASCII6_8);}
          disp_PLH( 3,1, 0,bmp_3256)  //顯示一個圖片
******************************************************************/
extern void disp_PLH( uchar x,uchar y,uchar num,uchar *ziku);//任意大小字模顯示模塊
/*****************************************************************************
函數功能: ASCII顯示函數
入口參數:Y,X,*dat *ziku,sizo
說    明:Y行0-160 X_橫坐標0-53 *dat字符串 *ziku字庫, sizo顯示位數
注    明:顯示一串字符或顯示暫存 帶字庫索引功能 X實際像素x*3=159
           要顯示一串字符串 sizo=0,sizo=!0表示顯示暫存位數
例    子:display_ASCII (7,16,disp_tmp, ASCII_68,8);
              display_ASCII (0,0,"abdef+1 23", ASCII_68,0);
              display_ASCII (3,120,"-12:00", shuzi2440,0);
*****************************************************************************/
extern void display_ASCII (u8 X,u8 Y,u8 *dat, u8 *ziku ,u8 sizo);
/*****************************************************************************
函數功能: 中文顯示函數
入口參數: X,Y,*dat *ziku,*SY
說    明:Y行0-160 X_橫坐標0-53 X實際像素x*3=159 *dat字符串 *ziku字庫
注    明:顯示一串中文字符帶字庫索引功能
      例:display_chine(0,0,"電壓",Chinese );
*****************************************************************************/
extern void display_chine(u8 X,u8 Y,u8 *dat, u8 *ziku );

#endif


主程序.c
#include "C8051F410.h"
#include "C8051F410IO.h"
#include "LCD_160160.h"
u8 ii,dl;
u8 xx,yy,wi,hi;
float Wh;
/**********************************
void delay1(uint t)  //1ms
{
    unsigned int i,j;
    for(j=0;j<t;j++)
    for(i=0;i<125;i++);  
}
*************************************/
/************************************************
電量指示
x 圖標顯示x坐標*3像素點 取值0-53
y 圖標顯示y坐標 取值0-160
DL 電量值 0-5格
*************************************************/
void dianliang(uchar x,y,DL)
{ uchar i,DY;
         DY=0;
         for (i=0;i<DL;i++)
          { DY=DY<<1; DY=DY|0x01;        }
                disp_PLH(x,  y,0,dianling3_12);

                for(i=0;i<5;i++)
                  { if ((DY&0x10)==0x10) {disp_PLH(x+i+1,y,3,dianling3_12);}
           else         {disp_PLH(x+i+1,y,2,dianling3_12);}               
                                DY=DY<<1;         
                         }
    disp_PLH(x+6,y,1,dianling3_12);                        
}

//-----------------------------------------------
void main()
{ //unsigned char i;
        Init_Device();
ContrastLevel= 0xc8; //設置對比度參數        //直針c8 彎針fe
initLCDM();
        
//xx=0;wi=160;   yy=0;hi=160;  //xx左 wi右 yy上  hi下
ClearRAM();Delay_ms(10);        
        dl=4;                      //電量4格
        Wh=113.4131879;            //浮點數顯示演示
while(1)
{   
          disp_PLH(2,0,0,xinhao9_12);  disp_PLH(5,0,5,xinhao9_12);//無線信號4格
          display_ASCII (10,0,"2-09-12:39", ASCII9_12,0);            
//          disp_PLH(41,0,0,dianliang21_12);
          dianliang(41,0,dl);                                                    //電量指示
   for(ii=0;ii<26;ii++){        disp_PLH( (ii*2),   18,     ii,    ASCII6_8);}  //(ii*4)x軸為列*3像素實際為ii*8
        
   for(ii=0;ii<13;ii++){        disp_PLH( (ii*4), 30, (ii),    Chinese12_12);}  //(ii*4)x軸為列*3像素實際為ii*12
         
//         for(ii=0;ii<17;ii++){        disp_PLH( (ii*3), 36, (ii),    ASCII9_12);}
         display_ASCII (1,42,"0123abcdDDS*-/]", ASCII9_12,0);

         //for(ii=0;ii<13;ii++){        disp_PLH( (ii*4+2), 48, ii, Chinese12_12);}        
         display_chine(2,56,"電壓電流功率容量報警",Chinese12_12 );           
         
         // for(ii=0;ii<7;ii++){        disp_PLH( (ii*8), 72, ii+1,    shuzi2440);}
                         sprintf(disp_tmp,"%5.2f",(float)Wh);  //打印輸出至disp_temp數組內
                  display_ASCII (0,72,disp_tmp, shuzi2440 ,8);        
         
   display_ASCII (1,112,"PPTMabdef+1 23-/k8;\:", ASCII6_8,0);
         display_ASCII (2,120,"-12:00", shuzi2440,0);

Delay_ms(1000);
//ShowBMP(xx,yy,wi,hi, CCTAB) ;        

Delay_ms(100);
ClearRAM();Delay_ms(0);
SdCmd(0x81); SdCmd(ContrastLevel);Delay_ms(1);//設置對比度 bf
}
}


C8051F410單片機程序下載: LCD_160160.rar (105.23 KB, 下載次數: 81)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:34298 發表于 2023-2-24 13:18 | 只看該作者
非常好 我也買了2塊 剛好學習一下
回復

使用道具 舉報

板凳
ID:309610 發表于 2023-3-2 22:10 | 只看該作者
補充一下  時序延時問題原因找到了是我的MCU P1口驅動能力不足。真坑! 原版是并口驅動占用IO較多搭焊一片74HC164改成了串口。RD可直接接VDD,res 也可用電阻阻電容組成上電復位。最終只需要6個IO腳。
速度問題 我是49Mhz 主頻單周期執行指令不需要延時,比起并口一點也不慢。全屏數據刷新大約20HZ。[img][/img]
下附串口驅動和顯示例子

20230302_214849.jpg (1.81 MB, 下載次數: 90)

20230302_214849.jpg

LCD160160串口驅動.rar

13.85 KB, 下載次數: 25, 下載積分: 黑幣 -5

回復

使用道具 舉報

地板
ID:688905 發表于 2023-3-9 16:54 來自手機 | 只看該作者
感謝高手分享!我收了幾個用排針的,原想接到esp8266上做成天氣萬年歷,無奈實力不濟,您能將上面的代碼封裝成arduino的庫嗎?
回復

使用道具 舉報

5#
ID:34298 發表于 2023-7-29 19:17 | 只看該作者
高手   這樣的屏5元一個咸魚到處在賣
回復

使用道具 舉報

6#
ID:34298 發表于 2023-9-23 01:04 來自手機 | 只看該作者
有stc單片機的160160屏程序沒有
回復

使用道具 舉報

7#
ID:774081 發表于 2023-12-29 15:42 | 只看該作者
直接用兩片級聯來驅動,只需要3個口就可以了。話說這屏本來可跳線成3線或4線SPI串口,樓主研究了嗎?這個屏幕是否引出了可跳線的管腳?
回復

使用道具 舉報

8#
ID:87000 發表于 2024-9-18 09:24 | 只看該作者
剛好手里面有這個屏,下載來瞧瞧
回復

使用道具 舉報

9#
ID:712493 發表于 2024-9-18 13:59 | 只看該作者
fancunwu 發表于 2023-9-23 01:04
有stc單片機的160160屏程序沒有

都是51  直接稍稍移植一下就可以!
回復

使用道具 舉報

10#
ID:71233 發表于 2024-9-26 10:48 | 只看該作者
這屏幕好大,字符容量大,好用!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩波多野结衣 | 97碰碰碰| 亚洲精品久久久久久久不卡四虎 | 国产乱码精品一区二区三区忘忧草 | 国产成人精品久久 | 美女一级毛片 | 亚洲视频在线一区 | 精品国产乱码久久久久久图片 | 亚洲综合在线视频 | 日韩精品人成在线播放 | 欧美日韩国产一区二区三区 | 亚洲日本欧美日韩高观看 | 亚洲少妇综合网 | 亚洲精选久久 | 三区四区在线观看 | 视频一区中文字幕 | 日本国产一区二区 | 国产一级黄色网 | 少妇性l交大片免费一 | 国内精品久久久久久 | 97精品超碰一区二区三区 | 91免费高清| 玖玖综合网| 特黄色毛片| 欧美一区二区三区 | 亚洲 欧美 另类 日韩 | 国产成人精品久久久 | 一级黄色片网址 | 国产伦精品一区二区三区四区视频 | 看a网站| 久久精品在线播放 | 久久国产精品久久 | 亚洲精品片 | 国产成在线观看免费视频 | 日日骚视频 | 精品国产一二三区 | 日韩欧美一级片 | 91偷拍精品一区二区三区 | 免费中文字幕 | 久久久五月天 | 欧美视频成人 |