& `" A! U( }! ^9 j3 E' ^
3 w' t* b+ R0 N; L5 W+ H
Nokia_5110.h头文件 <span]Nokia_5110.h头文件 <span]
, E; d0 Y$ c# u0 X5 E1 j#ifndef]#ifndef]8 E( ]* W: j; Z
#include"HZ_12x12_pixel.h"
! s h& c4 |' U0 u" d#include"english_6x8_pixel.h"8 p& r. m) k+ o
#define uchar unsigned char
& z- _7 D9 W1 M& ~/ T#define uint unsigned int
( e+ \$ R. L% V# ]) \5 K5 c+ t/ [#define ulong unsigned long
- r$ y. u a& N, J#define true 1* X2 o! L4 P( {& v, H# K
#define flase 0 /////////////引脚定义////////////// <span]/////////////引脚定义////////////// <span]void Delay_1uS(void);; ]4 C$ J0 m8 F2 n o, A( u5 R
void LCD_Init(void);; M4 h5 }) s2 V
void LCD_set_XY(unsigned char X, unsigned char Y);3 a; X9 a" i0 S
/*-----------------------------------------------------------------------; p: j2 v) p2 x6 g! S3 j) W; W
LCD_write_english_String : 英文字符串显示函数 输入参数:*s]输入参数:*s]-----------------------------------------------------------------------*/
; B9 O/ U# U- w* }4 Wvoid LCD_write_english_string(unsigned char X,unsigned char Y,char *s);
* q5 ~( B r2 ?! c: Ovoid TestLCD_Nokia5110(void); unsigned]unsigned]+ \! b# k6 s g, S* Q7 L( o( ~6 O
void displayonechar1212(uchar row,uchar page,uchar dd); //显示 12*12 点阵5 x* I! i8 Y! x8 t J, f7 T
void write_byte(uchar dd,uchar a); //写数据或指令 0:指令 1:数据 #define]#define]#define c_LCD_Max_Dot_X 84; @$ I5 E# c" s; ?
#define c_LCD_Max_Dot_Y 48 $ \ B, A" W: W O: @% d
#define]: I+ z, U- Y7 t! d# U
#define]- q2 l; s6 b1 n
void delay_1us(void) //1us延时函数2 n8 ~5 [- ^# E( U# [
{
2 `3 R, N3 F1 N, \( L/ k5 J unsigned int i;0 a+ @8 Z) p! `$ \8 p: A1 I' Y
for(i=0;i<1000;i++);5 J6 r3 X! t- p9 e- Z# A7 Q6 \
} ]]/*****************************************************************/ /*-----------------------------------------------------------------------
& U5 V/ a: f, }! Y$ O9 oLCD_write_byte]/*-----------------------------------------------------------------------
7 u. O2 d5 r0 @9 N4 RLCD_write_byte]输入参数:data :写入的数据;
2 y2 T H! O( r command :写数据/命令选择; -----------------------------------------------------------------------*/
/ e, m5 m) }" J0 a ~# R6 a' R1 V% Bvoid]-----------------------------------------------------------------------*/' a- R: h( \0 g3 i* L7 U- w {
void] //SCE = 0;
8 z) S) V- c( g //DC = 0;
- W9 ^2 k6 N8 {8 u" j7 f GPIO_ResetBits(GPIOD, NOKIA_SCE);
4 _) b# V6 J6 @' E1 @# k& k# L GPIO_ResetBits(GPIOD, NOKIA_DC); ]] //SCE = 1;$ U8 _. E4 ^# c M- |
GPIO_SetBits(GPIOD, NOKIA_SCE);, F9 Y2 o" Z8 v8 P! M* L
} /*-----------------------------------------------------------------------
$ T$ m+ D/ {7 y% N8 g6 bLCD_write_byte]/*-----------------------------------------------------------------------5 S) m$ a/ F7 m: K- e
LCD_write_byte]输入参数:data :写入的数据;
6 c7 `6 G! B, J: r% t( A' K command :写数据/命令选择;-------------------------*/' }' D5 x! q5 {; u* B
void LCD_write_Data(unsigned char ucWriteData)* @# K; Z t) O z5 d+ y8 Z. Y
{
* ^6 f k! x# h! I0 E8 ` unsigned char uci; ]] for(uci=0;uci<8;uci++), _/ K$ V! g" V _ a% k. m
{
/ |" W# e1 a) R; [6 X if(ucWriteData & 0x80)
! b e6 Z. N7 r" s- k* a {. D- C( S. Q8 @3 w6 S% y* \
//SDIN = 1;6 T- Y5 m0 O+ t/ v9 Q
GPIO_SetBits(GPIOD, NOKIA_SDIN);
+ s) F5 ^8 Q# z8 I }
/ t5 ~3 z6 s9 S- @8 n. L! C else
6 {3 r s( M; i' b. W( ?, U {
9 G! w5 d' ~9 J- T, p$ Q$ b6 C //SDIN = 0; X8 D1 L% e# Q1 i( Y, b' ^" K
GPIO_ResetBits(GPIOD, NOKIA_SDIN);/ ~! j4 Z5 y0 w. k& }
}. R* t: i8 K. B3 W. E* ]+ k( I
//SCLK = 0;
( {/ i) L, G+ q3 O: p GPIO_ResetBits(GPIOD, NOKIA_SCLK);. a' a' U1 X& ?$ E
ucWriteData = ucWriteData << 1;
5 S. K' l3 o7 d) Z, H: o //SCLK = 1;( M5 { c7 ?- n- R1 B r9 |
GPIO_SetBits(GPIOD, NOKIA_SCLK);
4 r2 c0 r0 j9 y! x5 I: ?6 \' h$ L } ]]}
$ R- Q+ M* {6 M0 H/*-----------------------------------------------------------------------
/ U, T9 \6 i+ kLCD_set_XY : 设置LCD坐标函数 输入参数:X]输入参数:X]
( j9 r4 I2 l. |( Nvoid setadd(unsigned char a,unsigned char d)//设定地址
# l) K. {5 ?- _$ E; b5 l{
0 h0 _5 _# ~8 `# U+ k1 z9 R" Twrite_byte((a|0x80),0);* m; b7 o( B$ r
write_byte((d|0x40),0);
; q+ M8 {0 J9 h- v$ s& G; q3 I; Y}3 B0 m4 V& X' f1 a: w6 v
/*-----------------------------------------------------------------------3 V. m9 C2 x& ?$ C7 `) t' o
LCD_clear : LCD清屏函数 -----------------------------------------------------------------------*/
1 V. `0 F9 o$ I7 K4 Q, pvoid]-----------------------------------------------------------------------*/3 {0 @9 N- V) R6 l
void]// LCD_write_CMD(0x0c);/ J5 n8 S' S! T1 c0 D
// LCD_write_CMD(0x80); ]]}
! p. h% G4 {+ u* k, @void]
+ c3 U& r" B/ h( W+ t) U- ~void]) K; b8 y! h5 T8 |, F1 B; Y9 u
// 产生一个让LCD复位的低电平脉冲
3 Z+ `; G5 h$ B //RST = 0;
3 ]( m4 {3 Z* X GPIO_ResetBits(GPIOD, NOKIA_RST);
) U. R& ^5 v2 X) ^ ; {2 N; G% x. y1 d3 ~; V
delay_1us();4 d* I' S) @; f# j
//RST = 1;1 Z% \0 c5 N+ F1 E- p% |
GPIO_SetBits(GPIOD, NOKIA_RST);$ g8 d8 c9 y r4 n7 ~7 n" r
//SCE = 0;: o7 _9 U u" b2 K6 B2 B# m" Q
//DC = 0;$ k6 u- b- D) b$ g1 k* g
GPIO_ResetBits(GPIOD, NOKIA_SCE);3 Y) Q' j, H! d5 I0 E* g
GPIO_ResetBits(GPIOD, NOKIA_DC);
]] LCD_write_CMD(0x21); // 使用扩展命令设置LCD模式,PD=0,V=0,H=1
# w3 Q, i! s' T) z& J' e" a LCD_write_CMD(0xc0); // 设置偏置电压9 b ?/ G/ n" m) {- o" v/ Q. h) ?
LCD_write_CMD(0x06); // 温度校正
3 q; j* a, N, c' R- \, b LCD_write_CMD(0x13); // 1:48 ]] // LCD_write_CMD(Nokia5110_DispMode_Reverse);$ ?# H4 X1 l% s1 ?$ j% ^
// 关闭LCD ]]
5 s- ~* H% |# L/*-----------------------------------------------------------------------, E8 R& B7 w. Z- G/ d
LCD_write_char : 显示英文字符 输入参数:c]输入参数:c] c -= 32; ]]void write_byte(uchar dd,uchar a)//写一字节 0:指令 1:数据+ x5 P: }1 V2 Z3 M
{
% P( y! C5 C; r+ x3 Achar i;( v0 J4 q; ~7 f3 o. A, ^
//SCE=0;
) \0 G/ u- @) t% h//DC=a;
5 [8 Q" ~2 l9 M! C L) QGPIO_ResetBits(GPIOD, NOKIA_SCE);7 f" d0 m1 }* a; [# N3 R- |
if(a==0)GPIO_ResetBits(GPIOD, NOKIA_DC);. j5 ` U1 Q' e4 s& x) @
if(a==1)GPIO_SetBits(GPIOD, NOKIA_DC);
# J9 h, @8 T/ D$ Kfor(i=0;i<8;i++)& ^+ B) k5 E9 c. M
{& n9 _2 @3 ^. l. r8 ] T
if(dd&mask_table)( g( p+ y7 P. s9 G, V
//SDIN=1;
9 T4 N, }4 \5 ~3 }, B4 c4 z GPIO_SetBits(GPIOD, NOKIA_SDIN);7 t. e m1 T3 d6 ?: P6 X
else
2 N: N+ R! e" ]) z' e) w//SDIN=0;
& ]+ p: [4 a6 d9 \//SCLK=0;
$ G' ?# U7 {; G4 ~) r+ I, [//SCLK=1;
6 C d# z' y" z. {+ v8 @: U GPIO_ResetBits(GPIOD, NOKIA_SDIN);
2 j' L$ [. O$ O" V2 P# a8 u GPIO_ResetBits(GPIOD, NOKIA_SCLK);
. i' S q- I1 n% ?6 ^ GPIO_SetBits(GPIOD, NOKIA_SCLK); ]]
3 Z5 c: H7 }. ]% H. B2 _& m/*-----------------------------------------------------------------------
+ Y2 Q% W9 ~1 }. `6 j5 r3 h+ DLCD_write_english_String : 英文字符串显示函数 输入参数:*s]输入参数:*s]-----------------------------------------------------------------------*/0 |. m C' G7 t3 I
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
2 u, }1 \, K1 H8 ~4 s% l{
& Z$ w \; C( ]+ f. u/ ? LCD_set_XY(X,Y);; \3 e. \9 z6 g
while (*s)
9 y. c) v8 Q0 x1 t. B {9 W* n) |0 g& [) v4 C8 a5 a
LCD_write_char(*s);( n. C, ]2 e/ A4 s% q
s++;
* d1 J" X' Z( v; Q! w& h }
# d# G* r7 g( w! O* `! j, Y}
5 D# y) o: e, t& E2 c: h//****************************************************/
' f7 O. [4 A" R6 p3 P$ I0 J6 _//显示12(宽)*12(高)点阵列汉字 M7 `! q- V# r: L. a! a6 M2 Q) @
void displayonechar1212(uchar row, uchar page,uchar dd) //row:列 page:页 dd:字符4 Q6 x/ d6 q' I$ y
{8 V7 y2 U# n$ N: Q4 V- I2 t
uchar row_i,xx,num=0;: R$ u; t4 U Q; I/ B
for(xx=0;xx<2;xx++)
4 e, J- f% W; b, [3 }# X{! P3 a3 G/ Z, ~1 x6 _6 _
setadd(row,page);// 列,页
, f- T; ?6 t8 q( A) f% dfor(row_i=num; row_i<num+12;row_i++) write_byte(hzk1212[dd][row_i],1);
2 X2 I% K4 H( _ num=num+12;page++;% F* i2 |+ [" k& r2 K5 f4 i1 s
}
" p, z) |' B4 s: ]0 w4 G9 k1 f} ]] #endif
' o* P+ |; v' t转载自:eefocus0 p R* G9 K8 Q
|