数码管实验报告

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

篇一:实验八数码管led实验报告

苏州大学实验报告

院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期

实验名称:数码管led实验

一.实验目的

理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管lg5641ah与mcu的接线图。二.实验内容

理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,mcu的排8段数码管显示mcu复位后的开始到现在的运行时间。由于只有四个数码管,所以只显示mcu 运行到目前为止的分钟和秒,当计时达到一个小时,就重新从00:00开始计时。另外,也可以通过pc方的串口通信程序,指定计时的开始值。三.实验过程(一)原理图

图8-2数码管外形

dp

a b c

e f g dp

图8-1 数码管(二)接线图

图8-3 mcu与4连排8段数码管的连接第1页

(三)基本原理

8段数码管一般由8个发光二极管(llight-emitting diode,led)组成,每一个位段就是一个发光二极管。一个8段数码管分别由a、b、c、d、e、f、g位段,外加上一个小数点的位段h(或记为dp)组成。根据公共端所接电平的高低,可分为共阳极和共阴极两种。有时数码管不需要小数点,只有7个位段,称7段数码管。共阴极8段数码管的信号端高电平有效,只要在各个位段上加上相应的信号即可使相应的位段发光,比如:要使a段发光,则在发光。

四.编程

(一)流程图

图8-4 数码管led显示流程图(及其中断子程序)

(二)所用寄存器名称及其各个位

程序中没有使用与led显示相关的控制和状态寄存器,仅仅使用了通用i/o口a口和b口。(三)主要代码段

1第2页第3页

2.c

第4页

第5页

篇二:数码管实验报告

单片机实验报告

一、实验名称

数码管动态扫描显示01234567(实验五)

二、实验目的

(1)掌握数码管显示数字的原理。

(2)通过不同的编程实现灵活运用数码管。

三、实验原理

四、相关原理图

五、实验内容

数码管显示12345678

c程序:

#include <reg51.h>

#include <intrins.h>

unsigned char data dis_digit;

unsigned char code dis_code[11]={ 0x28, 0x7e, 0xa2, 0x62, 0x74, 0x61, 0x21, 0x7a, 0x20, 0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表

unsigned char data dis_buf[8];// 显示缓冲区

unsigned char data dis_index;

char code sst516[3] _at_ 0x003b;

void main()

{

p0 = 0xff;

p2 = 0xff;

tmod = 0x01;

th0 = 0xfc;

tl0 = 0x17;

ie = 0x82;

dis_buf[0] = dis_code[0x1];

dis_buf[1] = dis_code[0x2];

dis_buf[2] = dis_code[0x3];

dis_buf[3] = dis_code[0x4];

dis_buf[4] = dis_code[0x5];

dis_buf[5] = dis_code[0x6];

dis_buf[6] = dis_code[0x7];

dis_buf[7] = dis_code[0x8];

dis_digit = 0xfe;

dis_index = 0;

tr0 = 1;

while(1);}

void timer0() interrupt 1

// 定时器0中断服务程序, 用于数码管的动态扫描

// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量

// dis_digit --- 位选通值, 传送到p2口用于选通当前数码管的数值, 如等于0xfe时, // 选通p2.0口数码管

// dis_buf--- 显于缓冲区基地址

{

th0 = 0xfc;

tl0 = 0x17;

p2 = 0xff;// 先关闭所有数码管

p0 = dis_buf[dis_index]; // 显示代码传送到p0口

p2 = dis_digit;//

dis_digit = _crol_(dis_digit,1);// 位选通值左移, 下次中断时选通下一位数码管

dis_index++;//

dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 }汇编程序:

code_seg segment code

data_seg segment data

rseg data_seg

dis_digit: ds 1

dis_index: ds 1

dis_buf: ds 8

stack: ds 20

;===========================================================

cseg at 00000h ; reset向量

ljmp main

cseg at 0000bh ; 定时器0中断向量

ljmp timer0

;===========================================================

rseg code_seg

org0080h

main:

mov sp,#(stack-1); 初始化堆栈指针

movp0,#0ffh; 初始化i/o口

movp2,#0ffh

movtmod,#01h; 初始化timer0

movth0,#0fch

movtl0,#017h

movie,#082h

mov dptr, #dis_code; 设定显示初值

mov a,#1

movc a,@a+dptr

movdis_buf,a

mov a,#2

movc a,@a+dptr

movdis_buf+01h,a

mov a,#3

movc a,@a+dptr

movdis_buf+02h,a

mov a,#4

movc a,@a+dptr

movdis_buf+03h,amov a,#5

movc a,@a+dptr

movdis_buf+04h,a

mov a,#6

movc a,@a+dptr

movdis_buf+05h,a

mov a,#7

相关文档
最新文档