|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ATmega16L-6 1602 d5 a# ~( O; `0 Y! ]# s6 X( p
//1602液晶相关I/O设置
- }2 b6 U8 P; ^+ y9 n4 I9 J#define Rs PORTC4_bit
& M' z* U8 n' S# H#define RW PORTC5_bit
- [9 g5 g7 G) b9 I#define E PORTC6_bit
6 t' ` W( d( b; D, l#define LCDDAT PORTD- S8 m4 E7 z8 M
V: b/ _ w7 L) d
#define iDat 1 //数据标志5 o3 ?. k: Y2 @' X' r
#define iCmd 0 //指令标志4 H6 I! t i9 @2 {! q" [: r; B
+ q! }" s8 s* {, O! t0 S: c5 s7 [0 T
//DatCmd==0--1602写命令函数
0 [- A; Y) `6 z//DatCmd==1--1602写数据函数
; O( Z. z) }) r2 ]2 D! ~void LCD1602_Writebyte(unsigned char DatCmd,unsigned char dataByte)# C- N# |1 t& E
{# H/ S) n9 Z! e i {6 d0 [# E
if (DatCmd == iCmd) //指令操作! r: w7 ]( S5 s' n7 x
Rs=0; //设置该字节数据为控制命令
6 R6 ~4 z4 s- r else$ Z4 m* _, S: b- i+ @) V0 d4 Q
Rs=1; //设置该字节数据为数据
1 O. E( q* @: h8 m& F
~. d6 K. V. f$ J7 q RW=0; //选择写状态: C- ^) w Q- U7 L
LCDDAT=dataByte; //将命令字通过RD口送至DB
& ^6 H8 P' S$ f/ s. A- Y+ g7 w3 R E=1; //E高电平将命令字写入1602液晶6 A. c+ S9 P- A1 X4 P+ |" S
delay_us(850);
0 q' U2 G( f; r E=0; //写完以后,恢复E的电平* J# E7 |! v( f, F$ T2 _
}
6 u: @9 L2 p+ Q7 L2 H* ~- ?3 ~4 h8 ~- z& z3 a Y: {; ]/ a% r
//1602液晶显示地址写函数7 t l5 m7 |1 `6 |* |
void LCD1602_GotoXY(unsigned char x,unsigned char y)
1 m+ Y% x1 B' e+ [+ B9 `{& |1 A1 x) C" h
x&=0x0f; //列地址限制在0-15间
, X. @& q, ]- O7 d9 K y&=0x01; //行地址限制在0-1间
5 f7 G( A, `4 w# o4 }+ y9 X: i if(y==1) //如果是第2行9 d+ M/ c& H6 F/ m
LCD1602_Writebyte(iCmd,(x+0x40)|0x80); //将列地址写入
$ t* q7 [2 J6 Y$ L" c; B2 k else //如果是第1行) {/ ^% V& Z: h6 L% }. A1 I
LCD1602_Writebyte(iCmd,x|0x80); //将列地址写入
1 e" i7 c3 |( B5 o* z% h& x}
9 K Z/ g m- [! J. G0 g: }) q7 ?6 ]6 }1 b# X# m) E
//1602液晶初始化函数$ |; v; i8 y( a# ]
void LCD1602_init(void)% u6 _2 w8 J6 q7 Y# t& h
{
4 A; y3 `2 q8 Q! d" [* M* w delay_ms(15);9 m. u+ N3 F% N
LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示
, k- Y4 {+ ? M delay_ms(5);8 U# n$ k2 M b2 x% K" D/ ]2 ]& ~
LCD1602_Writebyte(iCmd,0x38); //8位数据总线,两行显示模式,5*7点阵显示
/ D7 z# R; s( E/ \/ t' t; e- D# V delay_ms(5);4 W' r4 ~% Z3 b6 p; e& y+ N
LCD1602_Writebyte(iCmd,0x38);
- W) C$ l5 W1 h% e% `
) a. j' t+ T B* P* T# B0 [
' i1 B- A+ A$ |$ u' U LCD1602_Writebyte(iCmd,0x38);
( D1 U0 O# \$ n/ d* j LCD1602_Writebyte(iCmd,0x08); //显示功能关,无光标
" K: \/ }/ Q+ s6 M, R4 a7 X LCD1602_Writebyte(iCmd,0x01); //清屏
2 D! r# A/ r2 p! z LCD1602_Writebyte(iCmd,0x06); //写入新的数据后,光标右移,显示屏不移动/ F# x( O4 X, K9 B& f
LCD1602_Writebyte(iCmd,0x0C); //显示功能开,无光标1 P, w# [9 ]' @* ^. d/ y; q1 v8 X
}
0 K* h3 C) T' ]& I; u
' E- @! D6 s4 P) Z//1602液晶指定地址显示函数
2 S" Q' G. s# ~6 V! P- U) fvoid LCD1602_Display(unsigned char x,unsigned char y,unsigned char buf)9 h. B" c! @: O$ h
{2 e. X/ h) c7 U5 G# \& W
LCD1602_GotoXY(x,y); //先将地址信息写入) x- `- w+ b9 ?/ [$ O
LCD1602_Writebyte(iDat,buf); //再写入要显示的数据
9 e# j- C6 J" O# ]7 _- N- U- q}! {: n _0 H) Q$ \
: {& I9 V9 L ^void LCD1602_prints(unsigned char x,unsigned char y,unsigned char *pString)9 o0 G' N! L+ |
{, t) b5 ?- z/ _# K2 d- j+ A2 |
: c8 Y8 g2 z. r1 t5 v3 P7 X; x$ e5 J LCD1602_GotoXY(x,y);2 K* D3 W, x! _- R
while(*pString)//while((*pString)!='\0')// //只要字符串没写完就继续写8 a1 @; ~9 c' ~. Q, u8 |
{
/ j8 T8 F7 W" D: d3 } LCD1602_Writebyte(iDat,*pString++);
5 B. L% L$ F( Z1 Q }
3 O# B# G7 O' P2 V' f# W% d. n4 p}
* `% q; n8 e& H- p+ z/ _- m* \
, Y/ H# }) P# `9 O" _void main(void)
6 \" S5 q+ H0 L' @ W3 V( f9 f{
; U3 I% `; c) ]& A# p
& ~/ r/ ?. C" D& r2 v unsigned int num=1223;
/ H9 O6 y7 K& f1 \4 F DDRC=0XFF;; d" Q* c: q0 _1 @
DDRD=0XFF;
) @; s1 W. K! o; z, v" a1 i- i# S PORTC=0B00000000;
& U W8 u; I8 O5 ]; M PORTD=0B00000000;1 W' e0 _. {: O7 Q9 d
- S8 u1 G2 v( X$ K O; X4 K
LCD1602_init();
$ J- k& `5 \/ l& ^- m LCD1602_prints(0,0,"Zeroer1223");
0 |5 L! D4 H' W9 g/ b- P5 d/ q2 @( E5 ?1 c# M
while(1)
6 c1 ^5 l3 ~2 g8 U7 d1 \2 t {
" Y; h/ |) T+ Y1 { @6 q delay_ms(500);: D! D0 U. M2 Y# c8 V v# |
if(++num>9999) num=0;
! Q, R9 M4 B5 t( ] `) ?" _$ |& R LCD1602_Display(6,1,num/1000+'0');//千位6 [3 L/ R# ~+ g
LCD1602_Display(7,1,(num%1000)/100+0X30);//百位' c5 D6 n; O W7 s( j5 {. @* u+ k$ Z
LCD1602_Display(8,1,(num%100)/10+0x30);//十位
" E$ b+ \) }: O! K z e+ ]8 C LCD1602_Display(9,1,(num%10)+'0'); //个位
/ W5 {; m, g7 U! L8 [2 D
, m1 ~: `/ A3 c8 C1 c6 Y" D1 t }8 @! ~' u+ l# G7 t5 p5 Q
}
0 [4 R. C' l. j# F
9 i |+ a, p. [4 r1 U. A4 x: R% O( q" y9 G
| / d/ ~; d( D N( I
- q- [+ }5 E/ G9 B, _! f% R+ P![]()
& J5 y, m9 T9 l' Y/ H4 f: N
0 b2 V; u2 l/ B0 c+ ~' ~+ E; j6 Z$ I! b& Q0 O2 p5 R
|
|