|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ATmega16L-6 16029 R2 V9 L) O4 O. Y* y, K
//1602液晶相关I/O设置+ V6 x. d" x) A! j
#define Rs PORTC4_bit
4 _3 y) e2 v; n- ~& |* A#define RW PORTC5_bit
+ u6 W/ {: x u, Z#define E PORTC6_bit
: Y" _! I/ l$ F. [$ I$ j" V. d#define LCDDAT PORTD
1 t. `. _& [& c( [
( F. {& W) ~& h! ~$ y#define iDat 1 //数据标志
. u a! l6 {, e5 H- O1 r# d- b#define iCmd 0 //指令标志3 C* T& f+ p& ^# O
# p& V* }9 D1 G& N
//DatCmd==0--1602写命令函数
2 ?9 [/ _7 Z5 K" a0 G* M//DatCmd==1--1602写数据函数9 ?3 A6 q! S. X- ?2 H
void LCD1602_Writebyte(unsigned char DatCmd,unsigned char dataByte)
0 W8 I2 J4 r' p$ R1 P4 Y{! e0 D; O! q, M1 d
if (DatCmd == iCmd) //指令操作
" P2 @' _5 k, T/ {' Z Rs=0; //设置该字节数据为控制命令& E1 p/ n2 R* u4 \7 @ @8 T+ h- Q
else) ?( r, N/ ~5 t; l
Rs=1; //设置该字节数据为数据- m# j6 }3 y2 ?' k( _) I
8 w B0 V( [- ?) G# N& Q RW=0; //选择写状态: b C+ T' u; X! R+ ~! a* |; s
LCDDAT=dataByte; //将命令字通过RD口送至DB( T/ v& r; M* @- \
E=1; //E高电平将命令字写入1602液晶, f. D! K* Q& q* k t1 W5 _2 j
delay_us(850);
& R6 J4 y0 u R! Z E=0; //写完以后,恢复E的电平6 I, W' |3 l- b( d; H% I
}: A2 b# E2 ^7 |; M; ]8 M7 y
7 S# R0 z% M& B
//1602液晶显示地址写函数
% m' I1 M( ?) w, e; G5 A3 Hvoid LCD1602_GotoXY(unsigned char x,unsigned char y)! d T1 W- [/ I1 u# I
{
7 w7 h# Q, y- ]( `9 N x&=0x0f; //列地址限制在0-15间+ d) ]3 _$ K! V1 a
y&=0x01; //行地址限制在0-1间
+ a: m4 O1 l* _ if(y==1) //如果是第2行% g% H7 r+ m q
LCD1602_Writebyte(iCmd,(x+0x40)|0x80); //将列地址写入
4 j! _4 f4 }9 |4 o: B; G% e: H else //如果是第1行
6 `' R& q* S, T9 F1 ? LCD1602_Writebyte(iCmd,x|0x80); //将列地址写入
) \3 R0 L' l' z7 W2 J9 r8 Q}8 S3 M4 S6 z5 t v$ z0 L
$ ]0 g, h- w, a: A4 Z
//1602液晶初始化函数
; I& I& @& e+ {1 P2 s% Evoid LCD1602_init(void)
5 s. ^- w- [6 c9 G{
8 o4 V4 x% |% k; _& E delay_ms(15);
( s' x8 _ `( H& E$ Y8 B LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示, G* _' A. s! t: M0 ?
delay_ms(5);
\- X4 Z; {+ u+ F% m LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示( {0 `/ D+ X8 C2 M! @$ L9 Z- V
delay_ms(5);- E5 e* I- M' p5 j" b8 H
LCD1602_Writebyte(iCmd,0x38);
* M/ T" r" a3 _# h0 k5 t, }- \ s4 y3 H2 Z+ `' u4 M4 F) t2 a# N
5 b0 L( [) @4 P m. G LCD1602_Writebyte(iCmd,0x38);
/ V# b7 ~! R: U: n$ { LCD1602_Writebyte(iCmd,0x08); //显示功能关,无光标9 Q% R( X) i; A' d" H" e& u. @
LCD1602_Writebyte(iCmd,0x01); //清屏
/ D# e" A3 [- k9 N5 H; Z! c3 f* H LCD1602_Writebyte(iCmd,0x06); //写入新的数据后,光标右移,显示屏不移动
. {( P* ]( z2 h Z* }, ^ LCD1602_Writebyte(iCmd,0x0C); //显示功能开,无光标
+ a. ~. j' a( }( G) i9 D}
) ]! r0 C/ }0 [& N1 T. `: }( `6 p. j' s
//1602液晶指定地址显示函数
8 m1 Q7 h8 n: z( H5 b5 wvoid LCD1602_Display(unsigned char x,unsigned char y,unsigned char buf); P2 L- ]" Y2 ^2 ?9 a X5 B
{- M8 t; B; ]* ]9 o6 l% Y
LCD1602_GotoXY(x,y); //先将地址信息写入
5 {" h" h9 K6 N; p5 i( f0 T6 [ LCD1602_Writebyte(iDat,buf); //再写入要显示的数据4 s% s/ C$ O' R
}- ?* W; C0 K `5 r, d
3 W$ W' n1 C: V) ?void LCD1602_prints(unsigned char x,unsigned char y,unsigned char *pString)
6 j6 W) q5 |5 {{
! u2 i" k, J1 s' m8 `6 Q# P0 d6 |: l
# v# ?& U% t8 l6 T0 L9 E4 a) W LCD1602_GotoXY(x,y);
) P/ U& N5 ?2 q/ M9 J6 e- Z% q while(*pString)//while((*pString)!='\0')// //只要字符串没写完就继续写. x5 l; m( U. p1 {! x+ g. B2 L
{
" [8 E) ^& B* j8 I ]" {7 q' c LCD1602_Writebyte(iDat,*pString++);
: p/ u% c! W5 I }
8 ^! [9 [, m3 A" u3 U( I$ Q}' X7 l5 k( ?1 v
; n: Y3 Y' O; E3 v$ R4 Z
void main(void)
$ n- o1 t5 A3 y, }" l/ o+ I{2 `9 e* \) c3 p5 y+ K
; N2 l* h, X& x% ^( m9 H unsigned int num=1223;# h1 i; J0 P [- C
DDRC=0XFF;$ p8 ?! Q: B% F
DDRD=0XFF;1 E& A5 e0 Y8 _+ |* H- H3 I
PORTC=0B00000000; T1 A0 _4 n9 I+ y
PORTD=0B00000000;
! z6 {% {( B( N3 ^& s8 ~6 u n) H8 u0 }5 p6 H4 O# W
LCD1602_init();
, \5 t: y+ ?. X# l LCD1602_prints(0,0,"Zeroer1223");9 @/ P& L" E5 C
* S% b! ^7 Q, ] while(1); u* `' J( g, w6 g
{
* q; O% C6 P' h' v6 z% e- X9 C; R z delay_ms(500);
& @6 J( B+ Q2 B4 V9 r e$ l if(++num>9999) num=0;* T6 Y# Y. [; L& ~7 h- k% F
LCD1602_Display(6,1,num/1000+'0');//千位" j8 E' A, f9 K' n3 Y
LCD1602_Display(7,1,(num%1000)/100+0X30);//百位7 }/ M3 |' \; Y
LCD1602_Display(8,1,(num%100)/10+0x30);//十位) f4 `+ M1 X9 i3 O- M0 w, B1 J
LCD1602_Display(9,1,(num%10)+'0'); //个位1 A- }( {% ~2 A# H* |9 D
8 Z% j7 Y9 B' M5 @' w+ {8 U
}2 y# R4 `7 R, w/ ^3 f( ~% @
}4 F3 D! S; K) p" v( E
7 R9 L" A% B7 y5 _
7 Y4 l" @/ e/ D/ _. h' T$ u |
3 s) G( {6 G1 q0 ]! b \' l) W+ z8 U; s# W+ @
![]()
: N/ z5 p: P4 g" ~7 |4 |. \& q: \; A
' p% g% z4 t& ]3 L' |& K) M
0 M5 z% i" Y# V% @& d8 x) V1 l |
|