实验4数码管循环显示实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

班级学号姓名实验组别

实验日期室温报告日期成绩

报告内容:(目的和要求、原理、步骤、数据、计算、小结等)

实验名称:实验4数码管循环显示实验

一、实验目的

了解数码管动态显示原理,学会LPC2103通用I/O口的使用。

二、实验及说明

本实验中共接入了8个共阳八段数码管(数码管阳极连在一起),演示数码管中的某一段点亮只需在对应的位置写入“0”即可。在这里74HC595实现了数据串并转换的功能,试验中用到的两片74HC595分别用于控制八个数码管的位选和其中每个数码管的段选。

本实验循环显示了十六进制数码“0—F”。

三、实验说明

四、实验步骤

1.实验连线

段选控制芯片(U7:74HC595)时钟控制端接LPC2103总线接口模块的P0.4,数据输入端接总线接口模块的P0.6,选通端接跳线JP9。数据输出端分别接数码管段选端。

位选控制芯片(U8:74HC595)时钟控制端接LPC2103总线接口模块的P0.4,数据端接总线接口模块的P0.7,选通端接跳线JP10。数据输出端分别接数码管位选端。

JP9:左跳数码管段选芯片(U7)片选有效,右跳液晶显示EN有效。

JP10:左跳数码管位选芯片(U8)片选有效,右跳液晶显示CS2有效。

JP14:左跳数码管段选、位选电源端(+3.3V)有效。

JP15:左跳数码管段选、位选芯片接地端(GND)有效。

2.仿真器的设置:一般选用JTAG调试,若使用RelInFlash生成目标时,编译连接生成的目标代码会将芯片加密。此时调试无法继续,须将硬件调成ISP模式进行全片擦除。

3.运行程序:show.hex

4.接通电源,观察实验板上数码管的变化。

四、原理图

五、实验程序

#include "config.h"

#define LS_SH (1<<4) //clk

#define LS_DS_D (1<<6) //duan data

#define LS_DS_W (1<<7) //wei data

#define ST_CP1 (1<<8) //duan store

#define ST_CP2 (1<<11) //wei store

#define LS_DS (1<<10) //LED data

#define ST_CP3 (1<<12) //LED store

uint8 SEG_TAB[17] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};

//数码显示段码表0 1 2 3 4 5 6 7 8 9 a b c d e f -

uint8 SEG_TABDOT[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

//带小数点的段码表0. 1. 2. 3. 4. 5. 6. 7. 8. 9.

uint8 BIT_TAB[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

//数码显示位码表第1位 (8)

#define uint unsigned int

#define uchar unsigned char

void delay(uint32 i)

{

uint32 j;

for(;i>0;i--)

for(j=50000;j>0;j--);

}

void SENT_NUM(uint8 date,uint8 wei)

{

uint i;

IO0CLR=ST_CP1; //sent data

for(i=8;i>0;i--)

{

IO0CLR=LS_SH;

if((date&0x80)!=0)

{ IO0SET=LS_DS_D; }

else

{ IO0CLR=LS_DS_D; }

date=date<<1;

IO0SET=LS_SH;

}

IO0SET=ST_CP1; //sent data end

IO0CLR=ST_CP2; //sent wei

for(i=8;i>0;i--)

{

IO0CLR=LS_SH;

if((wei&0x80)!=0)

{ IO0SET=LS_DS_W; }

else

{ IO0CLR=LS_DS_W; }

wei=wei<<1;

IO0SET=LS_SH;

}

IO0SET=ST_CP2; //sent wei end }

void SENT_LED(uint8 date)

{

uint i;

for(i=8;i>0;i--)

{

IO0CLR=LS_SH;

if((date&0x80)!=0)

{ IO0SET=LS_DS; }

else

{ IO0CLR=LS_DS; }

date=date<<1;

IO0SET=LS_SH;

}

IO0SET=ST_CP3;

}

int main (void)

{// add user source code

uint z;

PINSEL0=0x00000000; //P0.4 0.10 0.12 GPIO

SCS=0x00; //low power

IO0DIR=0xffffffff; //P0.4 0.10 0.12 OUTPUT

while(1)

{

for(z=0;z<16;z++)

{

if(z<8)

{

SENT_NUM(SEG_TAB[z],BIT_TAB[z]);

SENT_LED(flowlamp_TAB[7-z]);

}

else

{

SENT_NUM(SEG_TAB[z],BIT_TAB[15-z]);

SENT_LED(flowlamp_TAB[15-z]);

}

delay(30);

}

}

return 0;

}

六、流程图

相关文档
最新文档