当前位置:文档之家› 数码管实验报告

数码管实验报告

篇一:实验八数码管led实验报告苏州大学实验报告院、系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称:数码管led实验一.实验目的理解8段数码管的基本原理,理解8段数码管的显示和编程方法,理解4连排共阴极8段数码管lg5641ah与mcu的接线图。

二.实验内容理解8段数码管原理,运行与理解各子程序,编制一个4连排8段数码管程序,mcu的排8段数码管显示mcu复位后的开始到现在的运行时间。

由于只有四个数码管,所以只显示mcu 运行到目前为止的分钟和秒,当计时达到一个小时,就重新从00:00开始计时。

另外,也可以通过pc方的串口通信程序,指定计时的开始值。

三.实验过程(一)原理图图8-2数码管外形dpa b ce 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)通过不同的编程实现灵活运用数码管。

三、实验原理四、相关原理图五、实验内容数码管显示12345678c程序:#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 codedata_seg segment datarseg data_segdis_digit: ds 1dis_index: ds 1dis_buf: ds 8stack: ds 20;===========================================================cseg at 00000h ; reset向量ljmp maincseg at 0000bh ; 定时器0中断向量ljmp timer0;===========================================================rseg code_segorg0080hmain:mov sp,#(stack-1); 初始化堆栈指针movp0,#0ffh; 初始化i/o口movp2,#0ffhmovtmod,#01h; 初始化timer0movth0,#0fchmovtl0,#017hmovie,#082hmov dptr, #dis_code; 设定显示初值mov a,#1movc a,@a+dptrmovdis_buf,amov a,#2movc a,@a+dptrmovdis_buf+01h,amov a,#3movc a,@a+dptrmovdis_buf+02h,amov a,#4movc a,@a+dptrmovdis_buf+03h,amov a,#5movc a,@a+dptrmovdis_buf+04h,amov a,#6movc a,@a+dptrmovdis_buf+05h,amov a,#7movc a,@a+dptrmovdis_buf+06h,amov a,#8movc a,@a+dptrmovdis_buf+07h,amovdis_digit,#0feh; 初始从第一个数码管开始扫描movdis_index,asetb tr0 ; 启动定时器0,开始动态扫描显示main_lp:; 主程序循环,增加其它代码sjmp main_lp;===========================================================using 0timer0:; 定时器0中断服程序, 用于数码管的动态扫描; dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量; dis_digit --- 位选通值, 传送到p2口用于选通当前数码管的数值, 如等于0xfe时, ; 选通p2.0口数码管; dis_buf--- 显于缓冲区基地址push accpush pswpush ar0movth0,#0fchmovtl0,#017hmovp2,#0ffh ; 先关闭所有数码管mova,#dis_buf ; 获得显示缓冲区基地址adda,dis_index ; 获得偏移量movr0,a; r0 = 基地址 + 偏移量mova,@r0; 获得显示代码movp0,a; 显示代码传送到p0口movp2,dis_digit ;mov a,dis_digit ; 位选通值左移, 下次中断时选通下一位数码管rl a篇三:数码管动态显示实验报告实验四数码管动态显示实验一一、实验要求1. 在proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. 在电路中增加四个7段数码管(共阳/共阴自选),将p1口作数据输出口与7段数码管数据引脚相连,p2.0~p2.3引脚输出选控制信号3. 在keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4二、实验目的1.2.3.4. 巩固proteus软件和keil软件的使用方法学习端口输入输出的高级应用掌握7段数码管的连接方式和动态显示法掌握查表程序和延时等子程序的设计三.实验说明本实验是将单片机的p1口做为输出口,将四个数码管的七段引脚分别接到p1.0至p1.7。

由于电路中采用共阳极的数码管,所以当p1端口相应的引脚为0时,对应的数码管段点亮。

程序中预设了数字0-9的段码。

由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。

因此定义了scan函数,接到单片机的p2.0至p2.3在实验中,预设的数字段码表存放在数组tab中,由于段码表是固定的,因此存储类型可设为code。

在proteus软件中按照要求画出电路,再利用keil软件按需要实现的功能编写c程序,生成hex文件,把hex文件导到proteus软件中进行仿真。

为了能够更好的验证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89c51的一个机器周期包含12个时钟脉冲,而我们采用的是12mhz晶振,每一个时钟脉冲的时间是1/12us,所以一个机器周期为1us。

在keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。

四、硬件原理图及程序设计(一)硬件原理图设计电路中p1.0到p1.7为数码管七段端口的控制口,排阻rp1阻值为220ω,p2.0到p2.3为数码管的扫描信号。

at89c51单片机的9脚(rst)为复位引脚,当rst为高电平的时间达到2个机器周期时系统就会被复位;31引脚(ea)为存取外部存储器使能引脚,当ea为高电平是使用单片机内部存储器,当ea为低电平时单片机则使用外部存储器。

18、19引脚是接晶振脚。

而接地和电源端在软件中已经接好,所以不用在引线。

如下图所示:(二)流程图与程序设计(三)程序设源代码#include <reg51.h> //定义8051寄存器头文件 #define seg7p p1 //定义扫描信号的位置 #define scanp p2 //定义数码管的位置char code tab[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0~4的码值0x92, 0x83, 0xf8, 0x80, 0x98 }; //数字5~9的码值char disp[4]={1,2,3,4};//定义要显示的数值void delay_ms(int x); //声明延时函数char scan[4]={0xfe,0xfd,0xfb,0xf7}; //定义扫描char i,j; //定义变量i,jmain() //主函数的开始{while(1) //无限循环{for(i=0;i<4;i++) //从{j=disp[3-i]; //取出显示的数值scanp =scan[i]; //扫描的顺序seg7p =tab[j]; //将tab的数值赋给数码管delay_ms(4);//延时4ms}}}void delay_ms(int x){ int i,j;for (i=0;i<x;i++)for (j=0;j<120;j++);}五.实验总结问题一:运行电路时,数码管乱码解决的方法:检查电路,发现程序中扫描信号端口错误,将扫描信号的端口顺序调换,重新运行。

相关主题