一、实验名称
数码管动态扫描显示01234567(实验五)
二、实验目的
(1)掌握数码管显示数字的原理。
(2)通过不同的编程实现灵活运用数码管。
三、实验原理
数码管由7个发光二极管组成8字形构成的,加上小数点就是8个,分别把它命名为A,B,C,D,E,F,G,H。在共阳接法中,0(低电平)亮,1(高电平)灭。
原理图中把所有数码管的8个笔划段A-H同名端连在一起,而每一个显示器的公共机COM是各自独立受I\O线控制。CPU向字段输出口送出字型码时,所有显示器接收到的字型码相同。由8个PNP的三极管来控制这8位哪一位工作。在单片机里,首先显示一个数,然后关掉,然后在显示第二个数,又关掉,那么将看到连续的而数字显示,轮流点亮撒哦i案过程中,每位显示器的点亮时间是极为短暂的,由于人的视觉暂留和发光二级管的余光效应,是的给人的印象是一组稳定的显示数据,不会有闪烁感。
四、相关原理图
五、实验内容
数码管显示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
ORG 0080h
MAIN:
MOV SP,#(stack-1) ; 初始化堆栈指针
MOV P0,#0FFH ; 初始化I/O口
MOV P2,#0FFH
MOV TMOD,#01H ; 初始化timer0
MOV TH0,#0FCH
MOV TL0,#017H
MOV IE,#082H
MOV DPTR, #DIS_CODE ; 设定显示初值
MOV A,#1
MOVC A,@A+DPTR
MOV dis_buf,A
MOV A,#2
MOVC A,@A+DPTR
MOV dis_buf+01H,A
MOV A,#3
MOVC A,@A+DPTR
MOV dis_buf+02H,A
MOV A,#4
MOVC A,@A+DPTR
MOV dis_buf+03H,A
MOV A,#5
MOVC A,@A+DPTR
MOV dis_buf+04H,A
MOV A,#6
MOVC A,@A+DPTR
MOV dis_buf+05H,A
MOV A,#7
MOVC A,@A+DPTR
MOV dis_buf+06H,A
MOV A,#8
MOVC A,@A+DPTR
MOV dis_buf+07H,A
MOV dis_digit,#0FEH ; 初始从第一个数码管开始扫描
MOV dis_index,A
SETB TR0 ; 启动定时器0,开始动态扫描显示
MAIN_LP:
; 主程序循环,增加其它代码
SJMP MAIN_LP
;===========================================================
USING 0
TIMER0:
; 定时器0中断服程序, 用于数码管的动态扫描
; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
; 选通P2.0口数码管
; DIS_BUF --- 显于缓冲区基地址
PUSH ACC
PUSH PSW
PUSH AR0
MOV TH0,#0FCH
MOV TL0,#017H
MOV P2,#0FFH ; 先关闭所有数码管
MOV A,#DIS_BUF ; 获得显示缓冲区基地址
ADD A,DIS_INDEX ; 获得偏移量
MOV R0,A ; R0 = 基地址 + 偏移量
MOV A,@R0 ; 获得显示代码
MOV P0,A ; 显示代码传送到P0口
MOV P2,DIS_DIGIT ;
MOV A,DIS_DIGIT ; 位选通值左移, 下次中断时选通下一位数码管
RL A
MOV DIS_DIGIT,A
INC DIS_INDEX ; DIS_INDEX加1, 下次中断时显示下一位
ANL DIS_INDEX,#0x07 ; 当DIS_INDEX等于8(0000 1000)时, 清0
POP AR0
POP PSW
POP ACC
RETI
; END OF timer0
;===========================================================
RSEG CODE_SEG
DIS_CODE:
DB 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h,30h,25h,0a9h,26h,0a1h,0b1h;数码管代码
END
六、实验运行
单片机仿真实验报告二:数码管
一、 仿真设计要求
用简单的汇编语言实现,利用AT89C52单片机的P0端口的P0.0~P0.7连接到一个共阴数码管的笔段上,数码管公共端接地。在数码管上循环显示0~9数字,时间间隔0.2S.
二、 数码管电路原理图
三、 程序设计内容及源程序
MAIN:MOV P0,#3FH
ACALL DELAY
MOV P0,#06H
ACALL DELAY
MOV P0,#5BH
ACALL DELAY
MOV P0,#4FH
ACALL DELAY
MOV P0,#66H
ACALL DELAY
MOV P0,#6DH
ACALL DELAY
MOV P0,#7DH
ACALL DELAY
MOV P0,#07H
ACALL DELAY
MOV P0,#7FH
ACALL DELAY
MOV P0,#6FH
ACALL DELAY
AJMP MAIN
DELAY: MOV R7,#255
Y1: MOV R6,#255
DJNZ R6,$
DJNZ R7,Y1
RET
END
四、 实验总结
了解二极管共阴共阳实验原理,运用了延时程序。
苏州大学实验报告院系年级专业姓名学号课程名称成绩指导教师同组实验者实验日期实验名称数码管LED实验一实验目的理解8段数码管的基本原…
实验四数码管动态显示实验一一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段…
单片机实验报告一实验名称数码管动态扫描显示01234567实验五二实验目的1掌握数码管显示数字的原理2通过不同的编程实现灵活运用数…
HUNANUNIVERSITY课程实验报告实验名称学生姓名学生学号专业班级指导老师数码管显示实验20xx1217实验三数码管显示实…
项目名称数码管实验报告姓名陈姣班级11电气2学号11731204指导老师赵海兰实验目的巩固Keil软件的使用方法学习端口输入输出的…
数码管动态显示实验一实验要求1在Proteus软件中画好51单片机最小核心电路包括复位电路和晶振电路2在电路中增加四个7段数码管共…
北京邮电大学实验报告实验名称数码管扫描显示控制器设计与实现学院信息与通信工程学院班级姓名数字电路与逻辑设计实验报告学号日期索引一实…
摘要单片机自20世纪70年代以来以其极高的性价比以及方便小巧受到人们极大的重视和关注本设计选用msp430f249芯片作为控制芯片…
机器人控制课程总结报告机器人控制仿真实验二数码管动态显示姓名李铃年级20xx级系别信息工程学院计科师学号1111000048同组人…