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