光学  

   你现在的位置:JUNTRY>>主 页>>              今天是:

   

拉幕式数码显示技术

 

1. 实验任务

  用 AT89S51 单片机的 P0.0/AD0 - P0.7/AD7 端口接数码管的 a - h 端, 8 位数码管的 S1 - S8 通过 74LS138 译码器的 Y0 - Y7 来控制选通每个数码管的位选端。 AT89S51 单片机的 P1.0 - P1.2 控制 74LS138 的 A , B , C 端子。在 8 位数码管上从右向左循环显示“ 12345678 ”。能够比较平滑地看到拉幕的效果。

2. 电路原理图

3. 系统板上硬件连线

 1. 把“单片机系统”区域中的 P0.0/AD0 - P0.7/AD7 用 8 芯排线连接到“动态数码显示”区域中的 a - h 端口上;

 2. 把“三八译码模块”区域中的 Y0 - Y7 用 8 芯排线连接到“动态数码显示”区域中的 S1 - S8 端口上;

 3. 把“单片机系统”区域中的 P1.0 - P1.2 端口用 3 根导线连接到“三八译码模块”区域中的 A 、 B 、 C “端口上;

4. 程序设计方法

 1. 动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示 8 位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在 1ms 到 4ms 之间,所以为了保证正确显示,我必须每隔 1ms ,就得刷新一个数码管。而这刷新时间我们采用单片机的定时 / 计数器 T0 来控制,每定时 1ms 对数码管刷新一次, T0 采用方式 2 。

 2. 在进行数码显示的时候,要对显示单元开辟 8 个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。

5. 程序框图

主程序框图

中断服务程序

6. 汇编源程序

DISPBUF EQU 30H

DISPCNT EQU 38H

DISPBIT EQU 39H

T1CNTA EQU 3AH

T1CNTB EQU 3BH

CNT EQU 3CH

ORG 00H

LJMP START

ORG 0BH

LJMP INT_T0

START: MOV DISPCNT,#8

MOV A,#10

MOV R1,#DISPBUF

LP: MOV @R1,A

INC R1

DJNZ DISPCNT,LP

MOV DISPBIT,#00H

MOV T1CNTA,#00H

MOV T1CNTB,#00H

MOV CNT,#00H

MOV TMOD,#01H

MOV TH0,#(65536-1000) / 256

MOV TL0,#(65536-1000) MOD 256

SETB TR0

SETB ET0

SETB EA

SJMP $

INT_T0:

MOV TH0,#(65536-1000) / 256

MOV TL0,#(65536-1000) MOD 256

MOV A,DISPBIT

ADD A,#DISPBUF

MOV R0,A

MOV A,@R0

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,P1

ANL A,#0F8H

ADD A,DISPBIT

MOV P1,A

INC DISPBIT

MOV A,DISPBIT

CJNE A,#08H,NEXT

MOV DISPBIT,#00H

NEXT: INC T1CNTA

MOV A,T1CNTA

CJNE A,#50,LL1

MOV T1CNTA,#00H

INC T1CNTB

MOV A,T1CNTB

CJNE A,#8,LL1

MOV T1CNTB,#00H

INC CNT

MOV A,CNT

CJNE A,#9,LLX

MOV CNT,#00H

MOV A,CNT

LLX: CJNE A,#01H,NEX1

MOV 30H,#8

LL1: LJMP DONE

NEX1: CJNE A,#02H,NEX2

MOV 31H,#8

MOV 30H,#8

LJMP DONE

NEX2: CJNE A,#03H,NEX3

MOV 32H,#8

MOV 31H,#8

MOV 30H,#8

LJMP DONE

NEX3: CJNE A,#04H,NEX4

MOV 33H,#8

MOV 32H,#8

MOV 31H,#8

MOV 30H,#8

LJMP DONE

NEX4: CJNE A,#05H,NEX5

MOV 34H,#8

MOV 33H,#8

MOV 32H,#8

MOV 31H,#8

MOV 30H,#8

LJMP DONE

NEX5: CJNE A,#06H,NEX6

MOV 35H,#8

MOV 34H,#8

MOV 33H,#8

MOV 32H,#8

MOV 31H,#8

MOV 30H,#8

LJMP DONE

NEX6: CJNE A,#07H,NEX7

MOV 36H,#8

MOV 35H,#8

MOV 34H,#8

MOV 33H,#8

MOV 32H,#8

MOV 31H,#8

MOV 30H,#8

LJMP DONE

NEX7: CJNE A,#08H,NEX8

MOV 37H,#8

MOV 36H,#8

MOV 35H,#8

MOV 34H,#8

MOV 33H,#8

MOV 32H,#8

MOV 31H,#8

MOV 30H,#8

LJMP DONE

NEX8: CJNE A,#00H,DONE

MOV 37H,#10

MOV 36H,#10

MOV 35H,#10

MOV 34H,#10

MOV 33H,#10

MOV 32H,#10

MOV 31H,#10

MOV 30H,#10

LL: LJMP DONE

DONE: RETI

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H

END

7. C语言源程序

#include <AT89X51.H>

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb,

0xfc,0xfd,0xfe,0xff};

unsigned char dispbuf[8]={16,16,16,16,16,16,16,16};

unsigned char dispbitcnt;

unsigned int t02scnt;

unsigned char t5mscnt;

unsigned char u;

unsigned char i;

void main(void)

{

TMOD=0x02;

TH0=0x06;

TL0=0x06;

TR0=1;

ET0=1;

EA=1;

while(1);

}

void t0(void) interrupt 1 using 0

{

t5mscnt++;

if(t5mscnt==4)

{

t5mscnt=0;

P0=dispcode[dispbuf[dispbitcnt]];

P1=dispbitcode[dispbitcnt];

dispbitcnt++;

if(dispbitcnt==8)

{

dispbitcnt=0;

}

}

t02scnt++;

if(t02scnt==1600)

{

t02scnt=0;

u++;

if(u==9)

{

u=0;

}

for(i=0;i<8;i++)

{

dispbuf[i]=16;

}

for(i=0;i<u;i++)

{

dispbuf[i]=8;

}

}

}

 

  · AT89S51单片机试验以及教程 01 闪烁灯

 · AT89S51单片机试验以及教程 02 模拟开关灯

 · AT89S51单片机试验以及教程 03 多路开关状态指示

  · AT89S51单片机试验以及教程 04 广告灯的左移右移

 · AT89S51单片机试验以及教程 05 广告灯(利用取表方式)

  · AT89S51单片机试验以及教程 06 报警产生器

 · AT89S51单片机试验以及教程 07 I/O并行口直接驱动LED显示

 · AT89S51单片机试验以及教程 08 按键识别方法之一

 · AT89S51单片机试验以及教程 09 一键多功能按键识别技术

 · AT89S51单片机试验以及教程 10 00-99计数器

 · AT89S51单片机试验以及教程 11 00-59秒计时器(利用软件延时)

 · AT89S51单片机试验以及教程 12 可预置可逆4位计数器

 · AT89S51单片机试验以及教程 13 动态数码显示技术

  · AT89S51单片机试验以及教程 14 4×4矩阵式键盘识别技术

  · AT89S51单片机试验以及教程 15 定时计数器T0作定时应用技术(一)

  · AT89S51单片机试验以及教程 16 定时计数器T0作定时应用技术(二)

 · AT89S51单片机试验以及教程 17 99秒马表设计

  · AT89S51单片机试验以及教程 18 “嘀、嘀、……”报警声

 · AT89S51单片机试验以及教程 19 “叮咚”门铃

 · AT89S51单片机试验以及教程 20 数字钟

 · AT89S51单片机试验以及教程 21 拉幕式数码显示技术

 · AT89S51单片机试验以及教程 22 电子琴

 · AT89S51单片机试验以及教程 23 模拟计算器数字输入及显示

  · AT89S51单片机试验以及教程 24 8X8 LED点阵显示技术

 · AT89S51单片机试验以及教程 25 点阵式LED“0-9”数字显示技术

 · AT89S51单片机试验以及教程 26 点阵式LED简单图形显示技术

 · AT89S51单片机试验以及教程 27 ADC0809A/D 转换器基本应用技术

 · AT89S51单片机试验以及教程 28 数字电压表

 · AT89S51单片机试验以及教程 29 两点间温度控制

 · AT89S51单片机试验以及教程 30 四位数数字温度计

 · AT89S51单片机试验以及教程 31 6位数显频率计数器

 · AT89S51单片机试验以及教程 32 电子密码锁设计

 · AT89S51单片机试验以及教程 33 4×4键盘及8位数码管显示构成的电子密码锁

 · AT89S51单片机试验以及教程 34 有存储器功能的数字温度计-DS1624技术应用

 · AT89S51单片机试验以及教程 35 DS18B20数字温度计使用

 

 

 

 

 

以上部分内容转载于网上,如有涉及到版权问题,请即通知本人删除

copyright© 2004-2005 all rights reserved www.JUNTRY(.IK8).com

juntry@126.com