数码管实验报告
- 格式:pdf
- 大小:306.59 KB
- 文档页数:6
数码管实验
一、实验目的:
1、通过实验进一步熟悉430微处理器的知识;
2、学会使用430调试软件IAR;
3、了解数码管显示的原理,学会使用430编写程序控制数码管显示待显示
的多位数。
二、实验内容:
1、IAR软件的基本使用;
2、显示任意设定的4位数;
3、循环移位显示4个数字;
三、实验原理:
1、数码管显示原理: 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一
个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数
码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数
码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴
极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二
极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应
字段就不亮。
图1 数码管动态显示驱动
动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方
式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,
但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,
所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码
管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间
为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数
码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示
数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
2、段、位扫描原理
先选择位—即哪个数码管显示,在选择段—即哪个引脚位高电平或者低电平。
3、电路图(MCU和数码管引脚连接)
数码管的8个引脚(a—g、dp)分别连接到74HC244的2、4、6、8、11、13、
15、17。然后74HC244的3、5、7、9、12、14、16、18引脚连接到149单片机的44—51
引脚上。
4、端口寄存器的设置说明
MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端
口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含
全部上述端口),它们都可以直接用于输入/输出。MSP430系统中没有专门的输
入/输出指令,输入/输出操作通过传送指令来实现。端口P1`P6的每一位都可以独立用于输入/输出,即具有位寻址功能。常见的键盘接口可以直接用端口进行
模拟,用查询或者中断方式控制。由于MSP430的端口只有数据口,没有状态口
或控制口,在实际应用中,如在查询式输入/输出传送时,可以用端口的某一位
或者几位来传送状态信息,通过查询对应位的状态来确定外设是否处于“准备好”
状态。 端口的功能:(1)P1,P2端口: I/O,中断功能,其他片内外设功能如定时器、
比较器;(2)P3,P4P5P6端口:I/O,其他片内外设功能如SPI、UART模式,A/D
转换等;(3)S,COM端口:I/O,驱动液晶。
MSP430各端口具有丰富的控制寄存器供用户实现相应的操作。其中P1,P2
具有7个寄存器,P3~P6具有4个寄存器。通过设置寄存器我们可以实(1)每个I/O位独立编程;(2)任意组合输入,输出和中断;(3)P1,P2所有8个位
全部可以用作外部中断处理;(4)可以使用所以指令对寄存器操作;(5)可以
按字节输入、输出,也可按位进行操作。
端口P1,P2的功能可以通过它们的7个控制寄存器来实现。这里,Px代表P1
或P2。 (1)PxDIR:输入/输出方向寄存器。 8位相互独立,可以分别定义8个引
脚的输入/输出方向。8位再PUC后都被复位。使用输入/输出功能时,应该先定
义端口的方向 。作为输入时只能读,作为输出时,可读可写。0:输入模式;1:
输出模式.
(2)PXIN:输入寄存器,为只读寄存器。用户不能对它进行写入,只能通过读取其寄存器的内容来知道I/O口的输入信号。所以其引脚的方向要选为输入。如再键盘键盘扫描程序中经常要读取行线或者列线的端口寄存器值来判断案件
情况。
(3)PXOUT:输出寄存器。该寄存器为I/O端口的输出缓冲寄存器,再读取时输出缓存的内容与引脚方向定义无关。改变方向寄存器的内容,输出缓存的内
容不受影响。
(4)PXIFG:中断标志寄存器。他的8个标志位标志相应引脚是否有中断请
求有待处理。0:无中断请求, 1:有中断请求。其中断标志分别为PXIFG.0~PX
IFG.7。应该注意的是:PXIFG.0~PXIFG.7共用一个中断向量,为多源中断。当任一事件引起的中断进行处理时,PXIFG.0~PXIFG.7不会自动复位,必须由软件
来判断是对哪一个事件,并将相应的标志复位。另外,外部中断事件的时间必须
保持不低于1.5倍的MCLK时间,以保证中断请求被接受,且使相应中断标志位
置位。
(5)PXIES:中断触发沿选择寄存器。如果允许PX口的某个引脚中断,还需定义该引脚的中断触发方式。0:上升沿触发使相应标志置位,1:下降沿触发相
应标志置位。如:MOV.B #07H, &P1IES ;p1低3位下降沿触发中断。
(6)PXIE:中断使能寄存器。PX口的每一个引脚都有一位用以控制该引脚
是否允许中断。0:禁止中断 ,1:允许中断。MOV.B #0E0H, &P2IE ;P2高3位
允许中断。 (7)PXSEL:功能选择寄存器。P1,P2两端口还具有其他片内外设功能,将
这些功能与芯片外的联系通过复用P1,P2引脚的方式来实现。PXSEL用来选择引
脚的I/O端口功能与外围模块功能。0:选择引脚为I/O端口,1:选择引脚为外
围模块功能。如:P1SEL|=0X10; //P1.4为外围模块功能。
5、程序流程图:
图二 数码管显示流程图 四、实验步骤和结果:
数码管显示val的值,默认值为1234,即数码管显示”1,2,3,4“。可通 开 始
系 统 初 始 化
定 时 扫 描
显 示
结 束
过修改val的值显示相应的四位数。
五、附录: 1、 程序:
main主函数:
#include
#include"led.c"
unsigned char Buf[4]={0,0,0,0}; //四个数码管对应的数据缓冲区 void Allocate(unsigned int x)
{
Buf[3]=x%10000/1000;
Buf[2]=x%1000/100;
Buf[1]=x%100/10; Buf[0]=x%10;
}
void main( void )
{
unsigned int val;
WDTCTL = WDTPW + WDTHOLD;
Init_Led();
val = 1234;
while(1)
{
Allocate(val);
Led_Display(Buf);
}
}
led函数:
#include
unsigned char Table[16]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7
a,0x9e,0x8e}; //段码0~f
/**************************************************
函数名称:延时函数 功能:延时时间
参数;unsigned int tim
返回值:无 **************************************************/
void delay(unsigned int time) {
while(time--);
}
/************************************************* 函数名称:
功能:初始化数码管的输出脚方向
参数:
返回值:无 **************************************************/ void Init_Led(void)
{
P4DIR |= 0xf0; //P4高四位为位选
P5DIR |= 0xff; //P5为 段选
} /*************************************************
函数名称:数码管显示
功能:将四个缓冲区单元的内容分别显示到四个数码管上面
参数:unsigned charp *Bufptr
返回值:无 **************************************************/
void Led_Display(unsigned char *Bufptr)
{
unsigned char disi; unsigned int BitCT=0X10;
for(disi=0;disi<4;disi++)
{
P4OUT &= 0x0f;
P4OUT |= BitCT; //选中个位数码管 高电平选通从右往左 P5OUT = Table[*Bufptr++];
BitCT = BitCT<<1; //左移一位
delay(500);
}
}
2、系统原理图: