单片机数码管显示实验.docx

上传人:b****4 文档编号:24471038 上传时间:2023-05-27 格式:DOCX 页数:13 大小:111.53KB
下载 相关 举报
单片机数码管显示实验.docx_第1页
第1页 / 共13页
单片机数码管显示实验.docx_第2页
第2页 / 共13页
单片机数码管显示实验.docx_第3页
第3页 / 共13页
单片机数码管显示实验.docx_第4页
第4页 / 共13页
单片机数码管显示实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机数码管显示实验.docx

《单片机数码管显示实验.docx》由会员分享,可在线阅读,更多相关《单片机数码管显示实验.docx(13页珍藏版)》请在冰豆网上搜索。

单片机数码管显示实验.docx

单片机数码管显示实验

实验一数码管实验

一、实验目的

1.了解数码管的显示原理;

2.掌握JXARM9-2440中数码管显示编程方法

二、实验仪器

JXARM9-2440教学实验箱、ADT1000仿真器和ADTIDE集成开发环境、串口连接线、PC机。

三、实验原理

7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。

LED显示器的接口一般有静态显示与动态显示接口两种方式。

本实验中采用的是动态显示接口,其中数码管扫描控制地址为0x20007000,位0-位5每位分别对应一个数码管,将其中某位清0来选择相应的数码管,地址0x20006000为数码管的数据寄存器。

数码管采用共阳方式,向该地址写一个数据就可以控制LED的显示,数据中的1对应的不亮,0对应的亮,数码管各位从高到低排列为dp-g-f-e-d-c-b-a,例如当数据寄存器是11111111时则不亮,当是01111111时则显示8,其原理图如图所示。

四、实验内容

1、编程实现:

六个数码管同时正向显示0-F,然后反向显示F-0。

2、编程实现:

在六个数码管上依次显示与自己姓名有关的内容,可分辨出轮流显示。

3、编程实现:

在六个数码管上依次显示与自己姓名有关的内容,分辨不出轮流显示。

4*、编程实现:

在每个数码管上递增显示0—9。

5*、自行开发。

五、实验程序

1,

/****************************************************************************/

/*文件名称:

LEDSEG7.C*/

/*实验现象:

数码管依次显示出0、1,2、……9、a、b、C、d、E、F*/

/****************************************************************************/

#defineU8unsignedchar

unsignedcharseg7table[16]={

/*01234567*/

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

/*89ABCDEF*/

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,

};

voidDelay(inttime);

/****************************************************************************/

/*函数说明:

JXARM9-24107段构共阳数码管测试*/

/*功能描述:

依次在7段数码管上显示0123456789ABCDEF*/

/*返回代码:

无*/

/*参数说明:

无*/

/****************************************************************************/

voidTest_Seg7(void){

inti;

*((U8*)0x20007000)=0x00;/*6个数码管都亮*/

for(;;)

{

/*数码管从0到F依次将字符显示出来*/

for(i=0;i<0x10;i++)

{

*((U8*)0x20006000)=seg7table[i];

Delay(10000);

}

/*数码管从F到0依次将字符显示出来*/

for(i=0x0f;i>0x00;i--)

{

*((U8*)0x20006000)=seg7table[i];

Delay(10000);

}

}

//TODO

}

/****************************************************************************/

/*Functionname:

循环延时子程序*/

/*Description:

循环'time'次*/

/*Returntype:

void*/

/*Argument:

循环延时计数器*/

/****************************************************************************/

voidDelay(inttime){

inti;

intdelayLoopCount=10000;

for(;time>0;time--);

for(i=0;i

}

 

2,

/****************************************************************************/

/*文件名称:

LEDSEG7.C*/

/*实验现象:

数码管依次显示ZHAngg,并能看出轮流显示*/

/****************************************************************************/

#defineU8unsignedchar

unsignedcharseg7table[16]={

/*ZHAngg67*/

0xa4,0x89,0x88,0xc8,0x90,0x90,0x82,0xf8,

/*89ABCDEF*/

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,

/*HIN*/

0x89,0xcf,0x48

};

voidDelay(inttime);

/****************************************************************************/

/*函数说明:

JXARM9-24107段构共阳数码管测试*/

/*功能描述:

在六个数码管上分别显示字母,与姓名有关*/

/*返回代码:

无*/

/*参数说明:

无*/

/****************************************************************************/

voidTest_Seg7(void){

inti;

*((U8*)0x20007000)=0x00;

for(;;)

{

*((U8*)0x20007000)=0x1f;

*((U8*)0x20006000)=seg7table[0];

Delay(10000);

*((U8*)0x20007000)=0x2f;

*((U8*)0x20006000)=seg7table[1];

Delay(10000);

*((U8*)0x20007000)=0x37;

*((U8*)0x20006000)=seg7table[2];

Delay(10000);

*((U8*)0x20007000)=0x3b;

*((U8*)0x20006000)=seg7table[3];

Delay(10000);

*((U8*)0x20007000)=0x3d;

*((U8*)0x20006000)=seg7table[4];

Delay(10000);

*((U8*)0x20007000)=0x3e;

*((U8*)0x20006000)=seg7table[5];

Delay(10000);

}

//TODO

}

/***************************************************************************/

/*Functionname:

循环延时子程序*/

/*Description:

循环'time'次*/

/*Returntype:

void*/

/*Argument:

循环延时计数器*/

/****************************************************************************/

voidDelay(inttime){

inti;

intdelayLoopCount=10000;

for(;time>0;time--);

for(i=0;i

}

 

3,

/****************************************************************************/

/*文件名称:

LEDSEG7.C*/

/*实验现象:

数码管依次显示出ZHAngg,并看不出轮流显示*/

/****************************************************************************/

#defineU8unsignedchar

unsignedcharseg7table[16]={

/*ZHAngg67*/

0xa4,0x89,0x88,0xc8,0x90,0x90,0x82,0xf8,

/*89ABCDEF*/

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,

/*HIN*/

0x89,0xcf,0x48

};

voidDelay(inttime);

/****************************************************************************/

/*函数说明:

JXARM9-24107段构共阳数码管测试*/

/*功能描述:

在六个数码管上分别显示字母,与姓名有关*/

/*返回代码:

无*/

/*参数说明:

无*/

/****************************************************************************/

voidTest_Seg7(void){

inti;

*((U8*)0x20007000)=0x00;

for(;;)

{

*((U8*)0x20007000)=0x1f;

*((U8*)0x20006000)=seg7table[0];

Delay(10000);

*((U8*)0x20007000)=0x2f;

*((U8*)0x20006000)=seg7table[1];

Delay(10000);

*((U8*)0x20007000)=0x37;

*((U8*)0x20006000)=seg7table[2];

Delay(10000);

*((U8*)0x20007000)=0x3b;

*((U8*)0x20006000)=seg7table[3];

Delay(10000);

*((U8*)0x20007000)=0x3d;

*((U8*)0x20006000)=seg7table[4];

Delay(10000);

*((U8*)0x20007000)=0x3e;

*((U8*)0x20006000)=seg7table[5];

Delay

(1);

}

//TODO

}

/***************************************************************************/

/*Functionname:

循环延时子程序*/

/*Description:

循环'time'次*/

/*Returntype:

void*/

/*Argument:

循环延时计数器*/

/****************************************************************************/

voidDelay(inttime){

inti;

intdelayLoopCount=10000;

for(;time>0;time--);

for(i=0;i

}

 

4,

/****************************************************************************/

/*文件名称:

LEDSEG7.C*/

/*实验现象:

数码管依次显示出0、1,2、……9、a、b、C、d、E、F*/

/****************************************************************************/

#defineU8unsignedchar

unsignedcharseg7table[16]={

/*01234567*/

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

/*89ABCDEF*/

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,

};

voidDelay(inttime);

/****************************************************************************/

/*函数说明:

JXARM9-24107段构共阳数码管测试*/

/*功能描述:

依次在7段数码管各自递增显示0—9*/

/*返回代码:

无*/

/*参数说明:

无*/

/****************************************************************************/

voidTest_Seg7(void){

inti;

for(;;)

{

for(i=0;i<=0x09;i++)

{

*((U8*)0x20007000)=0x1f;

*((U8*)0x20006000)=seg7table[i];

Delay(10000);

}

for(i=0;i<=0x09;i++)

{

*((U8*)0x20007000)=0x2f;

*((U8*)0x20006000)=seg7table[i];

Delay(10000);

}

for(i=0;i<=0x09;i++)

{

*((U8*)0x20007000)=0x37;

*((U8*)0x20006000)=seg7table[i];

Delay(10000);

}

for(i=0;i<=0x09;i++)

{

*((U8*)0x20007000)=0x3b;

*((U8*)0x20006000)=seg7table[i];

Delay(10000);

}

for(i=0;i<=0x09;i++)

{

*((U8*)0x20007000)=0x3d;

*((U8*)0x20006000)=seg7table[i];

Delay(10000);

}

}

//TODO

}

/****************************************************************************/

/*Functionname:

循环延时子程序*/

/*Description:

循环'time'次*/

/*Returntype:

void*/

/*Argument:

循环延时计数器*/

/****************************************************************************/

voidDelay(inttime){

inti;

intdelayLoopCount=10000;

for(;time>0;time--);

for(i=0;i

}

六、实验结果与分析

实验一结果:

六个数码管同时显示相同的符号,从0-F再由F-0之间的循环变换。

分析:

在数码管扫描控制地址处选中六个数码管,使其同时亮,在给其数码管的数据寄存器存入不同符号对应的数值,加上相应的延迟,就可以是轮流变换的循环的符号变换。

实验二结果:

第一个数码管显示Z后,第二个显示H,接着第三个显示A,接着第四个显示n,接着第五个显示g,接着第六个显示g,接着第一个再显示Z…..如此循环。

分析:

设置控制地址使其单独并且循环显示,每个数码管的数据寄存器送入不同的符号的数值,并设置较大的延迟时间即可产生该现象。

实验三结果:

六个数码管一起显示“ZHAngg”。

分析:

原理同实验二,只是将延迟时间改小到人眼无法分辨的地步即使一起显示。

实验四结果:

第一个数码管显示0—9之后,第二个接着显示0—9,接着第三个,第四个….

分析:

设置循环使六个数码管循环单独显示,在每个数码管显示中再加入循环,使其递增显示0—9,设置较大的延迟,是我们可以看清实验现象。

七、实验总结与心得体会

本次试验需要了解数码管的基本工作原理,基于C语言设计编程完成实验,实验的关键在于把握实现各种现象的本质上的差异,在程序上作出修改。

通过本次试验对于实验的严谨性有了进一步的体验,稍有不小心实验结果就适得其反,以后要更加用心,更加认真的做实验。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1