|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ATmega16L-6 1602
* A$ N0 Y' v8 K+ y! O' b% F1 t1 u3 a//1602液晶相关I/O设置
% Q' p( J/ c" M8 j9 g, M& b+ o#define Rs PORTC4_bit
+ k8 | J* a3 u6 e#define RW PORTC5_bit! g7 w9 v" d: D% V
#define E PORTC6_bit& l) z1 D5 N' z( a0 g! c7 S9 Q9 H
#define LCDDAT PORTD
. D0 e& y5 X* g* h H! W' @' ~/ a
5 K& r; Z4 ]$ o! Y" a& [#define iDat 1 //数据标志
: W8 b! h0 i! e4 f3 p5 E4 n#define iCmd 0 //指令标志& O: B+ G; i6 m# P( g
( w* v( ^- W( O" V! @( I5 u//DatCmd==0--1602写命令函数6 |5 G: M: Z% [0 D/ ^, E
//DatCmd==1--1602写数据函数8 }0 e z% |2 D& @# q+ V
void LCD1602_Writebyte(unsigned char DatCmd,unsigned char dataByte)4 w6 e4 y# I5 Q, m$ J& B$ Z) M0 i
{0 E# y. R: K( ^/ P+ l" h3 w" g. R: ~* s
if (DatCmd == iCmd) //指令操作
2 f$ d; l9 F2 O. T. A9 i* ^, F+ ?3 X Rs=0; //设置该字节数据为控制命令
, O9 X8 i9 q0 B0 ?7 D0 P else9 `, ~. ~$ U' \- D- C
Rs=1; //设置该字节数据为数据% K+ w4 s; s1 k" Q$ [' I
1 K: G* b2 R) d# Y6 c9 p! \0 e
RW=0; //选择写状态7 r$ H8 Q+ R- x7 b
LCDDAT=dataByte; //将命令字通过RD口送至DB4 w O3 ?! D {
E=1; //E高电平将命令字写入1602液晶" }- J* ]+ Q, y7 }. B& d, Y0 U
delay_us(850);, Y: @( L$ K9 {4 N
E=0; //写完以后,恢复E的电平% p) n+ h- p( }! ~9 ^* ~% T
}
2 |1 W- b( d) m$ Q: F- ~# _+ V- H: e/ l
//1602液晶显示地址写函数
8 H, R2 }+ h* svoid LCD1602_GotoXY(unsigned char x,unsigned char y). K& d1 R$ I. P9 i, S4 o
{
0 T: v7 g0 r8 I x&=0x0f; //列地址限制在0-15间
8 e' v6 i0 R$ D$ U+ A: u+ C5 T y&=0x01; //行地址限制在0-1间2 Z, f9 w( U: w4 @ H0 q
if(y==1) //如果是第2行
# ?$ c j0 w" t8 {# Y/ t LCD1602_Writebyte(iCmd,(x+0x40)|0x80); //将列地址写入4 S! m9 i7 E' v5 l% Z5 B( |/ o
else //如果是第1行& S. c* B4 s0 d0 A+ E/ R/ x2 T
LCD1602_Writebyte(iCmd,x|0x80); //将列地址写入
! G, s' ~! w( W6 Z}$ E% y( R, c$ p% F) I8 K
; j4 f! u+ H0 z- k2 M4 P//1602液晶初始化函数( |- _" S& B: Q3 N, P, P$ h
void LCD1602_init(void)3 g* ]9 I1 K9 o, d
{
% L# D; w5 C3 ^, F delay_ms(15);
3 S1 G' u$ B. D+ b9 X2 X. g! x LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示' |, }) U; z2 y: M1 O
delay_ms(5);9 j* F) E3 ]8 X4 R
LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示
: Q1 K8 \. R* T7 n: c delay_ms(5);8 x' O" L# r; I% P2 a+ A" C
LCD1602_Writebyte(iCmd,0x38);
) K7 |7 X7 ?/ ^5 Q6 {1 n% g1 B
' K0 z" d1 u+ ~5 q# j; S* V& Q3 t1 B$ a4 W% H( v) |
LCD1602_Writebyte(iCmd,0x38);
4 g: y9 ]( ^& u" c Y LCD1602_Writebyte(iCmd,0x08); //显示功能关,无光标& ~+ _; G1 O1 U) {8 p
LCD1602_Writebyte(iCmd,0x01); //清屏. c$ p# x! U% p- d5 F. r
LCD1602_Writebyte(iCmd,0x06); //写入新的数据后,光标右移,显示屏不移动5 K3 L, V. |9 _% i+ C: L
LCD1602_Writebyte(iCmd,0x0C); //显示功能开,无光标
/ @* M- E+ O3 B& \0 a: _}
2 F' I N+ C. J% e [+ c
$ A5 x! M3 u( j: ^1 I% m//1602液晶指定地址显示函数
9 Z) j; N5 i, E3 t3 d; n: }void LCD1602_Display(unsigned char x,unsigned char y,unsigned char buf)
9 d6 o: I. z: M: S; Q0 z{
8 m* U( N/ M' B8 v" _ LCD1602_GotoXY(x,y); //先将地址信息写入
0 L- {1 i& M2 ?, o0 ^ LCD1602_Writebyte(iDat,buf); //再写入要显示的数据- d4 f9 x: w0 m0 X8 p' C
}
* k! c9 L% X4 r+ g) H3 ~3 Y
: I" n, _. P5 d6 ovoid LCD1602_prints(unsigned char x,unsigned char y,unsigned char *pString)
# G5 w% g3 a% M- g7 Q0 o{4 G0 D! u! V2 s+ D7 J
* V8 p6 W$ S$ u( ^* Y" o( ^
LCD1602_GotoXY(x,y);8 x* x0 w' t# r6 w( ^% \
while(*pString)//while((*pString)!='\0')// //只要字符串没写完就继续写" p3 @3 p# |/ K; z* a v
{
) N$ V* `2 b2 l- O# U LCD1602_Writebyte(iDat,*pString++);
6 Z; _% M: @: j4 E* d2 l: b8 d- n }
" D2 D4 F ?& G& s7 i X% T2 d}
4 N: E& \' K+ T
9 n3 `. c! U+ d2 ^* yvoid main(void)$ ?- `+ k# z: Z. W& X' u- j
{6 _' h: p2 x' V8 y) P
7 O h+ V- f, t& f# s3 i
unsigned int num=1223;2 P4 u& P9 o5 j4 w4 L7 u8 i5 u
DDRC=0XFF;
7 \) A) U& |: z& ~ DDRD=0XFF;% ^+ {, V+ Y( ~0 ~/ P* [) f+ H
PORTC=0B00000000;$ {9 h- ~ M+ G
PORTD=0B00000000;7 U1 R' l, [( a
* v# K( o" G6 _7 ~9 E0 O, N
LCD1602_init();
1 J, G7 J; {/ `1 Q3 q: Y" v) h LCD1602_prints(0,0,"Zeroer1223");- U" i/ D. w9 ?) Z8 w# S
" ]' m1 w2 d( }8 g4 A N
while(1)
0 D9 V; }2 R3 i3 j4 V {
. o1 F" ~* k4 U5 u; V+ Z: r delay_ms(500);
! u7 t; X: _+ V; v" j5 y0 C6 a if(++num>9999) num=0;
7 c$ V3 Z1 S- `1 r# k; c$ f7 } LCD1602_Display(6,1,num/1000+'0');//千位
' B* v- N) M0 p p LCD1602_Display(7,1,(num%1000)/100+0X30);//百位
& |, H/ \# M! X8 l/ { LCD1602_Display(8,1,(num%100)/10+0x30);//十位
- x+ @% P* G6 z# ^4 b ~ LCD1602_Display(9,1,(num%10)+'0'); //个位' l6 H4 M2 \# d2 J$ A0 G9 o4 ?
# m a" M Y" e }" `2 x0 v1 z W: {: t4 A
}# L3 ?8 d S2 o+ h' G0 ?; e! `
8 f$ A: o( S- X4 y4 C1 z' k" W! q8 A9 d8 @
| 6 D: W' C8 M ]3 ^
, w: a* A0 T2 Y) o$ x . Q7 ]# O# R8 r* s! P1 `7 |; o Z6 ?/ C
' \- f" z `2 r# Z! r' x0 [$ s" p9 d# H1 l
|
|