启蒙电子 - DG3000配套教程
DG3000配套教程-网页版
实验一:如何用单片机点亮一个发光二极管
实验二:实现发光二极管流水灯功能
实验三:如何用单片机控制蜂鸣器
实验四:光耦与控制试验
实验五:单片机控制继电器实验
实验六:串口通讯试验
实验七:一个LED数码管显示字符实验
实验八:8位动态LED数码管显示实验
实验九:6位静态LED数码管显示实验
实验十:1602字符液晶显示实验
实验十一:128*64图形液晶显示实验
实验十二:16*16点阵显示实验
实验十三:独立控制按键实验
实验十四:4*4矩形控制按键实验
实验十五:红外遥控解码实验
实验十六:EEPROM(AT24C02)读写实验
实验十七:时钟芯片(PCF8563)显示时间实验
实验十八:温度(单总线DS18B20)显示实验
实验十九:ADC(TLC549)模数转化实验(1-5V)
实验二十:LM358运放的应用(0-1V ADC转化实验)
实验二十一:温度湿度(温湿度模块)显示实验
实验二十二:DAC(DAC0832)数模转化实验
实验二十三:接触式IC卡(SLE4442)读写实验
实验二十四:PS2键控制驱动试验
实验二十五:直流电机驱动实验
实验二十六:步进电机驱动实验
实验二十七:微型打印机驱动实验
DG3000配套教程- 实验八:8位动态LED数码管显示实验

8.1 实物图与原理图
本实验仪配置带8位动态扫描显示模块一个。实物图如下:

为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO口,即采用3个IO来实现数据的传输。
原理图如下:


所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。
在本实验仪中链接管教分布如下:
STK-----P2.5
DAT-----P2.6
CLK-----P2.7
B0、B1、B2、B3、 B4、 B5、 B6、 B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7)

由于上一节已经讲述了CD4094驱动一位LED数码管的问题,这里我们讲如何来扫描8位数码管。

8.2 LED动态显示原理
根据原理图管脚连接,我们知道P0口控制了8个LED数码管的位选中,所以如果想让8个数码管都亮起来,我们可以逐位扫描8位数码管。
动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。
8.3 DG3000 动态显示头文件display_s.h
//----------------------------------------------------------
//程序作用:显示头文件display_s.h
//----------------------------------------------------------
#ifndef _display_
#define _display_
#include <intrins.h>

sbit SDA=P2^6; //定义显示管脚
sbit CLK=P2^7;
unsigned char data display_bit;
unsigned char code led[20]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};
//定义段码
//延时程序
void delay(unsigned int k)
{ unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<100;j++);
}
//数据传输
void send(unsigned char a)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(_crol_(a,i)&0x80)
SDA=1;
else
SDA=0;
CLK=0;
CLK=1;
}
}
//显示程序 8位LED数码管扫描
void display(unsigned char display_buffer[8])
{
unsigned char i,k;
display_bit=0xfe;
for(i=0;i<8;i++)
{
k=led[display_buffer[i]];
send(k);
P0=display_bit;
delay(0x01);
P0=0xff;
display_bit=_crol_(display_bit,1);
}
display_bit=0xfe;

8.4 8位数码管动态显示01234567(C51程序)
//----------------------------------------------------------
//程序作用:动态扫描显示01234567
//----------------------------------------------------------
#include<REG52.h>
#include<display_s.h> //调用显示头文件
main()
{
unsigned char a[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};//显示01234567
while(1)
{
display(a); //显示数据
}
}
8.5 8位数码管动态显示01234567(汇编)
;----------------------------------------------------------
;程序作用:8位数码管动态显示01234567(汇编)
;----------------------------------------------------------

;定义变量
DBUF DATA 40H ;显示缓冲区首址
SP_BT DATA 60H ;堆栈指针初值
; LED 位选
LED_CS1 BIT P0.0
LED_CS2 BIT P0.1
LED_CS3 BIT P0.2
LED_CS4 BIT P0.3
LED_CS5 BIT P0.4
LED_CS6 BIT P0.5
LED_CS7 BIT P0.6
LED_CS8 BIT P0.7
;4094接口
SDA_4094 BIT P2^6
CLK_4094 BIT P2^7
ORG 0000H
AJMP MAIN
;-------------------------------

ORG 0030H

MAIN: MOV SP,#60H
MOV R0,#0FFH;单元清零
RES1: MOV @R0,#0
DJNZ R0,RES1
MOV DBUF,#00H;显示数据
MOV DBUF+1,#01H
MOV DBUF+2,#02H
MOV DBUF+3,#03H
MOV DBUF+4,#04H
MOV DBUF+5,#05H
MOV DBUF+6,#06H
MOV DBUF+7,#07H
SAMP1:
LCALL DIR ;调用显示
SJMP SAMP1
;------------------------------------------------------
;显示数据
;-------------------------------------------------------
DIR:
;显示程序
MOV DPTR,#TABLE


MOV A,DBUF
MOVC A,@A+DPTR
ACALL DISP_da ;送段码输出
CLR LED_CS1 ;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS1 ;关闭显示

MOV A,DBUF+1
MOVC A,@A+DPTR
//ANL A,#7FH;加小数点
ACALL DISP_da ;送段码输出
CLR LED_CS2;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS2;关闭显示

MOV A,DBUF+2
MOVC A,@A+DPTR
ACALL DISP_da ;送段码输出
CLR LED_CS3 ;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS3 ;关闭显示

MOV A,DBUF+3
MOVC A,@A+DPTR
ACALL DISP_da ;送段码输出
CLR LED_CS4;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS4;关闭显示

MOV A,DBUF+4
MOVC A,@A+DPTR
ACALL DISP_da ;送段码输出
CLR LED_CS5 ;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS5 ;关闭显示

MOV A,DBUF+5
MOVC A,@A+DPTR
// ANL A,#7FH;加小数点
ACALL DISP_da ;送段码输出
CLR LED_CS6;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS6;关闭显示

MOV A,DBUF+6
MOVC A,@A+DPTR
ACALL DISP_da ;送段码输出
CLR LED_CS7 ;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS7 ;关闭显示

MOV A,DBUF+7
MOVC A,@A+DPTR
ACALL DISP_da ;送段码输出
CLR LED_CS8;选通第1位数码管
LCALL DELAY_4094
SETB LED_CS8;关闭显示

;-------------------------------------
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9
DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F
;-------------------------延时子程序---------------------------------
DELAY_4094: MOV R4,#2 ;延时程序3,精确延时1000微秒
D_4094:MOV R5,#248
DJNZ R5,$
DJNZ R4,D_4094
RET

DISP_DA:
MOV R3,#08H
DUP: RLC A
MOV SDA_4094,C
CLR CLK_4094
SETB CLK_4094
DJNZ R3,DUP
RET
END


友情链接 | 诚聘英才 | 关于我们 | 版权声明 | 联系我们 | 广告服务
Copyright©2007 启蒙电子 www.51c51.net 版权所有
技术支持QQ:501501561 销售咨询QQ:502502562
鲁ICP备05007129