本帖最后由 caizhiwei 于 2015-2-3 16:28 编辑 7 R0 x. G' [- i7 }8 ?
$ q4 n% Y4 {9 A2 k: p3 b 这个液晶估计很少有人知道,但是在工控领域应用非常普遍:1 K7 U( {8 a( Y2 b0 c% Y! w# G J
液晶驱动IC基本特性 6 o& I6 [8 y) F8 e/ w% M
1、具有低功耗、供应电压范围宽等特点。 / p& M0 l; ?: @: M$ y( A& B) T
2、具有16common和61segment输出,并可外接驱动IC扩展驱动。. }4 @) R7 S) N
3、具有2560位显示RAM(DD RAM),即80×8×4位 , R0 E2 E. b+ [. q# b
4、具有与68系列或80系列相适配的MPU接口功能,并有专用的指令集,可完成文本显示或图形显示。) L" K( T& e o# l7 D- f
工作参数 :
* x* o8 T. G7 L# Z; U* m1、逻辑工作电压(VDD-VSS):2.4~6.0V + Z9 Q* d) s7 O8 W
2、LCD驱动电压(Vdd-Vlcd):3.0~13.5V / g) V2 \' |4 N6 k( O) C; {! m
3、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温)- a# y6 G7 |& U& q1 Z
# I6 B, K0 t7 T9 a. R
5 j4 J4 N, D+ k" |* m编程要注意的问题:; t Z+ k$ q& T0 r. J) ^( L
//写入GDRAM 绘图,Y是Y绘图坐标,2个字节一行,X是图形起始坐标,CLONG是图形长度,以字节3 x# E* G3 z5 \1 l
//为单位;HIGHT是图形高度,TAB是图形数据表.12864M的图形显示范围是256*32点阵.
' Q% g0 ?) u; y/ A- {2 \; X//要在12864M里显示全屏,取模时一幅图横切成两半
' A& u6 T: @) |1 j
) v, _; c) w. I1 d5 P/*5 D/ R0 x' @# S8 A# s/ w
ST7920提供64×32 个字节的空间(由扩充指令设定绘图RAM 地址),最多可以控制256×64
8 t. ~7 H% ^# P' b! u6 [点阵的二维绘图缓冲空间,在更改绘图RAM时,由扩充指令设置GDRAM地址先垂直地址后水平1 x( s8 {* a$ X1 {1 S8 o4 S, E( x
地址(连续2个字节的数据来定义垂直和水平地址),再2个字节的数据给绘图RAM(先高8位" r; O+ i6 R7 n) g) e
后低8 位)
' T/ @/ g+ T" a& p6 k1 m
4 i7 J9 g( N6 a( a. c5 ]# e+ C; N- V9 j# R
7 I8 {8 ~9 e0 W# l/ f5 |9 M% @
API函数如下:* _* B/ }+ T: P. H7 e/ R/ T
- #ifndef __LCD12232_H
% T9 O. k3 a- M# \ - #define __LCD12232_H! N2 E( h- |( b6 U; v
9 p3 I+ e6 \$ Q5 z; n- #include "stm32f2xx.h"
8 b3 a% J' L% u4 z) F - # `$ v: |. z+ A: h7 T
- * i: }4 _, |5 m1 k% O0 V" ?. x% \
- extern void Delay(__IO uint32_t nTime);( g% I8 [* x) c: J. f' K9 p
- ! C4 I5 J4 y6 p3 U
- #define LCD_DATA_INPUT GPIOD->MODER &=~0x300000
* A7 r+ b3 o. g - #define LCD_DATA_OUTPUT GPIOD->MODER |= 0x100000
# V: b9 o, D, P, U2 c: g - 6 {1 K3 D5 D* P: Z3 O" o
- #define LCD_CLK_HIGH GPIO_SetBits(GPIOD,GPIO_Pin_11) 2 q) k3 n7 o# c5 f6 b# a6 H7 X
- #define LCD_CLK_LOW GPIO_ResetBits(GPIOD,GPIO_Pin_11)
$ R8 d# n' e6 u3 Q+ H - * h% u& J5 b: t. w+ m0 t' J
- #define LCD_SID_HIGH GPIO_SetBits(GPIOD,GPIO_Pin_12)
( [8 O) w3 t8 R i: c! z. l& T - #define LCD_SID_LOW GPIO_ResetBits(GPIOD,GPIO_Pin_12)
' k6 \& l1 D* T y - * Q$ e5 s8 @; p, R
- #define LCD_CS_HIGH GPIO_SetBits(GPIOD,GPIO_Pin_13) 1 o* Z7 M v. }/ X
- #define LCD_CS_LOW GPIO_ResetBits(GPIOD,GPIO_Pin_13); [: [# V3 X. E+ @& A# G4 l
4 k7 V: K, a% n9 H+ j/ R7 v- #define LCD_SID (uint8_t)(GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_12))
9 ]" w: e- { P$ y
. ~$ A. y8 T! x. B- //#define LCD_BUSY (GPIOE->IDR&0x8000)
$ t$ f5 l1 `$ s' } - ! d& h$ P6 g+ c
- #define BLK_ON GPIO_SetBits(GPIOD,GPIO_Pin_14)
& I# ? a0 e' T% f4 ~; j$ b - #define BLK_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_14)
4 Z! h+ U4 Q1 U' c3 q7 | }$ M - 6 g$ g2 g6 W3 }: O% s. E
- #define writecommand 0xF8) p# y# `) Y6 Q$ L# X( N
- #define writedata 0xFA; L; z5 a6 e5 ~, E$ P; R G) ~- p
- #define readestate 0xFC# Q- X; X4 G) N# ]9 ^9 h
- #define readdata 0xFE
# e7 H1 B/ D8 X' a5 S5 G8 ^- B. z - 2 O' z. e' ]' ?& T
% Q7 r8 |2 d9 r. C# k9 P0 f- static void SendByte(u8 dat);# \7 ]! n; v k# G. P! j* n4 a
- static u8 ReceieveByte(void);
& |+ F; ]$ \( T# o, `, M4 a6 l - static u8 readBF(void);6 c; n0 f* a; J/ G X
- 4 b0 _" z( v4 G$ ?+ \& C
- void LCD_writeCMD(u8 dat);; F% [& f- j$ Y9 a5 Q
- void LCD_writedata(u8 dat);
! y8 Y+ O9 a0 Q. w! ], T" H3 z) [ - void LCD_Init(void);0 I; x5 b; c' M& S. _
' A2 W/ C" J* m8 u0 |- void LCD_Clear_DDRAM(void);
" |* q" B- r' h$ Z- w9 B8 Z - void LCD_Clear_GDRAM(void);
5 F0 r j2 [( |% a7 m& ~& l% {$ q - void LCD_SetPos(u8 row,u8 column);( a9 U0 G; t0 d1 g+ S# o: ]
! n9 b6 N9 w9 D- r* K" @- void ShowASCII(u8 i);
) U# p, m' Z2 D* H _- g; @2 i - void ShowCharPos(u8 row, u8 col,u8 dat);. Z- O, o- L$ S: a* S# I
_0 c0 p$ g5 d4 U- void ShowString(u8 *s);
! G5 h1 I" s0 b7 d - void ShowStringPos(u8 row, u8 col,u8 *s);
6 ]! C/ E; r) h3 v$ [ - 0 S5 k2 F8 S& o5 q- w
- void ShowGB(unsigned char *HZ);3 Q0 a5 t% r' o1 _
- void ShowGBPos(u8 row, u8 col, u8 *HZ);9 s, T5 M- H! i$ K/ a% t8 I
- void ShowGBStringPos(u8 row, u8 col, u8 *s);8 @+ q6 C6 }' V' g" `
- / c' k! o% p9 N4 \: Z
- void Write_USR_CGRAM(u8 data1,u8 data2,u8 addr);
" q' {5 q* z4 Q, I - void Show_USR_CGRAM_Char(u8 addr,u8 i);) g" j) ~8 P+ Z' p! n3 p
7 V+ w* u! y J* ]- void LCD_Test(void);( v# l0 n# L2 s$ E, R0 h
- void ShowBlankPos(u8 row, u8 col, u8 num);
# x' y7 X# G D+ @
$ m; w( m+ @ |( ~5 X- ) G+ H- T2 U% z( j2 F2 Q
- $ X8 }2 j. V" r; Q9 ^0 \8 c4 ]6 T2 x% r
- #endif
复制代码
: S/ ^6 B! y E* o |
LCD.zip
2015-1-13 10:43 上传
点击文件名下载附件
4.13 KB, 下载次数: 25
1.修复了字符串不能自动换行的bug0 l, M0 E( E7 X3 V
2.新增了数字转字符串直接显示的功能(sprintf);