|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ATmega16L-6 1602
" W, R% n, _- L0 e//1602液晶相关I/O设置3 G9 J/ Y. S9 f
#define Rs PORTC4_bit
2 H1 f6 o& K. e#define RW PORTC5_bit1 c" b4 K" O7 j0 Q/ _0 ~3 u) w
#define E PORTC6_bit7 B. [: `* Z6 E' m5 |6 ~1 \: n+ q
#define LCDDAT PORTD
; J+ z- S+ L- g5 ]/ z
{3 B1 f' d* t3 |* J9 b, N#define iDat 1 //数据标志4 @, @# l* |+ z! x* q6 `$ P6 g
#define iCmd 0 //指令标志/ i& X4 V4 u- R: p
( l' F1 X4 q/ y" H0 W7 D& Y//DatCmd==0--1602写命令函数
0 k& E1 |; p8 ~$ V3 M7 J//DatCmd==1--1602写数据函数
, B: ?7 X) t6 o! vvoid LCD1602_Writebyte(unsigned char DatCmd,unsigned char dataByte)( q: Y& u# d9 L* l7 l ~! x" R
{/ o8 Q7 X# f7 }6 D! l
if (DatCmd == iCmd) //指令操作
8 A) E7 B5 p' ^ v Rs=0; //设置该字节数据为控制命令
9 k7 w! H% \/ s/ j: T. H else$ b9 Y" Y( [% r8 o4 Z
Rs=1; //设置该字节数据为数据
* s5 d! S- |* ^/ z* j, n6 e1 F2 V L5 B1 g( H8 l0 E' ?; z
RW=0; //选择写状态
& ]2 M7 P9 z. e! a! F# } LCDDAT=dataByte; //将命令字通过RD口送至DB
D5 x) x# l5 h$ p E=1; //E高电平将命令字写入1602液晶6 d8 I- O$ R* G0 \" U' C
delay_us(850);
- j. f) b3 U7 U E=0; //写完以后,恢复E的电平
2 B! u; |+ O( D: q8 m, J}
0 g* ?' o4 E& X6 c0 m) k# ]1 G7 K& F; F2 E
//1602液晶显示地址写函数
8 f9 P, h0 R9 ?/ Zvoid LCD1602_GotoXY(unsigned char x,unsigned char y)
% L3 Q5 M v- m. H; ?{( M; J* u0 X) E9 t0 \
x&=0x0f; //列地址限制在0-15间6 Y d' n c; p, T' u$ i
y&=0x01; //行地址限制在0-1间+ ]/ M9 y; ?$ F. t$ U
if(y==1) //如果是第2行
4 @# C" A( a9 h# [6 p* |- z [ LCD1602_Writebyte(iCmd,(x+0x40)|0x80); //将列地址写入
- I0 d8 Y0 L @7 O w else //如果是第1行
+ E+ q- m; M* C" _/ V1 R$ N) x LCD1602_Writebyte(iCmd,x|0x80); //将列地址写入
1 i8 i" U( L1 ?- W9 P. H2 x}
3 G5 y( T: g# Z# }% I
3 `7 a5 n8 Y; R7 e! }( a//1602液晶初始化函数
7 w0 Z7 l$ E9 h8 Y% X" \void LCD1602_init(void)
6 Q- b- P( F0 T( u3 n* ]{
; B- L+ L# Q& Q z3 k; }: B# R delay_ms(15);
@0 b! M2 p; T LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示. {; I* ]5 e( ?
delay_ms(5);
' |$ T3 d2 G1 }! M& _0 X$ i- u8 G LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示
8 \$ c9 ?! o! x- Y: E( X delay_ms(5);
. R. t; ]; C( Q1 t1 j( n7 S& b LCD1602_Writebyte(iCmd,0x38);7 @ M2 D# r0 P, l# f8 t1 r8 R
# q! x/ ]. P3 T2 A3 a. r7 ]* k4 q
2 q/ M2 b# i" b/ Y7 `0 m LCD1602_Writebyte(iCmd,0x38);
7 ^/ m' L; ~. i( ?: z LCD1602_Writebyte(iCmd,0x08); //显示功能关,无光标5 R3 t4 C+ e- l5 H
LCD1602_Writebyte(iCmd,0x01); //清屏( k3 T4 d' _+ H# P$ ~5 o9 m: y/ P
LCD1602_Writebyte(iCmd,0x06); //写入新的数据后,光标右移,显示屏不移动5 x% g1 P2 W. q" A# J5 ]
LCD1602_Writebyte(iCmd,0x0C); //显示功能开,无光标6 b0 K7 `7 N& X5 ~$ G% x9 D
}
+ c5 U& A! @* {$ h, f* U9 R' }3 o5 v9 R3 O6 Z7 e$ a2 U- w+ \
//1602液晶指定地址显示函数
: {: s5 n7 _4 N9 i7 X i/ jvoid LCD1602_Display(unsigned char x,unsigned char y,unsigned char buf)
' b9 a9 v H# @! e! q$ J* q- o! p{3 n4 C2 w( o: y+ g
LCD1602_GotoXY(x,y); //先将地址信息写入8 {- W& v O& I6 G7 I2 N( S9 k$ I3 ]
LCD1602_Writebyte(iDat,buf); //再写入要显示的数据 i% t4 p, {/ J( j: ?/ [4 l
}2 ?3 N7 U9 e# V; q- C( z* |! j& U7 J
, h& z2 H; }9 u, `% V% Rvoid LCD1602_prints(unsigned char x,unsigned char y,unsigned char *pString)' [4 o( B9 P: d# C
{" S M& ?" I0 B. ~$ o5 @6 `
0 Z+ e1 J. U9 M* M% K
LCD1602_GotoXY(x,y);) b) m1 x9 k1 u" D
while(*pString)//while((*pString)!='\0')// //只要字符串没写完就继续写6 G; z1 k: i- V* s) A; p: I7 r
{/ k. k; u8 Y2 c m0 |/ \# f# M% Z
LCD1602_Writebyte(iDat,*pString++);3 F3 j) s0 z# F6 t+ p9 n! Y
}" a/ y$ X0 z2 ]" g
}6 X( O" ]. m' Q' Y7 f
3 {& `. @3 V+ ]6 p9 R. @* f' ?void main(void)
8 K) e1 H. c) F/ c( v{+ Z+ O& ~' K% |0 K5 p
3 P+ e4 x! l7 `5 g" M: p! Z
unsigned int num=1223;; n' \/ Z6 M2 P) a" ] t
DDRC=0XFF;
# [; {- @. @7 l/ m6 S a1 U DDRD=0XFF;+ j$ H4 V* O6 B$ ^; N& ?; E
PORTC=0B00000000;
( b7 D! p+ U# ^6 l6 _+ S/ O PORTD=0B00000000;. [6 M% n; P, x8 G
* G# q+ i$ v. N9 q- {# @ LCD1602_init();
; M+ X: W/ f, d( X1 _ LCD1602_prints(0,0,"Zeroer1223");
4 @+ ]. ?; z/ ~9 L. I' C: H' ^/ K7 I( S1 F. Q
while(1)5 S& C& \; }9 X h) K
{
& ]% ]# a9 o8 Z* G6 r J/ Q+ U8 u delay_ms(500);
5 `: w# V. x; w- Z) v if(++num>9999) num=0;
4 Y; Q7 I- H) e P" n, t LCD1602_Display(6,1,num/1000+'0');//千位3 G8 G& p( |+ S: Q' X/ N
LCD1602_Display(7,1,(num%1000)/100+0X30);//百位7 V" u' X1 h/ m% o4 Q' y: ?! d. l
LCD1602_Display(8,1,(num%100)/10+0x30);//十位+ J5 @& y, I# A
LCD1602_Display(9,1,(num%10)+'0'); //个位
/ E7 a5 V$ ?2 O8 W% s+ ]* l# ~& \4 Y% ~4 \( P
}7 W( D. P/ M% h- t2 N
} s$ V z9 S& I$ D I
1 k8 `) h a7 V' _5 ^5 Q- L j
% Q4 M1 c# }- U
| - [8 w8 x/ x. f X O. e
0 M$ `) r+ y" Q" Y4 G8 s ( o6 s# N7 N% Y
6 o/ l7 \! u/ J. b/ p2 P8 H9 j$ R2 `8 F
|
|