|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
利用74HC595显示多个数码管. e# g# L) Q% i5 @9 N4 [+ M
; m8 R5 B& n% W) J" F7 g
5 h6 ^# v6 e! Z- r; I
#include <reg52.h>
4 M, Y ~" N* ?# n* x) L( S#include <intrins.h>7 s" T3 |" g( @$ p9 N
#define uint unsigned int
1 ?: V) c0 G+ _#define uchar unsigned char
/ _1 ~8 T) N( ^8 b* L# Z" Zsbit ClOCK = P2^0; //HC595第11脚,串行时钟输入端5 f6 `- d7 L3 d( M5 d G9 H6 `- j
sbit DATA = P2^1; //HC595第14脚,串行数据输入端$ \- N* d0 {! X) L/ O+ e3 y' s
sbit LATCH = P2^2; //HC595第12脚,输出锁存脉冲输入端
. E! Y1 j0 g7 Y
* U9 h/ E9 Q" h. c% `//定义共阴数码管段码0-9
/ F3 p7 Y* m# i% u- a3 Ouchar code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};! |: [1 l2 v3 j- H/ d3 R- H1 ~
6 Y8 ~. ^0 h: P! u. J$ ?) Z& \
//串行输出一个字节! r' N8 d9 W' R% E
void HC595(uchar word)
+ R# S5 A0 O% W8 {) H7 `! k{: E6 p) B9 ]: A1 H
uchar i;
' k' t2 w1 V2 p0 [, ^& @1 z for (i=8;i>0;i--)
) m9 v' L* a$ o {" \3 i7 @% \, y
ClOCK=0;8 t8 k( |5 r% Y
DATA=0x80&word;+ O5 r1 X% X5 Z. O5 F
word=_crol_(word,1);
& V" J; z9 q+ d- a3 f, X+ | ClOCK=1;
4 [) Y7 a. l3 o3 n3 D! V4 V4 { _nop_();) }0 ?; K$ b/ z" Y; I
}( l# Q7 L( l' b# G& g* p
}
/ Y: f) Z( k% ]% M) J4 ^
4 Y1 i" K% U; \0 D* y: w8 C" {+ R
void display(uchar S1, uchar S2, uchar S3, uchar S4, uchar S5, uchar S6)
1 A# E# b+ u0 M% W* i3 p; v{
+ o1 A, X0 v( b* m* e HC595(segment[S6]);3 } ^: w" I4 i6 s6 Y* ~
HC595(segment[S5]);; X6 `1 S3 J$ b- p3 g- j3 q
HC595(segment[S4]);
9 G }0 `' C5 \, e4 |) D( i. N2 F5 o HC595(segment[S3]);; c v" ]/ I: _( x/ ?9 ~1 n d) o
HC595(segment[S2]);
% u8 j$ e+ y# ` f& p- i% U9 O HC595(segment[S1]);4 w) O! ~! @* ^( [
LATCH=1;
& X; P$ }1 O; q e2 w' F$ I2 D8 q3 ? P _nop_();
1 G$ |& i s9 p3 r7 X4 _! r( @5 q LATCH=0;0 z9 v# v' c* f1 t; x# x1 m! G" Z
}- j* q* u+ ?" @5 ? o, B) Z
void main()
+ F1 |; S5 W" i0 m [{5 T9 {& c% U* J6 u& o% Q& i
LATCH = 0;) Z v: f2 k9 F
while(1)
7 W0 }' ]# g2 N; R" S) M# u display(2, 0, 1, 3, 1, 4);
2 B$ {) Q9 a: w& t8 C% f$ ~}; q6 Q& G! i4 m9 L# K$ g0 m6 D
5 ~8 q8 X' b1 S% Q" A. P* J
3 Y& r2 l. C/ \& z
|
|