|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
制作出来的实物图如下:
) Y o8 _+ R. ?& `; M9 M$ ^+ G , o9 G2 @7 m- D1 ]7 s f
altium Designer画的PCB图如下:+ u2 [' Z& Q1 w W! b% e; ~
) E4 `- Z- v$ y0 E6 ^ " o" |" Y3 z! D; j% s6 f4 _
' G2 ^( b2 r' n3 m6 @单片机源程序如下:
5 s- |/ k+ Q6 [4 pinclude "reg51.h". ]: Z% n0 [8 h5 d! J
#include "intrins.h"
4 Q& c& z D+ d" w B# `3 h
0 i& T w2 `) T& Q6 `sfr P5 = 0xC8;, Y8 k) A9 F" ~$ r* G4 h; C6 r
sfr P1M0 = 0X92;
9 `, f; B8 S" F- n2 B2 q6 \sfr P1M1 = 0x91;
+ X; f- t: {3 X; C3 e! w" G" p/ Nsfr P3M0 = 0XB2;
q$ v% ]! X/ D% Q& s2 Fsfr P3M1 = 0xB1;
E5 n f: W7 P3 psfr P5M0 = 0XCA;
& m$ w0 a- p5 i( u1 ]( s. rsfr P5M1 = 0xC9;
0 g- N* a1 j' s) m" k$ w2 m: p, g( ^ E
sbit S_RCLK = P1^7;//位移动信号
: L9 `3 f% ^6 _ Vsbit L_RCLK = P1^6;//平行输出信号3 z! r2 o7 `, H/ n) M' T+ O
sbit S_BIT = P1^5;//位输入0 f( h9 n- F$ j1 {$ Y
. y& I9 m! x( h//bit ; //标志位,虚拟的按键
3 h- o5 v& R% c6 Sunsigned char ct;
8 ~) t w5 t& H//unsigned int //255 65536. D( Z3 c7 b7 \- w
unsigned char code SEG_tab[]={0x3f,0x06,0x5b,0x4f,* a; Q& R$ @& C$ }
0x66,0x6d,0x7d,0x07,
" ]& `; d( Z& | P 0x7f,0x6f,0x77,0x7c,% ?9 X- o6 J0 M* i
0x39,0x5e,0x79,0x71,0x40,0x80};
: e e- D5 m5 [: q; N; S) a3 t/ O8 h7 e3 k5 O" V/ a
void Send_595(unsigned char x);
+ B5 Q$ ^7 Y7 dvoid Delay1ms();
R9 N4 P% T7 _( K
$ X4 ~' Y: N) T9 e* C) B' B3 R+ T6 I& C) Q
main(void); t ], h$ T1 |8 g V; i' Z0 Z' u
{$ b& C/ D: k8 e5 z
P1M0 = 0X00;* n4 ]. B! h3 e" T
P1M1 = 0X00; //0000 0000
8 {& Y) U/ t6 m' h9 e; t' u P3M0 = 0X00; //0000 1000
3 C" c( @' X! g3 x, x P3M1 = 0X00;! b5 s9 |3 G9 u/ a+ g
P5M0 = 0X00;3 V( R5 J0 j3 Z
P5M1 = 0X00;' x) F. M& G9 W: \
L_RCLK = 0;
5 }* H d( r9 w! h: C8 S' i, H0 M$ G S_RCLK = 0;; O& ]3 [( D! |& [- O0 m, H
S_BIT = 0;//位输入/ R& n0 R0 N$ T7 o! @
while(1)
7 |) l, m( O3 P4 y {
% t+ h. v- g- i! O& q+ F static unsigned char ct=0;
, u3 A$ K' g4 e# S( S- ? unsigned int j=0;9 y5 j! o' w6 J; u
j=~(0x01<<ct);' \: C$ ]$ m7 G4 i% @& i, i5 h
Send_595(j>>8);//片选相数码管 位码高8位 7 _' w& x( |/ J% k( u
Send_595(j);//片选相数码管 位码低8位 ' z8 ?, ~. v! N( ?; v
Send_595(SEG_tab[ct]);//数码管数据$ ?# ^6 V1 e+ X- g
L_RCLK = 1;: s% H8 _' R, I7 n* B7 _. b& A \
L_RCLK = 0;
) X* C+ M0 B8 n1 p1 Y- W, b Delay1ms();
2 `& g' o( a8 J8 E) f, r( g if(ct<16)
" [" `& N" l+ n: |( P {% b O7 c5 M. h( i$ M; q$ }% Y
ct++;
6 D- g$ q6 ?$ L% A% V7 v }
* J& M- y& j( o4 t6 z' F: z else ct=0;
4 J2 C7 q7 v+ q* r }3 ~( O4 ]" v* S2 Z7 Z/ {
}, O( i& b, y+ O" K4 z5 l$ T- o
# C8 ?7 N6 a. j
- F- o% U% ]* S$ F$ z6 V0 q K0 R
void Send_595(unsigned char x)& _$ F" k3 |' A
{
& E1 T4 b6 Q) F: x. S1 J5 d unsigned char i;
; d9 D5 {; w- b! Z. _ for(i=0;i<8;i++)
) b; w8 W! N. b6 H8 R6 u; } {1 P) c3 E5 e$ W* i
if(x&0x80) S_BIT = 1;
" [7 g7 w# y* V8 A. ~, ` else S_BIT = 0;- n, l9 n) {9 b( V5 S0 W0 N
S_RCLK = 1; 7 K4 z! R$ e8 @% w3 G+ K" w
S_RCLK = 0;4 D: _2 C+ l% a/ |8 ]+ e
x = x<<1;
" M4 ~- z3 K7 \* A+ w }8 J7 a l, H8 t3 K z }. p
}
* }. Y$ q: z6 V% P, K! Z F0 J
void Delay1ms() //@11.0592MHz* I- c% M6 \: V% K
{3 {* a) E4 s& B- x) I
unsigned char i, j;9 _% E7 x0 o) t
0 n0 \' s1 s% W0 i i = 15;8 w9 `& E4 h" b5 I3 [
j = 90;+ K1 g+ E7 C. e! f8 |$ V$ D- P, R
do' H8 i S: a3 y+ `+ F4 {
{
4 r* N4 T+ n8 j: R7 O+ t& V while (--j);( n" S( v/ R) Z, l, @
} while (--i);. k- n) U- c# {* A) T" W
}
( @3 U/ Y- p$ l8 S( ?6 D! a' m |
|