|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ATmega16L-6 1602
# H. c& c8 c- t# d8 i, A1 c* G& F% w//1602液晶相关I/O设置
5 j+ m) K/ u# p8 I5 _2 M#define Rs PORTC4_bit
- o- P, i- ]& X0 t7 f5 s0 M+ V#define RW PORTC5_bit% Z O% X9 ^' m0 d4 d/ N# S+ b0 p
#define E PORTC6_bit& k/ I& Y, F8 P. y
#define LCDDAT PORTD
* Y( [$ T* \6 v3 j7 \
4 c1 z. B4 e6 t- _#define iDat 1 //数据标志
! u" x3 ]. P# o/ t/ Y: a#define iCmd 0 //指令标志
% G" w& }: S1 _! |! u2 U$ S
$ G1 X5 e; v0 S/ l3 P9 i- t//DatCmd==0--1602写命令函数
0 ?) Q. P3 [4 A' \3 L0 k, P//DatCmd==1--1602写数据函数$ W) X' h. m1 L! e. E% c! L% X9 C
void LCD1602_Writebyte(unsigned char DatCmd,unsigned char dataByte)
`' @% s' U. M) v{9 T, m$ g) U% d/ U
if (DatCmd == iCmd) //指令操作* {" T- U/ N6 O
Rs=0; //设置该字节数据为控制命令
- ]9 i& p6 |: V1 b; ^5 X1 u else
% U" p* R) E; J4 I- U; [ Rs=1; //设置该字节数据为数据; @! a3 P: k( `9 o8 H' t6 q: J
+ y+ l8 F2 l6 N' K" A RW=0; //选择写状态
, M2 j6 C0 L7 Q, Y1 ?9 p3 N# ] LCDDAT=dataByte; //将命令字通过RD口送至DB
. k- Q T, O6 r. A E=1; //E高电平将命令字写入1602液晶6 m1 K8 J0 a% {
delay_us(850);
8 u" g' O+ P- T0 }4 O9 s- `8 H. { E=0; //写完以后,恢复E的电平
$ F: v' g8 K7 `& f}: P: z1 p) {9 ^2 w# y v
3 E" R m. K3 k) R" N
//1602液晶显示地址写函数
( ~+ x$ g% T3 L4 U5 k' ]; U/ ovoid LCD1602_GotoXY(unsigned char x,unsigned char y)
) Q9 G1 j% B4 k( ^. A- Y{
9 l2 E2 u5 n1 n# z x&=0x0f; //列地址限制在0-15间: b1 r( X: V% }/ d# P4 {+ m( M
y&=0x01; //行地址限制在0-1间
. N7 p1 R# B, z( D- |1 j9 f% L3 p if(y==1) //如果是第2行
) J% T) h: q# y! ?8 M% ? LCD1602_Writebyte(iCmd,(x+0x40)|0x80); //将列地址写入
8 y: z' X( i1 O! |- @) f0 } else //如果是第1行
2 K' E7 ?; f: o( Q" B1 R LCD1602_Writebyte(iCmd,x|0x80); //将列地址写入
1 R9 g/ ~" _/ w}
. v1 n$ C8 R6 E& X. |+ L; m# b
! G; y" c3 x- q- d; a ~) B* d' f//1602液晶初始化函数
7 B" b$ M% M: G' @2 }void LCD1602_init(void)/ }( b5 `1 R( j. o# C; q: Q
{
* N9 N5 y; R9 v4 x1 p) v5 P delay_ms(15);
8 D" P) E, ^/ N% ?1 T! Q LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示: B% Y F* J, P# L5 C3 s* o: d
delay_ms(5);/ ]: L( P, h. m( Y! V/ A4 W
LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示
+ D1 f% d9 r5 y delay_ms(5);
% r/ ^+ U4 J* i% k" v LCD1602_Writebyte(iCmd,0x38);' w; ]3 W1 ?0 @1 i
- N! c( p( z( k% W9 j4 u
- [/ X3 M, F( R0 a5 ^& i LCD1602_Writebyte(iCmd,0x38);
7 r6 Y" Y# P2 O4 W' ~ R5 Z LCD1602_Writebyte(iCmd,0x08); //显示功能关,无光标& C" u5 R- w- h8 K. O/ e a
LCD1602_Writebyte(iCmd,0x01); //清屏9 j, u: r1 O/ U7 w
LCD1602_Writebyte(iCmd,0x06); //写入新的数据后,光标右移,显示屏不移动" h. |, t. P' @1 k, x+ t+ D
LCD1602_Writebyte(iCmd,0x0C); //显示功能开,无光标6 C6 u6 B, S% t; o% t# ]1 X5 \
}# \! T1 r1 u- k8 t1 C9 E- }/ w
# D# q" o; O& s! _, d# Q
//1602液晶指定地址显示函数0 V' I+ _9 `8 j t; [1 Z# L3 A
void LCD1602_Display(unsigned char x,unsigned char y,unsigned char buf)
( x3 H+ g3 P2 I& x{
- ]6 Q" \* F4 N$ d- r, | LCD1602_GotoXY(x,y); //先将地址信息写入9 K8 Q; `1 G2 f6 F
LCD1602_Writebyte(iDat,buf); //再写入要显示的数据, ^, P( E9 I# E, H
}
" p. @9 m! g9 D" t% c2 o: w3 l9 } f* O: }; Z
void LCD1602_prints(unsigned char x,unsigned char y,unsigned char *pString)
) x( k, P: ~1 h/ k{2 R+ ?) P8 l# i
* j, q/ q6 w' x& k
LCD1602_GotoXY(x,y);* ^8 S3 V% p4 r$ K
while(*pString)//while((*pString)!='\0')// //只要字符串没写完就继续写, \0 l) P! m" m \7 Q! F. S
{1 Z* I; {2 F' ~, x7 ~& c
LCD1602_Writebyte(iDat,*pString++);2 l( G$ D, t" d/ d! M5 n8 }6 V
}% n8 E* M3 t6 m) S c
}
( `1 N# x s2 `& k& i6 A+ J
7 H4 J% I' u6 Ovoid main(void)
9 R+ h p% V1 ]8 O/ g. I% ~{
3 ?2 u* S- A$ ?. `3 F8 Z3 |( C
3 g5 |' _! y1 ?) J4 T4 Z unsigned int num=1223;/ t3 t+ y1 B7 a% [/ n2 a
DDRC=0XFF;
$ n `! e! z1 B* o& r/ {2 o: y DDRD=0XFF;* i: _) {7 O5 C) p' b) h" @2 c0 w2 @
PORTC=0B00000000;
4 t3 H1 z' S, Q4 N PORTD=0B00000000;$ `1 W8 i6 G0 x) }) z9 n f) E
$ O5 o! N, a2 t3 B6 N, \2 g5 K
LCD1602_init();4 T/ [) T( ~( Y: g% {
LCD1602_prints(0,0,"Zeroer1223");
8 c( u* @2 k1 a9 D1 ?) r% p( _ S# g4 }! }4 g% {0 Y
while(1)
# X( d' C; I) P7 T {
$ C4 c3 Y+ ]! M( P% M! ^1 j: B delay_ms(500);) N+ O( U" e3 p- Y
if(++num>9999) num=0;
" L* o; r( K! p2 p: n6 p# J& C# { LCD1602_Display(6,1,num/1000+'0');//千位1 K7 K5 z7 L# Q$ M0 W9 r& _
LCD1602_Display(7,1,(num%1000)/100+0X30);//百位; s& M0 m# o, P; C0 Q: J4 i
LCD1602_Display(8,1,(num%100)/10+0x30);//十位
& x9 w; u' c! U- W LCD1602_Display(9,1,(num%10)+'0'); //个位
0 t4 @# r$ f/ v" a2 `7 e. F4 ^# G1 n g- `. R/ G5 j( y
}
4 |/ H0 T0 O, h) f; e* ~}! w; L3 [5 ], ]' j
2 k, i4 q8 [3 x6 n% C2 c. ?1 c0 v( m+ u3 h
| / i. k4 G A" [( d; J5 |# J2 U
2 v+ T9 J# ^1 d" d. A/ f. y: c, H
![]()
8 D: L7 Z2 g" {. w5 A6 ?) f3 h& {, A4 n+ K" {3 `) Q+ h: j- _. G k% o
% w& J2 ~! U5 ]
|
|