|
學(xué)習(xí)單片機(jī)中,想做電動(dòng)車儀表盤。用12864總覺得屏小,就掏了幾塊國網(wǎng)集中屏HYG160160,主要是拆機(jī)的便宜貨源足,折騰了幾天終于把驅(qū)動(dòng)調(diào)通了,做一般顯示夠用了,51單片機(jī)的網(wǎng)上驅(qū)動(dòng)程序太難找了,參考手冊(cè)里的例程做了大量修改,可以任意位置顯示任意大小文字和圖片。自由修改字庫。可方便使用sprintf函數(shù)對(duì)接。使用方便分享給需要的朋友。說明和注意事項(xiàng)都放在程序注釋中了。
顯示效果
IMG_20230209_155521.jpg (2.07 MB, 下載次數(shù): 54)
下載附件
2023-2-9 21:40 上傳
調(diào)試中遇到很多坑終于跳出來了。
1,時(shí)序問題 例程給的時(shí)序延時(shí)遠(yuǎn)遠(yuǎn)不夠,手冊(cè)說明是10-100ns ,但我的實(shí)際情況是5us,還是cup推逸輸出,不知道是不是模塊自身問題,模塊接口有100歐電阻+47PF電容濾波。子程序延時(shí)中我用的是C8051F410 的硬件延時(shí)。移植其他51需要根據(jù)CPU主頻修改延時(shí)函數(shù)和更換子程序內(nèi)的頭文件。
IMG_20230209_211125.jpg (2.92 MB, 下載次數(shù): 58)
下載附件
2023-2-9 21:40 上傳
2,字庫掃描方向,配合PCtolcd取模軟件修改即可
3,任意大小字模函數(shù),坑在LCD160160使用的是UC1698驅(qū)動(dòng),這是彩屏驅(qū)動(dòng)模塊驅(qū)動(dòng)單色液晶需要數(shù)據(jù)變換,字模寬度必須是3的倍數(shù),高度任意。
字庫較大多變根據(jù)自己需要添加刪除,例程中的繪圖函數(shù)沒有使用而是使用任意大小字模圖片顯示函數(shù)disp_PLH()替代,節(jié)約程序空間
吐槽一下sprintf函數(shù)非常好用但做浮點(diǎn)數(shù)整形顯示太費(fèi)空間了 ,大神們做浮點(diǎn)數(shù)整形顯示有什么站空間比較小的程序分享一下
驅(qū)動(dòng)函數(shù).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 ; //對(duì)比度寄存器
extern xdata u8 disp_tmp[24]; //顯示臨時(shí)存儲(chǔ)
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、清屏函數(shù)
extern void initLCDM(void); //初始化函數(shù) (單色顯示時(shí)初始化設(shè)置)
extern void SdCmd(uchar Command); //指令代碼傳送函數(shù)
/*****************************************************************
函數(shù)功能: 任意大小字模圖片顯示函數(shù)
入口參數(shù):x,y,num *ziku
說 明:掃描方式為列-行 列塊+1完成后自動(dòng)換行+1
x起始列取值范圍0-53,uc1698驅(qū)動(dòng)3色素為1個(gè)列塊對(duì)應(yīng)單色像素為3*X點(diǎn)0-159
y行起始列取值范圍0-160
num 字塊/圖在字庫中的序號(hào) 范圍0-字庫內(nèi)字?jǐn)?shù)
*ziku 字庫名字
注 明:注意字模及圖片寬高XX基本信息放在字庫前4位 字模寬度必須是3的倍數(shù)
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) //顯示一個(gè)圖片
******************************************************************/
extern void disp_PLH( uchar x,uchar y,uchar num,uchar *ziku);//任意大小字模顯示模塊
/*****************************************************************************
函數(shù)功能: ASCII顯示函數(shù)
入口參數(shù):Y,X,*dat *ziku,sizo
說 明:Y行0-160 X_橫坐標(biāo)0-53 *dat字符串 *ziku字庫, sizo顯示位數(shù)
注 明:顯示一串字符或顯示暫存 帶字庫索引功能 X實(shí)際像素x*3=159
要顯示一串字符串 sizo=0,sizo=!0表示顯示暫存位數(shù)
例 子: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);
/*****************************************************************************
函數(shù)功能: 中文顯示函數(shù)
入口參數(shù): X,Y,*dat *ziku,*SY
說 明:Y行0-160 X_橫坐標(biāo)0-53 X實(shí)際像素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 圖標(biāo)顯示x坐標(biāo)*3像素點(diǎn) 取值0-53
y 圖標(biāo)顯示y坐標(biāo) 取值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; //設(shè)置對(duì)比度參數(shù) //直針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; //浮點(diǎn)數(shù)顯示演示
while(1)
{
disp_PLH(2,0,0,xinhao9_12); disp_PLH(5,0,5,xinhao9_12);//無線信號(hào)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像素實(shí)際為ii*8
for(ii=0;ii<13;ii++){ disp_PLH( (ii*4), 30, (ii), Chinese12_12);} //(ii*4)x軸為列*3像素實(shí)際為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,"電壓電流功率容量報(bào)警",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數(shù)組內(nèi)
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);//設(shè)置對(duì)比度 bf
}
}
51hei.png (3.63 KB, 下載次數(shù): 51)
下載附件
2023-2-9 23:51 上傳
C8051F410單片機(jī)程序下載:
LCD_160160.rar
(105.23 KB, 下載次數(shù): 81)
2023-2-9 22:14 上傳
點(diǎn)擊文件名下載附件
HYG160160驅(qū)動(dòng)子程序 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|