MSP430
程序?/p>
<
?/p>
>
数码管显?/p>
数码管也是单片机系统最常用的输出设备之一
(
还有液晶、发光二极管?/p>
)
。七?/p>
(
这里用的
?/p>
8
段,有小数点
)
数码管可以完成显?/p>
0-9
数字和一部分的英文字符如?/p>
A
?/p>
b
。本文实
现的程序完成显示数字和可显示的英文字符;同时完成数码管显示的
printf
函数的移植,
以支?/p>
printf
的格式化字符等好用的特点(我用的数码?/p>
8
个排为一排,方便数字等的?/p>
示)?/p>
?/p>
硬件介绍?/p>
这里所用到的硬件资源包?/p>
8
个数码管、和
msp430
单片机的两个
8
?/p>
IO
?/p>
(
这里?/p>
的是
P3
?/p>
P5
口,如有改变,可以通过宏定义更?/p>
)
?/p>
数码管是
8
个共阴的数码管,
a-h
8
段通过一?/p>
200Ω
的电阻接?/p>
430
单片机的
P5
口?/p>
共阴端是由单片机?/p>
P3
口控制,
单片机的一?/p>
IO
通过一个三极管接到数码管的共阴端,
以完成位选?/p>
单片机的
P3
口时数码管的位选口,某位为高则选中?/p>
P5
口时段选口;要数码管显示时?/p>
通过
P3
位选,选中某个数码管亮?/p>
P5
段选选择
8
段(
a-h
)中的那些亮,从而控制某
一位显示数字或字符?/p>
要同时显示多个数码管,就要动态扫描;动态扫描时,本程序选用的是由看门狗的中?/p>
扫描显示:每
1.9ms
显示其中的一位,动态扫描显示每一位,从而让数码管看起来是同
时亮的?/p>
?/p>
程序实现?/p>
数码管显示首先要有一个数码管显示的断码表(完成数字和字符到数码管段值的表)?/p>
程序中采用了?/p>
MSP430
系列单片机系统工程设计与实践》这本书推荐的方式实现的?/p>
个数码表:先用宏定义定义每段对应的单片机要输出的段值,然后再实现是个表,当?/p>
件改变时,只需更改前面的每段的段值定义即可,改动的地方少了很多,代码如下?/p>
/*
宏定义,数码?/p>
a-h
各段对应的比特,更换硬件只用改动以下
8
?/p>
*/
#define
a
0x01
//
AAAA
#define
b
0x02
//
F
B
#define
c
0x04
//
F
B
#define
d
0x08
//
GGGG
#define
e
0x10
//
E
C
#define
f
0x20
//
E
C
#define
g
0x40
//
DDDD
HH
#define
h
0x80
//
小数?/p>
/*
用宏定义自动生成段码表,很好的写法,值得学习
*/
/*
更换硬件无需重写段码?/p>
*/
const
char
Tab[]
=
{
a
+
b
+
c
+
d
+
e
+
f,
//
Displays
"0
"