|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ATmega16L-6 16027 a. J8 V0 J5 _1 Z3 o0 Z! A
//1602液晶相关I/O设置; ]& z0 W5 v; R* H0 q- ?
#define Rs PORTC4_bit
1 k8 S+ x6 \( @/ L2 H2 }' g#define RW PORTC5_bit; W5 t7 N; s- x( T% v5 `# p+ W
#define E PORTC6_bit$ W3 `/ k% T/ k C: c
#define LCDDAT PORTD0 r: @9 f0 v2 i: ~" W# g
: \/ `/ `; M1 L5 R3 k, X6 U) ^
#define iDat 1 //数据标志6 d& S( h% _0 n! x R/ K1 M" Q
#define iCmd 0 //指令标志# T* M; z K0 ]8 `! H; b
% }5 B. e. d+ z& l9 Y8 J3 M$ x
//DatCmd==0--1602写命令函数
$ H5 N+ X1 C9 B5 }//DatCmd==1--1602写数据函数
) m! q0 O; i! B1 a+ G3 u3 ovoid LCD1602_Writebyte(unsigned char DatCmd,unsigned char dataByte). \: Y" ]% {) A
{- W6 {- V) G& u! X3 y! v1 m9 H
if (DatCmd == iCmd) //指令操作
; e( c9 l, \: O5 ^ Q$ g Rs=0; //设置该字节数据为控制命令
7 c' I- K! Z) Q4 Y4 R5 Q! q2 c else
2 i! x% J7 R0 u9 M( F Rs=1; //设置该字节数据为数据
0 J# S) r+ R/ M) v `5 m( S; T/ `6 g: X8 z% G
RW=0; //选择写状态
4 g4 ]( i" a4 s8 R9 i4 ] LCDDAT=dataByte; //将命令字通过RD口送至DB) y) I. s$ _8 n" m6 ]2 T
E=1; //E高电平将命令字写入1602液晶
) F" @5 ?" h* J delay_us(850);, [* y. d( a. @2 L' I
E=0; //写完以后,恢复E的电平
6 @- C1 C' j9 F+ j# e( p9 B}- R: N* {+ Y& Q$ X4 c& R
! X6 z# t4 e' W: F0 L8 c1 R$ D5 p2 Z//1602液晶显示地址写函数
, @+ Q) D% y fvoid LCD1602_GotoXY(unsigned char x,unsigned char y). m# F/ w I8 g8 l0 s
{
) ]9 D7 L2 `' M& C: R x&=0x0f; //列地址限制在0-15间8 D" o/ N* P' Q7 ^8 }3 v
y&=0x01; //行地址限制在0-1间4 o% D( r. O6 T$ Q- e' s F
if(y==1) //如果是第2行9 K# e, n4 j0 ], i
LCD1602_Writebyte(iCmd,(x+0x40)|0x80); //将列地址写入6 @0 w- V: L1 V( R: ^# N9 I$ |) G
else //如果是第1行
1 I- r3 w; n) Y- G# e. I LCD1602_Writebyte(iCmd,x|0x80); //将列地址写入. K2 L. ^8 I+ k' F! h
}: p" O# U7 l; g; ^) S
& c( l0 h$ o& X: j! o" A0 q& n! G
//1602液晶初始化函数
v1 Q H% e1 evoid LCD1602_init(void)- `* l! ?3 [. a" D
{6 A* L" f' Z+ y( _( y
delay_ms(15);
9 i) @5 c6 X' A, p0 L q LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示4 F; _- |7 E1 j
delay_ms(5);
% ?( V: [" b o/ T: C LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示
7 o7 ^9 v% S9 w. ~ delay_ms(5);
" L' l" V9 K, c S LCD1602_Writebyte(iCmd,0x38);7 @4 I) d V. w9 J% M
5 C1 e; X1 V- u: t k$ ^' L
& E( G% e$ Z& U# G" }" g1 } LCD1602_Writebyte(iCmd,0x38);
, k6 s. i# f! X k# \ LCD1602_Writebyte(iCmd,0x08); //显示功能关,无光标
4 w* ^/ p; [2 v+ U LCD1602_Writebyte(iCmd,0x01); //清屏
; I. p- K, T( b! T4 S6 @, u LCD1602_Writebyte(iCmd,0x06); //写入新的数据后,光标右移,显示屏不移动- }) e9 z3 Y; V, w1 w
LCD1602_Writebyte(iCmd,0x0C); //显示功能开,无光标
0 A2 d# K! r/ J' a}; J- S" V3 @2 T3 w& l1 @6 a
' D5 F( u6 }& D, F( J. C
//1602液晶指定地址显示函数 z# N- y8 u/ ~
void LCD1602_Display(unsigned char x,unsigned char y,unsigned char buf)& ~7 b( Y, a4 ^4 q, m' X
{
$ ]( M: C. @2 b8 O LCD1602_GotoXY(x,y); //先将地址信息写入
9 X/ t2 w; \! l LCD1602_Writebyte(iDat,buf); //再写入要显示的数据
+ V- o g9 n A}
# v3 `" r& h9 \: d
. s1 D) }/ j; Pvoid LCD1602_prints(unsigned char x,unsigned char y,unsigned char *pString)9 f, e. I; s5 M' o' b8 Z
{ d" {8 O& G( H" U* u
1 S7 M8 |5 H9 C& t LCD1602_GotoXY(x,y);
" `! `' u P) T/ c7 X/ h) o% P5 B while(*pString)//while((*pString)!='\0')// //只要字符串没写完就继续写
) s1 b5 X. F& p {
" i( X9 c* L: Y1 U' Z5 r# R LCD1602_Writebyte(iDat,*pString++);
( M1 b0 i2 {& Z d" C( ~0 q }
+ X, z; `2 O9 {4 x. q5 F6 h( t0 V}
3 ]4 {) z7 q3 P
2 c0 ^# l8 i( w9 t% J- D! `4 S/ {void main(void)
3 z& }7 F7 T; D8 I+ ^- H{* z4 C; ]% c: S0 F' |0 a/ a
+ d0 x, l+ X, m0 ?# {
unsigned int num=1223;' |; \& q9 \/ m" {% C1 ]
DDRC=0XFF;8 q0 g# d, ?: a& F6 q
DDRD=0XFF;
+ \( m# G9 u5 M* Q PORTC=0B00000000;+ t( N, i. Y$ Q* Y/ s# n& A; L
PORTD=0B00000000;! o( a: X+ N" {+ G4 I A
! g4 K) C. F/ R( S- ~2 |6 s
LCD1602_init();
- T1 E# b9 M; K( r" c3 t: }9 N7 [ LCD1602_prints(0,0,"Zeroer1223");# M' X9 ~+ p* H+ t# ]
: l$ R0 W( h# b7 I" g
while(1)
4 u" V; D2 V6 J/ h; a/ | {
# r" f% b& ]5 j- P2 m delay_ms(500);
/ b# i M1 \( K' t' `" Z1 Q if(++num>9999) num=0; }7 C4 }7 F$ t' J: E& N9 ]
LCD1602_Display(6,1,num/1000+'0');//千位
1 V: w* p3 ]% @$ q8 V: L LCD1602_Display(7,1,(num%1000)/100+0X30);//百位3 V6 Z9 m0 [) N+ h! Q8 s2 |
LCD1602_Display(8,1,(num%100)/10+0x30);//十位) G6 _+ ^) ?% |1 w) X" J2 c
LCD1602_Display(9,1,(num%10)+'0'); //个位! J; `8 V: P3 r- h/ K( n: \4 Q$ @
0 y. Y* L5 G+ G) T }
; X7 h9 B' |$ a) P: w0 S& u}& u: a& e! u/ c
+ m7 Q9 g2 T4 [$ X0 r8 q5 O* b$ z7 f8 ^4 B v
|
* g3 V' E4 I, L6 B, n' h7 i9 I. w H) M+ f
% w% w$ z- q' B7 u% T6 l
2 i0 o8 P9 Z: C: ]! ]8 ^
# B" j9 r& ?+ U |
|