|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ATmega16L-6 1602" W: x3 g( f) @3 C4 r2 i
//1602液晶相关I/O设置
" y( h) {! F: S5 `4 ^7 D5 h* }3 d! j#define Rs PORTC4_bit" k" z& p/ ?! x1 y, i
#define RW PORTC5_bit
( z; v3 e; q% }3 T! P2 W; T4 u4 Q. L#define E PORTC6_bit7 Y8 u, `2 s0 R
#define LCDDAT PORTD
0 i6 S) f7 X4 ?9 Y* q3 C2 D& J* A1 h* G' h" ]; A, h
#define iDat 1 //数据标志# U1 t1 g" _2 r7 L: r4 E: r
#define iCmd 0 //指令标志8 e% r/ {' y4 z) k, a$ X
& ~% K' l5 m0 {* c
//DatCmd==0--1602写命令函数
l9 g3 P8 x% r% e//DatCmd==1--1602写数据函数& G; M; P w! Y" j# {! G( F; e
void LCD1602_Writebyte(unsigned char DatCmd,unsigned char dataByte)
~4 b. `' B/ U! {7 P- ]6 }; E; k{
: G* U6 }$ Y8 q0 j8 }+ v if (DatCmd == iCmd) //指令操作
4 G+ U z2 b' |: j0 R3 a- }! Y1 T; d Rs=0; //设置该字节数据为控制命令- A7 R/ s3 p) x6 e+ M4 H6 C
else3 H1 b8 Y9 |2 W( W& ]$ Q2 g. W
Rs=1; //设置该字节数据为数据9 u$ s; h- ~ T8 X ]5 L4 [
+ o/ t: F% I% ` p4 b' g% S
RW=0; //选择写状态
# N4 _. E+ D/ f( K LCDDAT=dataByte; //将命令字通过RD口送至DB
8 `$ y# \, z( a6 ^8 @7 D, { E=1; //E高电平将命令字写入1602液晶
6 D0 v4 n; ?5 p5 F: ] W R delay_us(850);
3 b$ M) y# ?7 O1 r% F" ^ E=0; //写完以后,恢复E的电平9 f. B7 c7 L1 \- g) F4 B
}+ g; H, V( c' \* t* N5 H
2 G' \2 N+ y* a7 v8 M6 W
//1602液晶显示地址写函数
2 @0 y/ S& }% A, w: E: X9 uvoid LCD1602_GotoXY(unsigned char x,unsigned char y)
$ S) u0 w+ `/ A* ^{; z* T9 S" a. W8 w3 x& o& H0 T
x&=0x0f; //列地址限制在0-15间* [( y m8 R4 Z& }& a5 H
y&=0x01; //行地址限制在0-1间
) Y4 \2 d8 D$ f4 i2 I8 m if(y==1) //如果是第2行6 y( d/ Z! n+ }
LCD1602_Writebyte(iCmd,(x+0x40)|0x80); //将列地址写入
! t6 g! G9 y0 ~8 X8 y else //如果是第1行" j4 t. i; h. b4 e2 y
LCD1602_Writebyte(iCmd,x|0x80); //将列地址写入/ Q! i8 e% J* J3 M1 e
}" {) @* q( L; M9 i+ z6 c7 h6 u
+ h/ c' M* r+ ]//1602液晶初始化函数" \' s: M& t4 K; R
void LCD1602_init(void)
. }# w+ ^5 _; S+ n" @. T3 }3 w1 v{( u/ [# n0 s+ q& Q4 p
delay_ms(15);
3 Q: `1 e3 t! K# A) I) b5 F LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示0 o! Q" N& I, M' P6 _2 M w0 O
delay_ms(5); [ G# i6 O# J
LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示; p9 M1 v: _) J, Y% z% E! P
delay_ms(5);" A3 j. ]+ t1 E4 ^
LCD1602_Writebyte(iCmd,0x38);
' l0 Z' A0 \, v$ u# b# h0 Y' P
" H, s$ R0 j, Y6 K. v8 x# i
* Z! m) P: p! X5 @) C) o LCD1602_Writebyte(iCmd,0x38);/ T- O7 l2 _: f# `1 v+ @ Q
LCD1602_Writebyte(iCmd,0x08); //显示功能关,无光标/ _3 C6 m9 f5 e. r7 \
LCD1602_Writebyte(iCmd,0x01); //清屏
4 ?3 a$ Q; M8 W LCD1602_Writebyte(iCmd,0x06); //写入新的数据后,光标右移,显示屏不移动
- D" g% h4 F2 i; [0 g- L7 R LCD1602_Writebyte(iCmd,0x0C); //显示功能开,无光标
# | w5 R0 U. S, r& E}- Z L' [0 X$ p- w
' c% H0 D& e$ Q6 Y& y
//1602液晶指定地址显示函数$ j3 g4 c, O* I3 Z8 r' Q
void LCD1602_Display(unsigned char x,unsigned char y,unsigned char buf)
, L3 F: E# c. S' Y2 Q i. Z% N{
( h" F& `" X% Z' K4 X. G( p+ L; H LCD1602_GotoXY(x,y); //先将地址信息写入
' {# V0 h: v' I& b, N ^$ C' j) N LCD1602_Writebyte(iDat,buf); //再写入要显示的数据7 \5 B7 R& G9 M: b
}
# o0 V5 n3 {6 [
) O- \2 l; Z5 ]/ Kvoid LCD1602_prints(unsigned char x,unsigned char y,unsigned char *pString)8 ~& Z; B4 k; l. C
{
/ W& k- @1 n$ l n
$ m8 F2 w' |) l. R' A LCD1602_GotoXY(x,y);
9 y9 w, z3 H j" M5 C: `& A while(*pString)//while((*pString)!='\0')// //只要字符串没写完就继续写
* X' T1 g+ h! Z {
( ?' s9 o# S& `2 I' ~* X, l LCD1602_Writebyte(iDat,*pString++);( g( r' {9 P. A6 L- s- ?
}1 `: s* i6 Y) k, ~- G* j2 _* ]
}) w; P: A Y2 {% Q( G5 T" L+ T7 W2 Z
* r5 j$ ?* V; E, @, d6 D" M& R0 m
void main(void)
3 ?8 J c; h: z{
. D- j/ g) X' S, P: w _. r, S- v: r: Q
unsigned int num=1223;
# X6 R) M4 r/ N9 Y DDRC=0XFF;
8 O/ d( }3 N9 @- y DDRD=0XFF;
9 B7 W, b7 K$ B" e+ b" G5 { PORTC=0B00000000;* [6 y3 {% O% u: |
PORTD=0B00000000;
0 c/ ~# d7 U$ V P# Y9 t5 T$ k5 g( v, T$ D* ]
LCD1602_init();) u1 M9 W5 Z9 H5 ?$ @
LCD1602_prints(0,0,"Zeroer1223");6 J3 v* E9 J+ |! C' V
, C/ Q/ y. H: G( ]- Z7 q, ?
while(1)
0 [8 ?* w" p0 U5 ?# H3 }, S @ {7 { W D1 c c& A9 U
delay_ms(500);( x n/ H' n7 N ?
if(++num>9999) num=0; H1 ?: o7 j6 \' C: O6 o
LCD1602_Display(6,1,num/1000+'0');//千位
7 P* P3 u, E) H/ C% r. e LCD1602_Display(7,1,(num%1000)/100+0X30);//百位1 x5 H2 w# M; l' x
LCD1602_Display(8,1,(num%100)/10+0x30);//十位: Y6 j, K( c$ t
LCD1602_Display(9,1,(num%10)+'0'); //个位
, c0 \3 j3 r8 x' A" V) }. {) T' p4 h7 y) D
}
: r6 v6 e9 V7 g% ]. t}
. A8 ^# t& l) @- g8 R( j2 d+ O. \' K3 U( M3 S) C5 h8 ?# p
" c' I- }2 Q' m" D0 ` | ! L6 k7 E+ ? f" I7 z1 Z
7 w: i/ i' Z F1 t
9 r- |: G4 k1 Y: a
3 u% n: g. I4 _% k" x8 @
/ N2 D: E) {5 p
|
|