|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机流水灯及计数器程序![]()
" `6 ?) C2 p- A0 n7 n" J" }1 S9 @ X6 @
#include<reg51.h>+ W. X: j/ o8 f5 i0 e
unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
& Q% I# ?6 z: P. ^unsigned charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
! U2 C8 m* j* d. I5 ^; E) F( Sunsigned char j=0;3 Z2 d' W V9 {' U
unsigned char LCD_Status;3 w$ K( Y! Z1 d
bit dir=0,run=0;
+ z9 N) d2 e+ I4 Bsbit RS=P1^6;
1 m8 H- l# I) b' x" ^' F1 tsbit RW=P1^7;0 `& w/ x( O3 t+ ~8 Z! U+ X! k3 s
void delay(unsigned int count) //延时函数
8 g- g# C! R$ `) _; s7 |{ unsigned char i;( E8 k' q0 ^& I8 z: C+ I! J
while(count--)
( I f. I! Y- t2 B; q/ x for(i=0;i<120;i++);
$ k7 l O( O9 P% L- E5 B}* s# q! S9 Q W2 m! ~; E
unsigned char Busy_Check() //检查忙函数
' O `; j l( r4 [1 _2 ]2 l; x1 A{ RS=0;RW=1; : o# S8 Q0 t, ~7 Z: E& R R- T
P2=0x4f;: L5 b+ t# N) Z+ R* ^
delay(2);( E0 n1 T5 C/ \
LCD_Status=P0; //读出LCD的状态
) \4 I2 {# r9 X/ W. G$ B delay(2);& a' {# {) S* D3 M% M/ ?8 z) w$ q
P2=0x8f; # Z- U0 J8 {# I* C+ S* r" v
return LCD_Status;' \% R. b6 a) O; \9 T
}
7 {2 g9 O2 K, N/ z( c: Gvoid wcmd(unsigned char cmd) //写命令函数8 P/ n% y; s# X" I1 ~6 s* M
{ while((Busy_Check() &0x80)==0x80);2 p0 @# |% L4 J" \
RS=0;RW=0;6 Z! b! F& Y! K- o+ W" H- V6 v0 H
P2=0x4f;
& }/ c) M9 t+ h! w% k" M P0=cmd; //命令由P0口送入LCD
, Q0 i5 b7 Q9 Q' ` delay(2);
; u3 F2 c$ R& s, D P2=0x8f;
0 z* n" W6 V/ B& \}
0 r- _. L& w3 @, N/ N( Tvoid wdat(unsigned char dat) //写数据函数( s4 s2 A' N& z! s+ d
{ while((Busy_Check() &0x80)==0x80); % s4 h$ o$ t; n' | a$ v; @9 \
RS=1;RW=0;
4 [# J6 k* v3 } P2=0x4f; . ]8 Y: D2 L X' N1 l; X
P0=dat; //数据由P0口送入LCD
' b& j$ r3 b' p r. N$ `8 w delay(2);
- a* t' {' D4 T' Y- r0 Z0 Z+ @ P2=0x8f;
' d. a! v! B. n& I" M5 N}6 Q; J9 z% Y; w( ~3 x. ~; C5 o/ P
void LCD_init() //初始化函数
) x; k3 f( o; s% ]' u* P3 _{ wcmd(0x38); //38H=0011 1000,使用8位,用5×7的字型,2行4 B" q* m# I2 {' P- G/ Y; ~
delay(20);
; I+ ~2 ~2 t+ O2 I wcmd(0x01); //01H=0000 0001,清屏
7 G4 z: }; p/ p7 o/ d delay(20);
# r6 d1 ^) ?, W wcmd(0x06); //06H=0000 0110,字符不动,光标自动右移一格
, B3 }0 }% g% _: p0 [4 s5 w delay(20);
8 x% W8 Y$ i6 p7 z) g wcmd(0x0e); //0eH=0000 1110,开显示,有光标,字符不闪烁
2 \; O4 D: C6 q) b l8 I7 c delay(20);. V$ t G6 ?$ r( w4 o" P
}
" v3 V# p- a! fvoid main(){ //主函数,流水灯运行4 X; l# z+ [$ c P' K7 n# ^. c
signed char j;5 T; h4 M) d' a9 ]
IT1=1;; N; i$ g0 y9 [1 p" F
EX1=1;
" |! r, U& o* W' XEA=1;- F e& {" Z$ v( c$ [; x
PX1=0;
% K: @/ Y0 _ r& n/ |6 ~4 g& awhile(1){
. h/ q& Q" |" sswitch(P3&0x3c){/ p3 @: l8 E* C- Z5 C! ]. ^
case 0x38:run=1;dir=1;break; O9 {* v+ f- p3 [# e
case 0x34:run=0;dir=0;break;* z$ z- D$ C) p( R: Z
case 0x2c:dir=0;break;
- m8 o ^5 S9 N$ C4 _5 i( b& Ecase 0x1c:dir=1;break;}
4 k8 e- j; h1 R& @/ d# \. E if(run==1)# K1 n% t# R# }% V+ Y7 {# A; D
if(dir==1)4 S" w. L9 [, F/ S, n6 I( o
for(j=0;j<=7;j++){
0 C8 T1 A( g) v, \ P2=led[j];
6 N: f5 \" g' e+ [! t- a delay(500);, W' b) g) e( G4 v# W: V
}
- s" i! `% ?4 _% z else- N7 m0 k* O! F
for(j=7;j>=0;j--){+ k u7 F( M) _8 k" v7 k8 e
P2=led[j];# r+ t9 h6 J- {# T) w# X6 [+ G
delay(500);3 c1 ^. F) c6 y) j! q) ?
}
7 L( r; z6 E# j0 v! p$ P1 U- b else P2=0xff;
: d J% \) D4 N8 z}}( q# `: d; N- ~+ Q; u4 ^- C; Z
K2() interrupt 2{ //中断函数,LCD显示,计数开始
L4 ~6 l* L& |- ~" P1 w3 Y7 TLCD_init();7 L0 ^" H8 v* }& @" x' |
wcmd(0x80+00); 5 g1 A7 z: C1 V7 c4 E. _5 s
wdat('1'); 8 l: n% `' v5 \# h( U
wdat('1');
7 n2 c6 F/ L: z. h' q, \wdat('1'); 5 `3 `0 e/ r1 a! H# w
wdat('2');5 S: f7 y' W% `
wdat('2');
3 }+ F" ~" O+ `* Q- e2 k2 i/ qwdat('2');
0 o9 ^. h, O3 O5 a) n3 p$ dwdat('3');
( [3 g- h- ~( s t( `: s/ r' fwdat('3');* ~$ A! n$ n6 O1 ~ [9 N
wdat('3');3 q; K3 S$ @$ \ x1 x3 E, s
wdat('4');9 |7 o# `: _+ {' k1 l3 R
wdat('4');2 i* v' D6 c' X
wdat('4');
9 m. j2 S0 L y# Dwcmd(0x80+0x40);
, L& c9 H0 p! R5 ?wdat('B');6 F: H& G1 q+ W
wdat('1');" a" V; G+ F7 }& b) ]! Z6 F8 b
wdat('1');; C- I7 h" v- J* t
wdat('2');9 e3 x* ?) C4 [8 M/ L
wdat('2');! g+ r5 o, W: }5 _8 s
wdat('3');
6 Y6 t& L) L8 c2 X' D' X- \, }wdat('3');
! R: f' X5 B6 z) ~! W# L2 l/ M2 ?6 q* Dwdat('4');
6 d5 {! y& v$ swdat('4');
2 m! j- `" Q) |3 m1 efor(j=0;j<=99;j++)
3 j* Q/ ?4 w; ?$ |7 ~$ E# v- V% m{P2=0x8f;
4 C/ ~) R8 L, jP0=led_mod[j/10];
7 @- p0 j, R" Q- pP2=0x1f;
* r5 D; F: j2 J: H) ]/ pP0=led_mod[j%10];
% X1 i1 d2 `1 [1 N/ c. D& Kdelay(500);* ?- A) M" v0 i% W/ `% I) ^
P0=0;}
! [" O, M3 a& c9 ^% g}
$ P4 D# D/ ]* Y# w N0 k$ L
1 h( e+ M* {6 S8 f# W/ J. g9 i/ I5 |, A5 V8 L8 ^% y
6 i/ G( A2 Z4 W7 e0 k6 ?
|
|