实验4数码管循环显示实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
六、流程图