21. 拉幕式数码显示技术

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. 电路原理图

图4.21.1

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. 程序框图

主程序框图

中断服务程序框图

图4.21.2

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;}}
}

单片机实例21——拉幕式数码显示技术(硬件电路图+汇编程序+C语言程序)相关推荐

  1. 单片机实例4——广告灯的左移右移(硬件电路图+汇编程序+C语言程序)

    4. 广告灯的左移右移 1. 实验任务 做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出"0"时,发光二极管亮 ...

  2. 单片机实例14——4×4矩阵式键盘识别技术(硬件电路图+汇编程序+C语言程序)

    14. 4×4矩阵式键盘识别技术 1. 实验任务 如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线:在数码管上显示每个按键 ...

  3. 单片机实例27——ADC0809A/D转换器基本应用技术(硬件电路图+汇编程序+C语言程序)

    27. ADC0809A/D转换器基本应用技术 1. 基本知识 ADC0809是带有8位A/D转换器.8路多路开关以及微处理机兼容的控制逻辑的CMOS组件.它是逐次逼近式A/D转换器,可以和单片机直接 ...

  4. 单片机实例20——数字钟(硬件电路图+汇编程序+C语言程序)

    20. 数字钟﹝★﹞ 1. 实验任务 (1. 开机时,显示12:00:00的时间开始计时: (2. P0.0/AD0控制"秒"的调整,每按一次加1秒: (3. P0.1/AD1控制 ...

  5. 单片机实例2——模拟开关灯(硬件电路图+汇编程序+C语言程序)

    2. 模拟开关灯 1. 实验任务 如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭. 2. 电 ...

  6. 单片机实例26——点阵式LED简单图形显示技术(硬件电路图+汇编程序+C语言程序)

    26. 点阵式LED简单图形显示技术 1. 实验任务 在8X8点阵式LED显示"★"."●"和心形图,通过按键来选择要显示的图形. 2. 电路原理图 图4.26 ...

  7. 单片机实例25——点阵式LED“0-9”数字显示技术(硬件电路图+汇编程序+C语言程序)

    25. 点阵式LED"0-9"数字显示技术 1. 实验任务 利用8X8点阵显示数字0到9的数字. 2. 电路原理图 图4.25.1 3. 硬件系统连线 (1). 把"单片 ...

  8. 单片机实例1——闪烁灯(硬件电路图+汇编程序+C语言程序)

    1. 闪烁灯 1. 实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒. 2. 电路原理图 图4.1.1 3. 系统板上硬件连线 ...

  9. 单片机实例3——多路开关状态指示(硬件电路图+汇编程序+C语言程序)

    3. 多路开关状态指示 1. 实验任务 如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极 ...

最新文章

  1. JUnit基础及第一个单元测试实例(JUnit3.8)
  2. [恢]hdu 2521
  3. MySQL-CentOS7通过YUM安装MySQL5.7.29
  4. iOS开发之如何跳到系统设置里的各种设置界面
  5. Image、Byte[]、Bitmap相互转换
  6. LeetCode题解之Copy List with Random Pointer
  7. MSP432P401R TI Drivers 库函数学习笔记(八)ADC
  8. 二叉树垂直遍历 java_【004】二叉树垂直遍历
  9. 关于.Net Application Server对象访问方式的设计(2.上)
  10. 【网络安全工程师面试合集】—Web安全攻防技术演化
  11. MMO移动游戏性能分析报告:渲染、UI、逻辑代码和内存
  12. excel 单元格内换行
  13. 大群就是公共场所,不要有事就在大群说
  14. Ubuntu安装ssh远程连接服务
  15. CAD/CAM技术的现状分析
  16. JDBC 操作数据库步骤
  17. Python快速实现视频播放器
  18. ubuntu18.04安装更新adobe flash player
  19. 用JAVA制作抓老鹰游戏_Java制作最难练手速游戏,Faker都坚持不了一分钟
  20. TensorFlow之设备(device)详解

热门文章

  1. 为什么写分页器的时候要用当前页数量乘当前页码-1呢?
  2. 工业机器人电柜布线_工业机器人电气控制系统PPT.ppt
  3. 格式保留加密(FPE)及其使用Demo
  4. binutils学习笔记
  5. 每次都戳到我的笑点,那个不同寻常的自黑达人,雷军
  6. 网络工程师--网络规划和设计案例分析(3)
  7. 信息系统项目管理系列之五:项目整体管理
  8. valueOf函数详解
  9. 100集华为HCIE安全培训视频教材整理 | 防火墙出口选路(一)
  10. 如何获取recovery模式的log