|
& N9 o A" ^3 I! A4 p9 J @% l程序在哪里?, }) ~1 [5 e4 v+ M, I B6 N$ V
第一:好好看看你的数码管的管脚,共十脚,为什么呢?每个数码管的八个LED的阴极——八个脚,另外两脚就是每个数码管的共阳了,电路如图
# @* M" ?' p7 Z4 C
) ? C( M! L6 i- N7 r看清楚了,这两个数码管的阴极是并联在一起的,所以你给段码后,两个数码管显示内容当然是一样的!
' {' p+ E- }4 K9 m( u# \这样做对新手是很难的,但节约了单片机的IO口啊——10个IO口控制两个数码管,12个IO口可以控制四个数码管......用的数码管越多,节约的IO口就越多。
; Y1 }; t& g9 [, H% ]* o& g1 i第二:这样的数码管显示方法是:利用视觉暂留现象,开一个数码管,显示一下,就关了,马上开另一个数码管,人眼还没有感觉第一个数码管已经关了,第二个又开了,人就认为——是认为,两个数码管都是亮的,四个、八个数码管都是这样显示的举个例子程序吧:& s/ ]7 L, `! H/ X) g. b+ @. Z
假设:上面这两个数码管是这样和单片机连接的:ABCDEFG和DP接在P0口,A在最低位,DP在最高位;DIG1、DIG2分别接在P20、P21上,那么,显示子函数应该是这样的:/ S- s: [/ }/ D6 w
void XS(void)//显示子函数
# b# L8 I$ O) m{
. k; B+ |6 h- E' ~1 K& a* ^- O' F& z DIG1=1;//开第一个数码管
( {0 @5 r2 U8 n6 l. t# j4 d P0=0x55;//这个0x55是我随便写的,表示你要显示的第一个内容
) |8 d( q8 U: ^ void Delay10ms();//软件延时
/ ?. ~! n$ F$ S: s DIG1=0;//关第一个数码管' b' A/ ~% t/ a9 W
DIG2=1;//开第二个数码管1 D& p" U# B6 d7 p- w5 R/ J) Z
P0=0xaa;//这个0xaa是我随便写的,表示你要显示的第一个内容
) Z$ t) _ D; N. B/ u0 l: g void Delay10ms();//软件延时% l, U! g: U* |5 {& H L
DIG2=0;//关第二个数码管
& `4 U* x# K* x q5 k; S- I} E* W) \. U d! L( @3 l; v
8 f0 j @0 [4 z) N8 ?- Y# n' z
你试试看9 o# \5 c1 a \, A! F6 X7 F
|
|