深圳市华胄科技有限公司 >> MCU专题 >> 8051单片机


51单片机基础实验----数码显示实验



提交者 阳光总在风雨后  在  2008-7-16 16:11:23 

上一篇 下一篇
实验任务


学会数码管的显示原理及编程。


相关常识说明:


单片机进行数码显示应具有显示器件;应用最广泛的是7段数码管。习惯上说是7段,实际含小数点是8段;下面我们称其为段数码管。





图1


段数码管的段排列和内结构见下图:


段排列




图2 内部接线图


段数码管从内部接线上分共阳和共阴两种;上图左为共阴,右为共阳。在电路设计时应根据情况决定采用共阳或共阴,其基本原则是:若单片机io口直接驱动数码管个段,最好采用共阳数码管,因为51单片机io口输出高电平时输出的电流很小,数码管不会太亮;若数码管是通过驱动芯片与单片机相连的,就要看驱动芯片对数码管极性的要求啦。


电路原理图:(单片机没画出)




图3

这里的数码管直接用单片机p0口驱动,v2、v3是各数码管公共阳极的控制三极管,r3~r5和r13~r16是数码管个段LED的限流电阻。当A、B、C、D、E、F、G、DP 端接低电平,p2.0也为地电平时,L9 数码管各段全部点亮;若p2.0=1,p2.1=0则LED10各段全部点亮。


下面我们来写一段程序,让一位数码管显示数字


star: mov dptr,#numtab ;指定查表启始地址
mov a,#3 ;显示3,你可以改变该数显示
MOVC A,@A+DPTR
mov p0,a
clr p2.0 ;开个位显示
ljmp $


;段数码管各划的数字排列表
numtab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;显示内容的对应代码
;0 1 2 3 4 5 6 7 8 9 ;显示内容
db 88h,83h,0c6h,0a1h,86h,8eh
; a b c d e f


end


在前一节讲过,数码管各段加的电平不同,会显示不同的图形;那么,要想数码管显示“1”,就必须使数码管“B”“C”段点亮,其他段熄灭;由于共阳数码管是0电平点亮段,高电平熄灭段。即:
“DP G F E D C B A” 也就是说,将数码管从 DP--A 各段按顺序排列,其高低电平应呈现二进制“11111001”状态,换算成十六进制就是“F9H”;显然,你想显示的所有数字和字符,都必须这样一一对应的转换成十六进制数据。其他数字字符的hex代码见程序的 numtab 表。


遗憾的是,这些hex代码是没有规律可寻的,我们只有先将所希望显示的数字字符的hex代码制成表格,在需要显示某个数字字符时进行表格查询,查询到对应代码后再将代码送数码管显示,这样,我们希望显示并能理解的数字字符就显示了出来。


本实验程序在开始就将显示代码表的基地址赋给dptr,第二句是准备查找数字“3”的段代码,也就是准备让数码管显示“3”。“MOVC A,@A+DPTR”是将累加器acc中当前的数据加上dptr的数据,作为查表地址,并将这个地址中的数据传送到累加器acc覆盖原数据。acc中现在的数据就是“3”的段代码数据。


第4句是将“3”的段代码数据送p0驱动数码管显示;第5句是打开LED9的公共阳极;第6句是跳转到当前行,也就是说程序一直在本行循环。


改变第二句 #号后面的数,将更改显示内容。但#号后的数不能大于15,因numtab表中不包括“0”只有15格可查的数据!


通过前面的学习,大家对数码管的显示原理已很清楚,下面这段程序请大家自行分析:


a_bit equ 20h ;个位数存放处
b_bit equ 21h ;十位数存放处
temp equ 22h ;计数器寄存器


star: mov temp,#0 ;初始化计数器
stlop: acall display
inc temp
mov a,temp
cjne a,#100,next ;=100重来
mov temp,#0
next: ljmp stlop


;显示子程序
display: mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b


mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;显示1000次
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p2.0 ;开个位显示
acall d1ms ;显示1ms
setb p2.0
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p2.1 ;开十位显示
acall d1ms ;显示1ms
setb p2.1
djnz r1,dplop ;100次没完循环
djnz r0,dpl1 ;4个100次没完循环
ret
;1MS延时(按12MHZ算)
;====================================================
D1MS: MOV R7,#80
DJNZ R7,$
RET


;7段数码管各划的数字排列表
numtab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
;0 1 2 3 4 5 6 7 8 9
db 88h,83h,0c6h,0a1h,86h,8eh
;a b c d e f
end


关于数码管的静态显示及动态显示原理,我们在后面会单独的实验讲解。这里只是给大家一个基础的认识。



单片机教程,五系列(55讲)电子书全集下载

论坛精选:
单片机教程,MCS51单片机从零开始 第一讲:初识单片机
http://bbs.huazhoucn.com/Topic.aspx?id=2539
单片机教程,MCS51单片机从零开始 第二讲:MCS-51单片机简述
http://bbs.huazhoucn.com/Topic.aspx?id=2540
单片机教程,MCS51单片机从零开始 第三讲:单片机相关常用名词解释
http://bbs.huazhoucn.com/Topic.aspx?id=2541
单片机教程,MCS51单片机从零开始 第四讲:计算机中数的表示及运算
http://bbs.huazhoucn.com/Topic.aspx?id=2542
单片机教程,MCS51单片机从零开始 第五讲:常用逻辑电路
http://bbs.huazhoucn.com/Topic.aspx?id=2544
单片机教程,MCS51单片机从零开始 第六讲:51单片机的结构及其组成
http://bbs.huazhoucn.com/Topic.aspx?id=2545
单片机教程,MCS51单片机从零开始 第七讲:51单片机的引脚
http://bbs.huazhoucn.com/Topic.aspx?id=2546
单片机教程,MCS51单片机从零开始 第八讲:8051单片机I/O引脚工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2547
单片机教程,MCS51单片机从零开始 第九讲:8051单片机的存储器结构
http://bbs.huazhoucn.com/Topic.aspx?id=2548
单片机教程,MCS51单片机从零开始 第十讲:编码及译码器工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2549
单片机教程,MCS51单片机从零开始 第十一讲:存储器的存储原理
http://bbs.huazhoucn.com/Topic.aspx?id=2550
单片机教程,MCS51单片机从零开始 第十二讲:51单片机的特殊功能寄存器
http://bbs.huazhoucn.com/Topic.aspx?id=2551
单片机教程,MCS51单片机从零开始 第十三讲:51单片机CPU的内部结构
http://bbs.huazhoucn.com/Topic.aspx?id=2552
单片机教程,MCS51单片机从零开始 第十四讲:定时器/计数器的基本结构及工作原理
http://bbs.huazhoucn.com/Topic.aspx?id=2553
单片机教程,MCS51单片机从零开始 第十五讲:51单片机的中断系统
http://bbs.huazhoucn.com/Topic.aspx?id=2554
单片机教程,MCS51单片机从零开始 第十六讲:51单片机的复位
http://bbs.huazhoucn.com/Topic.aspx?id=2555
单片机教程,MCS51单片机从零开始 第十七讲:51单片机执行指令的过程
http://bbs.huazhoucn.com/Topic.aspx?id=2556
单片机教程,MCS51单片机从零开始 第十八讲:51单片机的延时及时序分析
http://bbs.huazhoucn.com/Topic.aspx?id=2557
单片机教程,MCS51单片机从零开始 第十九讲:汇编语言基础
http://bbs.huazhoucn.com/Topic.aspx?id=2558
单片机教程,MCS51单片机从零开始 第二十讲:汇编语言及汇编过程
http://bbs.huazhoucn.com/Topic.aspx?id=2556
单片机教程,MCS51单片机从零开始 第二十一讲:汇编程序的基本结构
http://bbs.huazhoucn.com/Topic.aspx?id=2560
单片机教程,MCS51单片机从零开始 第二十二讲:51单片机的寻址方式
http://bbs.huazhoucn.com/Topic.aspx?id=2561
单片机教程,MCS51单片机从零开始 第二十三讲:数据传送类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2562
单片机教程,MCS51单片机从零开始 第二十四讲:算术运算类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2563
单片机教程,MCS51单片机从零开始 第二十五讲:逻辑运算及移位指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2564
单片机教程,MCS51单片机从零开始 第二十六讲:控制转移类指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2565
单片机教程,MCS51单片机从零开始 第二十七讲:布尔变量操作指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2566
单片机教程,MCS51单片机从零开始 第二十八讲:伪指令分析
http://bbs.huazhoucn.com/Topic.aspx?id=2567

1 楼  提交者:Guest 在 2008-7-17 12:51:05
sds
2 楼  提交者:Guest 在 2008-7-18 7:44:25
无内容
3 楼  提交者:Guest 在 2008-7-18 13:59:36
hao  
4 楼  提交者:Guest 在 2008-7-18 17:49:51
bucuo
5 楼  提交者:Guest 在 2008-7-19 11:08:10
怎么没有
6 楼  提交者:Guest 在 2008-7-19 12:28:14
rini 
7 楼  提交者:Guest 在 2008-7-19 14:19:32
无内容
8 楼  提交者:Guest 在 2008-7-19 15:31:00
00
9 楼  提交者:Guest 在 2008-7-19 17:46:48
sadddddddddddddddddddddddddddddddddf
10 楼  提交者:Guest 在 2008-7-20 9:35:00
无内容
11 楼  提交者:月华星光 在 2008-7-20 11:25:12
12 楼  提交者:Guest 在 2008-7-20 13:47:44
回帖了
13 楼  提交者:syh98 在 2008-7-22 0:00:34
14 楼  提交者:Guest 在 2008-7-22 16:26:00
a、】
15 楼  提交者:Guest 在 2008-7-27 9:04:03
huifu
16 楼  提交者:Guest 在 2008-7-27 13:53:04
ht
17 楼  提交者:Guest 在 2008-7-29 21:36:45
ok
18 楼  提交者:Guest 在 2008-7-30 16:40:05
19 楼  提交者:春春 在 2008-7-30 17:53:10
好样的
20 楼  提交者:Guest 在 2008-7-31 16:04:23
jj
21 楼  提交者:Guest 在 2008-8-1 16:30:04
5454541512
22 楼  提交者:Guest 在 2008-8-1 16:30:19
5454541512
23 楼  提交者:Guest 在 2008-8-2 17:31:10
能看看吗?
24 楼  提交者:Guest 在 2008-8-9 0:25:11
实验任务如图一所示:在P1.0端口上接八个发光二极管LED0-LED7,使LED1至LED2做流水显示实验。电路原理图                           图1相关常识说明:单片机在上电初始后,其各端口输出为高电平。如果我们现在想让接在P1.0口的LED1亮,那么我们只要把P1.0口的电平变为低电平就可以了。想让LED1灭,LED0亮,只需将P1.0升高,P1.1变低,LED1就熄灭LED2随后既点亮!依始类推如下所示8只LED变会一亮一暗的做流水灯了。 本实验原程序如下:;正反流水灯实验      ORG    0030H             ;程序由地址30开始      JMP    DDWDDW:  MOV    SP,#60H           ;设置堆栈指针到RAM地址60HLOOP:                          ;循环      CLR    C                 ;进位标志清除      MOV    A,11111111B       ;加载初值使LED全部熄灭      MOV    R4,#8             ;左移计数值 移8次LOOPL:      RLC    A                 ;累加器内含值左移一位      MOV    P1,A              ;由P1输出      MOV    R5,#50            ;延迟0.5S      CALL   DELAY      DJNZ   R4,LOOPL          ;继续左移      MOV    R4,#8             ;右移计数值,移8位LOOPR:      RRC    A                 ;累加器内含右移一位      MOV    P1,A              ;由P1输出      MOV    R5,#50            ;延迟0.5S      CALL   DELAY      DJNZ   R4,LOOPR          ;继续右移      JMP    LOOP              ;再执行循环一次DELAY:                         ;延时子程序      MOV    R6,#50S1:   MOV    R7,#100      DJNZ   R7,$      DJNZ   R6,S1      DJNZ   R5,DELAY      RET
25 楼  提交者:Guest 在 2008-8-21 22:24:37
谢谢
26 楼  提交者:Guest 在 2008-8-22 13:09:16
27 楼  提交者:Guest 在 2008-8-24 17:11:01
期待
28 楼  提交者:Guest 在 2008-8-26 12:32:21
na ya
29 楼  提交者:俊毅 在 2008-8-26 23:21:47
我来看年
30 楼  提交者:Guest 在 2008-9-1 16:16:01
uiu
上一篇 下一篇
当前第〖1〗页 共有6页 转到第 1 2 3 4 5 6