|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机流水灯及计数器程序 ; Y4 q4 `9 T! z
0 Y4 e: ~- @3 P! B' l#include<reg51.h>: c% _' S/ V! I+ R
unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};( e, g ]: o& x
unsigned charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};7 R- f3 q9 {5 X
unsigned char j=0;
4 s+ M( O' Q) r" s% m+ Nunsigned char LCD_Status;
5 c) q5 s) K4 x8 G: B9 b9 U; R9 l5 Rbit dir=0,run=0; h" W z) A Q, h O! E- ^! a* v
sbit RS=P1^6;. i5 [' U9 q# v" w7 T0 a' t
sbit RW=P1^7;; P, M1 K7 M2 D \% p
void delay(unsigned int count) //延时函数0 k8 Q: \8 h* {5 q! f. U
{ unsigned char i;
1 o. t0 m9 c( l2 @* j) e$ T while(count--)" d* M9 U( n( w, q) B. g
for(i=0;i<120;i++);
% a. `! D3 }% K5 v}! L7 Q# g8 p6 q3 Z( m
unsigned char Busy_Check() //检查忙函数
2 J4 a3 A% x( Q, I+ h{ RS=0;RW=1;
( w% `8 k2 O4 @ P2=0x4f;% B8 }5 f7 m1 U. f
delay(2);
' P3 A* e+ u7 n0 u LCD_Status=P0; //读出LCD的状态
- ^5 A; U: ]7 m delay(2);
8 u4 J8 p+ r" y5 J/ H P2=0x8f;
5 D' \0 v( e0 W: h# P/ K1 X% c5 e return LCD_Status;3 _3 r1 S4 j+ s X& w( _
}
0 `$ b6 ~ ~7 _6 a& w1 i' `void wcmd(unsigned char cmd) //写命令函数
9 ^& I, D! N. g% D' _9 w$ h{ while((Busy_Check() &0x80)==0x80);: {# {0 G0 s# [% N# L5 @! h& {7 G
RS=0;RW=0;
; r+ _: T" z. G* C0 w1 x! v4 } P2=0x4f; # v( c- q& s* P/ |
P0=cmd; //命令由P0口送入LCD
4 V' g7 h @9 ]+ f3 F delay(2);6 L3 c( R, }8 ^/ b) f6 M. @: @
P2=0x8f; / m2 Y8 E# u2 ~6 O; z! d/ r @
}. u# e! h& s, S3 @3 p, ]+ g
void wdat(unsigned char dat) //写数据函数
- s$ n) h1 H/ ~2 {$ d$ h{ while((Busy_Check() &0x80)==0x80);
5 Q+ x5 n2 N* C( L- |" t RS=1;RW=0;% ~) C1 C- }! P, q( m1 l
P2=0x4f;
- y/ \, ~3 |3 W- K5 r5 O& V P0=dat; //数据由P0口送入LCD+ [2 v6 [! z. Y; z, H, ]3 s
delay(2);
2 c: Q; O$ F" K# I: ~ P2=0x8f;
; Z3 q9 Z: g$ b) _4 K @' R6 h5 `}: b0 C7 V4 a/ Z" B9 V, m
void LCD_init() //初始化函数8 q7 v( x: ?2 _- v9 R7 v7 ^; f6 g
{ wcmd(0x38); //38H=0011 1000,使用8位,用5×7的字型,2行
. ] T$ q9 P q9 w2 p( t delay(20); # s) l& |) g' Y+ \
wcmd(0x01); //01H=0000 0001,清屏
+ q/ [$ l0 s4 [' t$ A% V) r t delay(20); + Z1 ~* \) E ^! @, s
wcmd(0x06); //06H=0000 0110,字符不动,光标自动右移一格; E( b2 _+ N& X/ w: S3 }3 d) w6 [' L
delay(20);6 h1 ^$ O, t" N2 c) j! X5 g# w$ V
wcmd(0x0e); //0eH=0000 1110,开显示,有光标,字符不闪烁
, r, _( c# _" \2 H' }( J" k! }: t delay(20);
9 |* B9 ^1 E& Q8 _# y}
8 w" R! h6 q3 h9 D$ F* C3 }void main(){ //主函数,流水灯运行
; S6 d) K! i2 P" [$ ^* Xsigned char j;) y3 g8 M' _& |; v" v
IT1=1;
& K0 {! v" t+ q3 v+ U* REX1=1;- y! K3 Q: _; G6 i( a/ o8 H/ m% R1 x
EA=1;* \" n3 a$ k. @# \! {5 j I
PX1=0;+ Y& Q9 l" D4 G3 P, E$ [
while(1){
! ?3 z J, x% V, F* eswitch(P3&0x3c){* D( G- r% W# V& }$ w
case 0x38:run=1;dir=1;break;: U; W) e% M% I& c3 ^- `
case 0x34:run=0;dir=0;break;
# B# K1 U1 O* X& ?) _2 e' ^$ Q% xcase 0x2c:dir=0;break;" Y$ [+ [1 A, D; e3 @' _+ A. v* X- Q# H
case 0x1c:dir=1;break;}% F$ C% q8 f- p- A' m3 t
if(run==1)
+ U" S& x4 E- g c3 F if(dir==1)
* ~9 \! x: G' w. {) M1 Y for(j=0;j<=7;j++){' L, ^. D7 y+ J6 F# m
P2=led[j];
1 h+ c8 K; W/ p) ] delay(500);
/ F+ J9 p. K; Y( z }
) _% ~% }2 _0 n7 | else
5 N9 B- `3 H' b% }% f; K0 q for(j=7;j>=0;j--){0 M c* T6 M, i+ M& y4 w
P2=led[j];
* D' u9 ^# \+ e! m delay(500);6 r( U6 ~5 ?1 t! H0 H, q7 ]! g w
}
2 H! ^ f0 K3 x% f9 Q) n: b0 O else P2=0xff;5 Z+ g' [9 {# o
}}( h" c$ E9 a- _+ q( V6 D8 z q6 H/ h
K2() interrupt 2{ //中断函数,LCD显示,计数开始5 Q9 `' n4 E- |0 J* C
LCD_init();
! g2 l4 S- Q. G% F2 Twcmd(0x80+00); 7 I9 e% u! \; p: u! b( z' ~
wdat('1');
) L+ W& e8 N. E3 u4 p7 zwdat('1'); 6 Q3 v# G, o8 h4 [* z2 v" S* B- X. g
wdat('1');
' b: c$ ?3 C& u u, N* kwdat('2');! D0 Z- E) H0 C9 Q. Y* u# b# H. g
wdat('2');
3 Y8 H- Q* A, H9 I+ rwdat('2');
( Y0 m! i8 `, }% D0 Q+ Fwdat('3');
0 M( }& A$ V" U( U: Rwdat('3');7 Y \1 U' s* K t# l
wdat('3');
! e2 c9 l4 x" awdat('4');. K3 k* K- o: O% z" U, @
wdat('4');" w" d) [* l. @% j
wdat('4');
?0 p3 O- x" p+ p# u1 W6 _wcmd(0x80+0x40);6 Q6 p* a7 B3 n& S
wdat('B');) v4 ?# _! m# E0 x2 z, a$ m
wdat('1');: u& ` V: T F. w3 E
wdat('1');/ w! r. q7 w- N
wdat('2');
+ Y% `* _5 A& }7 W* `, X% @wdat('2');3 {! P- z; u3 q% d, C
wdat('3');. d0 M* N# p6 q0 M- M2 L+ c/ t
wdat('3');
$ [, g6 q# ^' n% e: L# f( L2 Awdat('4');
6 J" A2 h0 K" D9 Y$ Xwdat('4');
8 @2 R3 H! k& ~; m5 K% O0 D$ Sfor(j=0;j<=99;j++)
' d! u- s/ |+ [% ~2 ?% M) `" e{P2=0x8f;
+ n+ a$ m3 @. LP0=led_mod[j/10];
4 u& z# R- Y- _3 bP2=0x1f;
+ a/ T* j- Z5 l$ z! w, ?P0=led_mod[j%10];# K$ a; h- q: k1 a
delay(500);
. D1 C& T0 y1 [7 _P0=0;}4 v4 {; ^, p/ U4 t `
}' u2 r5 j$ F4 y
9 {" N L3 n3 ?# N% A5 T$ f: g' j) o3 O2 d ~* A
! s1 T# m1 e. \' {: r* D |
|