4 a* R3 `/ s( u5 i' u6 m s! B/ k
! M' k% b& S7 U5 W0 z
Nokia_5110.h头文件 <span]Nokia_5110.h头文件 <span] ; a/ O- {! z: ?4 v
#ifndef]#ifndef]# M1 M& b1 t# B
#include"HZ_12x12_pixel.h"
7 ^: K8 j/ v* W, B#include"english_6x8_pixel.h"
+ D( h; k: {- [/ G; V#define uchar unsigned char- M' _, |% N1 S
#define uint unsigned int3 `7 Q: R4 [% {& q# N8 r4 }2 I
#define ulong unsigned long
# k0 h% c& u" P2 B2 C# M( Y* B#define true 16 E6 `+ t" m: z6 R/ |
#define flase 0 /////////////引脚定义////////////// <span]/////////////引脚定义////////////// <span]void Delay_1uS(void);
8 |$ }" e7 u" e% y) xvoid LCD_Init(void);
& _, O1 r% ]( N4 ^ Vvoid LCD_set_XY(unsigned char X, unsigned char Y);; J) _* A3 p' w- s3 T2 I
/*-----------------------------------------------------------------------
4 C6 }- C4 a3 k7 ~7 nLCD_write_english_String : 英文字符串显示函数 输入参数:*s]输入参数:*s]-----------------------------------------------------------------------*/
, v M, J T% ?+ X$ C/ z3 L* tvoid LCD_write_english_string(unsigned char X,unsigned char Y,char *s);0 w. `/ }, r( v4 _! {+ r) `3 ]
void TestLCD_Nokia5110(void); unsigned]unsigned]" D2 b7 s+ d/ M! m
void displayonechar1212(uchar row,uchar page,uchar dd); //显示 12*12 点阵
' U0 `2 e; c& Xvoid write_byte(uchar dd,uchar a); //写数据或指令 0:指令 1:数据 #define]#define]#define c_LCD_Max_Dot_X 84
4 u9 a$ J- d7 ~) t#define c_LCD_Max_Dot_Y 48 0 z+ b# I! C. G6 y) P+ d
#define]
1 H! B1 e6 }; X, R" `# ~* U#define]
# y0 A1 j# [) b8 J# f* Qvoid delay_1us(void) //1us延时函数4 \; U6 K: X( r- R8 N; }
{" \0 d- A+ f" i6 N( J2 g: m
unsigned int i;
! l# S# f1 n2 |& m) _8 ~3 \ for(i=0;i<1000;i++);
0 u1 V K# _1 F) f7 Q- ^2 t% D } ]]/*****************************************************************/ /*-----------------------------------------------------------------------$ Z8 ?4 W' S/ ^% Y
LCD_write_byte]/*-----------------------------------------------------------------------5 y, d& B! {# v+ w+ t
LCD_write_byte]输入参数:data :写入的数据;5 _4 t5 T! [! |
command :写数据/命令选择; -----------------------------------------------------------------------*/
# o4 }9 d/ |' H, u) {8 i; H2 |void]-----------------------------------------------------------------------*/5 x: q. h4 k$ f3 j' w* S
void] //SCE = 0;
- H* T; F" N( X- B //DC = 0;) ~3 I1 |4 F+ R0 X) r' o
GPIO_ResetBits(GPIOD, NOKIA_SCE);" j' U- U( w: t) r" o
GPIO_ResetBits(GPIOD, NOKIA_DC); ]] //SCE = 1;) G# `* e: s0 N2 x' T
GPIO_SetBits(GPIOD, NOKIA_SCE);" p* @/ k" f u* O5 b9 j
} /*-----------------------------------------------------------------------2 D! [ Z$ o* Q5 A
LCD_write_byte]/*----------------------------------------------------------------------- F# b, Z C& I) ^* z6 H" A
LCD_write_byte]输入参数:data :写入的数据;& U, J0 B4 p2 B7 n& O2 l n+ m
command :写数据/命令选择;-------------------------*/+ o8 ~! c. P+ ~0 ~6 ~ J! f
void LCD_write_Data(unsigned char ucWriteData)$ |4 `' g5 _. C8 D: e2 o; m
{" u& e5 P7 N3 U: w
unsigned char uci; ]] for(uci=0;uci<8;uci++). ]" p2 m2 z9 f6 J2 E/ u, S. L
{/ h" C- ^1 @; E* \4 w. T
if(ucWriteData & 0x80); ^) F# g/ W# X* c: t; }
{; }2 n' H, ?! X; f
//SDIN = 1;
7 B: z. O0 W1 ?7 \' ~* T! L1 h GPIO_SetBits(GPIOD, NOKIA_SDIN);" a! m1 w3 G! e1 R. W- |; J
}
1 s% P" x% q. B! R X else
8 L1 l8 N T' u5 O2 z" G$ `* g {
t! w. j* M, k! b5 g0 o //SDIN = 0;. R. M2 j: k) f& U3 R$ [5 T3 C
GPIO_ResetBits(GPIOD, NOKIA_SDIN);
' R! z1 k# A3 o+ i }* w% ?' [- V; f2 t
//SCLK = 0;% J# W; k2 D, n- [4 D( b
GPIO_ResetBits(GPIOD, NOKIA_SCLK);7 k4 O$ E8 h1 i+ G/ U& ?5 ~6 h
ucWriteData = ucWriteData << 1;
* _! H+ Y( l! v. w //SCLK = 1;3 a: J& m- x: f$ b9 h' P
GPIO_SetBits(GPIOD, NOKIA_SCLK);* y% _: {8 \" N0 R! i+ h
} ]]}
3 M; V0 ]* }+ a; {/*-----------------------------------------------------------------------
' J/ c! K8 |) TLCD_set_XY : 设置LCD坐标函数 输入参数:X]输入参数:X]5 N: [; O# F( R/ [' g
void setadd(unsigned char a,unsigned char d)//设定地址
S9 U& H% R2 y/ ?: I{
$ a( E0 P4 n4 `: n4 zwrite_byte((a|0x80),0);
/ z, J9 }. v+ {2 j' }write_byte((d|0x40),0);. m, V4 v9 u. t
}
% E" c- f) I( |3 M, D; F9 F/*-----------------------------------------------------------------------
; c. U3 r2 H1 q3 YLCD_clear : LCD清屏函数 -----------------------------------------------------------------------*/
! N1 Z# d% u2 s# I9 ]! Dvoid]-----------------------------------------------------------------------*/
7 H4 R! J! E3 Yvoid]// LCD_write_CMD(0x0c);
8 K8 Y! O; T# P6 G/ V// LCD_write_CMD(0x80); ]]} 2 S4 f$ p$ O1 n1 M" G' R) g
void]
' P7 q- g% G: M0 L: L, @3 Zvoid]
. t& D! n1 H+ e! J // 产生一个让LCD复位的低电平脉冲! S! A, J# i* ?0 q e% c
//RST = 0;5 T, g# |, D7 e6 l# e! r
GPIO_ResetBits(GPIOD, NOKIA_RST);
" B8 Y* i P: @$ Q/ C9 f, e2 d ( C1 U. E' T8 Q
delay_1us();0 Y: U8 X& I' _8 K- o
//RST = 1;/ S9 T$ z: z3 w4 Q) s+ @% F# N
GPIO_SetBits(GPIOD, NOKIA_RST);
4 S2 w- p6 C! J) ^+ F' I8 s% a* m //SCE = 0;
: G1 n7 @, s0 R' ?* L. t //DC = 0;7 Q! `: U2 a+ w3 J4 y
GPIO_ResetBits(GPIOD, NOKIA_SCE);. o% H- b! n: b4 o
GPIO_ResetBits(GPIOD, NOKIA_DC); ]] LCD_write_CMD(0x21); // 使用扩展命令设置LCD模式,PD=0,V=0,H=11 w, M# D# c; s( G9 V0 y
LCD_write_CMD(0xc0); // 设置偏置电压, E8 R' N! L6 ?
LCD_write_CMD(0x06); // 温度校正; |$ J1 M6 X! t' e$ U
LCD_write_CMD(0x13); // 1:48 ]] // LCD_write_CMD(Nokia5110_DispMode_Reverse);
" I. r3 t" C1 Q9 g; B' Y5 C) ^ // 关闭LCD ]]6 \) x7 ]5 e( U$ a3 v
/*-----------------------------------------------------------------------* ~1 h! f5 x/ i8 C- l
LCD_write_char : 显示英文字符 输入参数:c]输入参数:c] c -= 32; ]]void write_byte(uchar dd,uchar a)//写一字节 0:指令 1:数据
' ^% y! T* n0 I* G9 f{
8 L4 {" o' N- }- G, Dchar i;
% x$ J1 p% B) Q- R//SCE=0; G+ c. M" [7 o
//DC=a;
' m+ v5 ?& L+ A( u; SGPIO_ResetBits(GPIOD, NOKIA_SCE);/ [( o. ^( v- u
if(a==0)GPIO_ResetBits(GPIOD, NOKIA_DC);
M4 q# o% P q2 n; Y if(a==1)GPIO_SetBits(GPIOD, NOKIA_DC);
3 ~9 U* q& _6 ufor(i=0;i<8;i++)
- u3 H7 y) k3 f1 M/ i) \) J- b{
4 P0 E2 x# h3 q z" ]if(dd&mask_table)
% t6 c9 F& I( p2 g% i% H' B" ~; c//SDIN=1;
# `" B9 F. L! K1 [ GPIO_SetBits(GPIOD, NOKIA_SDIN);
/ v% H2 p3 j6 L7 m# M: i. }else
8 p& ?; D3 O8 \//SDIN=0;
7 b* S m1 k( t; \2 T! f- {1 b//SCLK=0;- Y( o/ ?& T# v
//SCLK=1;
* o9 ?+ C! F& w$ O& n GPIO_ResetBits(GPIOD, NOKIA_SDIN);1 y* f! b& b) e0 G/ p. _
GPIO_ResetBits(GPIOD, NOKIA_SCLK);
+ K9 g. ]% j" f" {0 U+ w0 c GPIO_SetBits(GPIOD, NOKIA_SCLK); ]]. `+ c: S0 d" p* l9 ?: ?/ b0 L
/*-----------------------------------------------------------------------. M9 D: b/ P( e9 ^/ b& G
LCD_write_english_String : 英文字符串显示函数 输入参数:*s]输入参数:*s]-----------------------------------------------------------------------*/
* b* G% w4 g1 }9 j+ E: cvoid LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
% C9 {) O$ y; [+ v% `! u7 ~9 l W{: p% C. J% y+ J3 Z# [9 m
LCD_set_XY(X,Y);
2 } [0 }! F! v while (*s)
- U6 y. h/ Z- f! v {& t9 ~' K6 ~5 q3 ~ R: K
LCD_write_char(*s);/ [- L: h( C' C2 v2 r
s++;
2 \& K" Y, O/ g6 L" e }- N5 p# Q7 n$ Y( j. d+ t
}) _! w2 I0 J+ J8 S- a+ s! R
//****************************************************/" f2 G1 i: O% K# s/ a
//显示12(宽)*12(高)点阵列汉字
/ j; n$ {* \2 d2 z |2 Wvoid displayonechar1212(uchar row, uchar page,uchar dd) //row:列 page:页 dd:字符/ h0 l% W* B+ J$ c# C
{$ f7 c: p$ T ~, [
uchar row_i,xx,num=0;' m9 ^) k4 K: l
for(xx=0;xx<2;xx++)
0 d& q8 L* x# w5 ]6 O! }{
, M( `5 U$ H. z6 s) osetadd(row,page);// 列,页# ^1 B0 ?4 M4 V8 g k: a2 N! b6 E/ r
for(row_i=num; row_i<num+12;row_i++) write_byte(hzk1212[dd][row_i],1); I( l8 D4 ]$ y8 ~8 D
num=num+12;page++;- d! @8 _* L0 F" [- ~& p$ B: _6 L' p
}$ J: F; T" u$ ?0 O
} ]] #endif # K5 B, }5 o0 O6 H
转载自:eefocus1 `# d% O4 _1 v* m' G
|