完整word版项目六 数码管显示原理分解word文档良心出品.docx
- 文档编号:3957073
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:15
- 大小:84.59KB
完整word版项目六 数码管显示原理分解word文档良心出品.docx
《完整word版项目六 数码管显示原理分解word文档良心出品.docx》由会员分享,可在线阅读,更多相关《完整word版项目六 数码管显示原理分解word文档良心出品.docx(15页珍藏版)》请在冰豆网上搜索。
完整word版项目六数码管显示原理分解word文档良心出品
项目六数码管显示原理
学习目的:
1.介绍STC89C51的数码管显示的原理;
2.掌握单个数码管静态显示的原理;
3.熟悉四位一体数码管动态显示的原理;
4.掌握单片机数码管显示的C51程序编程。
常用的LED显示器有LED状态显示器(俗称发光二极管)、LED七段显示器(俗称数码管)和LED十六段显示器。
发光二极管可显示两种状态,用于系统状态显示;数码管用于数字显示;LED十六段显示器用于字符显示。
一、数码管简介
1.数码管的结构
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字09、字符AF、H、L、P、R、U、Y、符号“”及小数点“”。
数码管的外形结构如下图所示。
数码管又分为共阴极和共阳极两种结构。
常用的LED显示器为8段(或7段,8段比7段多了一个小数点“dp”段)。
有共阳极和共阴极两种
其结构如下图所示:
图6-1数码管结构图
2.数码管工作原理
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。
通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。
根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。
通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
3.数码管字形编码
要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。
字型码各位定义为:
数据线D0与a字段对应,D1与b字段对应……,依此类推。
如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。
如要显示“0”,共阳极数码管的字型编码应为:
11000000B(即C0H);共阴极数码管的字型编码应为:
00111111B(即3FH)。
依此类推。
下图为LED显示器的结构原理图。
N个LED显示块有N位位选线和8×N根段码线。
段码线控制显示的字型,位选线控制该显示位的亮或暗。
静态显示和动态显示两种显示方式。
图6-2LED显示器的结构原理图
二、静态显示接口
静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。
这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接正电源(共阳极)。
每个数码管的8个字段分别与一个8位I/O口地址相连,I/O口只要有段码输出,相应字符即显示出来,并保持不变,直到I/O口输出新的段码。
采用静态显示方式,较小的电流即可获得较高的亮度,且占用CPU时间少,编程简单,显示便于监测和控制,但其占用的口线多,硬件电路复杂,成本高,只适合于显示位数较少的场合。
图6-34位静态数码显示电路
上图中各位的公共端连接在一起(接地或+5V)。
每位的段码线(a~dp)分别与一个8位的锁存器输出相连。
显示字符一确定,相应锁存器的段码输出将维持不变,直到送入另一个段码为止。
显示的亮度高。
该电路各位可独立显示。
三、动态显示接口
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。
通常,各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的位选线(公共阴极或阳极)由另外的I/O口线控制。
动态方式显示时,各数码管分时轮流选通,要使其稳定显示,必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码。
依此规律循环,即可使各位数码管显示将要显示的字符。
虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人以同时显示的感觉。
图6-44位动态数码显示电路
上图所有位的段码线相应段并在一起,由一个8位I/O口控制,形成段码线的多路复用,各位的公共端分别由相应的I/O线控制,形成各位的分时选通。
图6-4为4位8段LED动态显示电路。
其中段码线占用一个8位I/O口,而位选线占用一个4位I/O口。
采用动态显示方式比较节省I/O口,硬件电路也较静态显示方式简单,但其亮度不如静态显示方式,而且在显示位数较多时,CPU要依次扫描,占用CPU较多的时间。
四、定时/计数器应用程序举例
1.在四位一体数码管个位上上显示数字1。
(1)硬件原理图
本教材配套开发板中,数码管的段选控制信号由连接器J15分别接到单片机P0.0~P0.7,位选控制信号由连接器J16分别接到单片机P2.0~P2.3。
四个三极管对位选信号进行驱动,位选控制信号为低电平时,相应的数码管被选中。
具体的原理图如图6-5所示。
图6-5四位一体数码管原理图
(2)程序流程图
具体程序流程图见图6-6所示。
(3)软件代码
#include
voidmain()
{
P2=0xfe;//选中个位
P0=0xf9;//1
while
(1);
}
2.在四位一体数码管各位依次显示0~F,间隔时间为1秒。
(1)硬件原理图
具体原理图参见图6-5。
(2)程序流程图
具体程序流程图见图6-7所示。
(3)软件代码
#include
#defineucharunsignedchar
#defineuintunsignedint
uchardatasmg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,
0xa1,0x86,0x8e};
voiddelay(uintt)//0.2ms*t供参考
{
uchartime;
do
{
time=100;
while(--time);
}
while(--t);
}
voidcycle()
{
uchari;
P2=0xfe;
while
(1)
{
for(i=0;i<16;i++)
{
P0=smg[i];
delay(5000);
}
}
}
voidmain()
{
cycle();
}
3.在四位一体数码管上动态显示8952。
(1)硬件原理图
具体原理图参见图6-5。
(2)程序流程图
具体程序流程图见图6-8所示。
(3)软件代码
#include
#defineucharunsignedchar
uchardatasmgd[]={0x80,0x90,0x92,0xa4};//8952
uchardatasmgw[]={0xf7,0xfb,0xfd,0xfe};//位
voiddelay(uchart)//0.2ms*t供参考
{
uchartime;
do
{
time=100;
while(--time);
}
while(--t);
}
voidshow()
{
uchari;
while
(1)
{
for(i=0;i<4;i++)
{
P0=0xff;//消影
P2=smgw[i];//位
P0=smgd[i];//段
delay(21);
}
}
}
voidmain()
{
show();
}
五、实训
1.实训目的
进一步了解掌握四位一体数码管显示的静态显示方式,掌握编程方法,能够熟练编写相关控制程序。
2.实训内容
(1)定时器报警器设计(定时器T1定时,数码管显示20秒倒计时,时间为0时触发蜂鸣器鸣叫)。
(2)四位一体数码管四个位同时显示0~F,时间间隔为1秒,利用定时器定时。
(3)四位显示(分+秒)的数字时钟。
3.实训步骤
1)用Keil51编写代码,调试、编译后生成.hex文件。
2)将开发板上连接器J3、J15、J16用跳线帽连接。
3)利用STC-ISP下载软件,将.hex文件下载到单片机ROM中。
4.软件代码
实训
(1)软件代码:
#include
#defineucharunsignedchar
sbitP21=P2^1;
sbitP20=P2^0;
sbitwave=P3^4;
#definethr{P0=0xff;P21=0;P20=1;}//宏定义函数
#definefou{P0=0xff;P21=1;P20=0;}
ucharx=20;
uchart=0;
uchardatasmg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voiddelay(uchart)//t*0.2ms参考
{
uchartime;
do
{
time=100;
while(--time);
}
while(--t);
}
voidinit()//初始化
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidshow()//显示
{
if(x/10)//高位灭零
{
thrP0=smg[x/10];
delay(21);
}
fouP0=smg[x%10];
delay(21);
}
voidfire()//报警程序
{
wave=0;
while
(1);//程序终止
}
voidcycle()
{
while
(1)
{
if(t/20)//1s
{
t=0;
x--;
if(x==0)
{
P0=0xc0;//显示0
fire();//20秒到了,调用报警程序
}
}
show();
}
}
voidmain()
{
init();
cycle();
}
voidzd()interrupt1
{
t++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
实训
(2)软件代码:
#include
#defineucharunsignedchar
ucharx=0;
uchardatasmg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
voidinit()
{
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
voidwx()//四位同时显示
{
P2=0xf0;
}
voidcycle()
{
uchari=0;
while
(1)
{
if(x/20)//定时达到1s
{
P0=smg[i];
x=0;
i++;
if(i==16)
i=0;
}
}
}
voidmain()
{
init();
wx();
cycle();
}
voidzd()interrupt3
{
x++;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
实训(3)软件代码:
#include
#defineucharunsignedchar
sbitP23=P2^3;
sbitP22=P2^2;
sbitP21=P2^1;
sbitP20=P2^0;
#defineone{P0=0xff;P23=0;P22=1;P21=1;P20=1;}//宏定义函数
#definetwo{P0=0xff;P23=1;P22=0;P21=1;P20=1;}
#definethr{P0=0xff;P23=1;P22=1;P21=0;P20=1;}
#definefou{P0=0xff;P23=1;P22=1;P21=1;P20=0;}
ucharm=0,s=0,x=0;//初值为零
uchardatasmg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voiddelay(uchart)//0.2ms*t参考
{
uchartime;
do
{
time=100;
while(--time);
}
while(--t);
}
voidinit()//初始化
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidshow()//显示
{
oneP0=smg[m/10];
delay(21);
twoP0=smg[m%10];
delay(21);
thrP0=smg[s/10];
delay(21);
fouP0=smg[s%10];
delay(21);
}
voiddeal()//查询处理
{
if(x/20)
{
x=0;
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
}
}
}
}
voidcycle()
{
while
(1)
{
deal();
show();
}
}
voidmain()
{
init();
cycle();
}
voidzd()interrupt1
{
x++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
思考与练习
1.数码管显示的原理及结构。
2.数码管显示的静态原理及编程。
3.数码管显示的动态原理及编程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整word版项目六 数码管显示原理分解word文档良心出品 完整 word 项目 数码管 显示 原理 分解 文档 良心 出品
![提示](https://static.bdocx.com/images/bang_tan.gif)