七段数码显示器显示实验报告

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

单片机原理及接口技术

实验报告

实验项目:

姓名:

专业:

班级:

学号:

一、实验名称

七段数码显示器显示实验(SPI通信方式)

二、实验设备

PC机1台,CEPARK畅学系列实验装置1套

三、实验目的

1.熟悉I/O口作为数字量输出的初始化;

2.熟悉共阳极与共阴极两种数码管的工作原理;

3.学会软硬件的设计和调试方法;

4.根据七段数码管的特性,对应出每个数字引脚输出的16进制码,然后编写程序。

四、实验要求

1.将0-9这十个数字按顺序依次在数码管上显示出来,时间间隔为0.5S;

2.熟悉延时函数的使用(可用for循环自己写一个延时函数);

3.掌握PIC16F877A芯片及电子元件的使用方法;

4.实现单片机软件与硬件的结合,将理论知识应用于实践。

五、理论原理

1.LED七段数码显示器由8个发光二极管组成显示字段,根据部发光二极管的连接形式不同,LED有共阴极和共阳极两种(原理图如下图1所示)。(实验板采用的LED为共阳极的连接方式)

图1.单个共阳极数码管原理图

2.接口说明:接口编号为JP44,需要一个8位端口(A~G、DP)去控制,因此提供给LED的字形码也是8位的。数码管各段编号如下图2所示:

图2.数码管各段编号

3.LED七段数码显示器各字段与控制端口位的对应关系如下表1所示:

表1. 七段数码显示器各字段与控制端口位的对应关系

控制端口位D7 D6 D5 D4 D3 D2 D1 D0 字段名dp g f e d c b a

4.共阳极LED七段数码显示器字形代码如下表2所示:

表2. 共阳极LED七段数码显示器字形代码表

字形显示编码字形显示编码

0 C0H 9 90H

1 F9H A 88H

2 A4H b 83H

3 B0H C C6H

4 99H d A1H

5 92H E 86H

6 82H F 8EH

7 F8H .(小数点)7FH

8 80H -(负号)BFH

六、实验容步骤

1.接线说明

核心板RD口接底板JP15,具体为:RD0-A,RD1-B,RD2-C,RD3-D,RD4-E,RD5-F,RD6-G,RD7-DP

2.创建项目

打开MPLAB IDE v8.90 →选择Project,进入Project Wizard,进入下面的界面,单击下一步。

Device选择PIC16F877A,单击下一步。

如果是编写C源代码,Active Toolsuite选择HI-TECH Universal ToolSuite,Toolsuite Contents选择HI-TECH ANSI C Compiler,其他保持默认,单击下一步。

如果编写汇编源代码,Active Toolsuite选择Microchip MPASM Toolsuite,Toolsuite Contents选择MPASM Assembler [mpasmwin.exe] v5.49,其他保持默认,单击下一步。

然后选择存放项目的文件路径,单击Browse...

这里选择了桌面上的PICC文件夹(空的),并给项目起名为demo,单击保存→下一步→完成。

因为提前并没有写好代码,没有代码可用,所以保持默认,单击下一步。

最后,单击完成,环境配置完成,后面的工作就是写代码,然后运行测试了。

至此,一个空项目创建完成。

3.连接硬件和软件

依次选择菜单栏Programmer →Select Programmer →PICkit 3

连接成功后,Output窗口给出提示。

4.编译,下载运行

首先,单击快捷菜单New File。

然后,添加任意容后,按下Ctrl+S或者单击保存按钮,保存文件名为test.c

保存路径选择一开始在桌面创建的PICC文件夹。

然后,将刚刚保存的文件添加到项目中。右击工作空间视窗中demo项目下的Source Files,选择Add Files

接下来选择test.c文件并打开。

单击编译,后出现如下画面。

下载程序到芯片,如果程序正确,将看到相应的现象。

七、实验程序

#define _XTAL_FREQ 4000000

#include "lian_pic.h"

__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);

//HS振荡,禁止看门狗,低压编程关闭,启动延时定时器

const uchar smg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x00,};

// 0 1 2 3 4 5 6 7 8 9 all

const uchar smg_bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,};

uchar c;

uchar d;

//********************函数定义*********************

uchar spi_write_read(uchar dd);

//*************** 主程序********************

void main(void)

{

SSPM3=0;

SSPM2=0;

SSPM1=0;

SSPM0=0;//spi主控模式,时钟为Fosc/4

CKP=0;//空闲为低电平

STAT_CKE=1;//SDO前沿采样

STAT_SMP=0;//在数据输出时间的中间采样输入数据

TRISD=0;//RD4/SDI为输出(不使用SDI引脚时,可设置为输出,作普通io用) SSPEN=1;//使能MSSP模块,启用spi或iic

__delay_ms(10);

PORTD=0x00;//产生锁存时钟

spi_write_read(0x00);

spi_write_read(0x00);

PORTD=0xff;

__delay_ms(500);

while(1)

{

for(c=0;c<10;c++)

{

spi_write_read(smg[c]);//控制显示的数字

相关文档
最新文档