实验任务学会数码管的显示原理及编程。相关常识说明:用单片机进行数码显示应具有显示器件;应用最广泛的是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,#0next: 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关于数码管的静态显示及动态显示原理,我们在后面会单独的实验讲解。这里只是给大家一个基础的认识。