📄 test20.asm
字号:
//======================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//============================================================
// 工程名称:test20.spj
// 功能描述: 数码管动态显示0123.
// A0-A7输出控制数码管的段显示,B2-B5输出控制数码管的位显示,均为高电平有效
// 文件来源:《实验仪实验指导书》 "实验二十四 4位8段LED数码管显示" 第88页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.4
//
// 涉及的库:
// 组成文件:
// test20.asm
//============================================================
//============================================================
// 文件名称:test20.asm
// 实现功能: 数码管动态显示0123.
// A0-A7输出控制数码管的段显示,B2-B5输出控制数码管的位显示,均为高电平有效
//============================================================
.define P_IOA_Data 0x7000
.define P_IOA_Dir 0x7002
.define P_IOA_Attr 0x7003
.define P_IOB_Data 0x7005
.define P_IOB_Dir 0x7007
.define P_IOB_Attr 0x7008
.define P_Watchdog_Clear 0x7012
.ram
DisplayBuff: .DW 4 DUP(0) //定义一个4存储单元的显示缓冲区,存入显示内容
.data
//显示段码存放区
DispTbl: .DW 0x003F,0x0006,0x005B,0x004F,0x0066 //0,1,2,3,4
.DW 0x006D,0x007D,0x0007,0x007F,0x006F //5,6,7,8,9
.DW 0x00FF //全亮
.code
.public _main;
//=============================================================
// 函数名称: _main
// 功能描述: 数码管动态显示0123.
// 语法格式: 无
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=============================================================
_main:
r1=0x00FF; //初始化IOA0~IOA7为低电平输出口
[P_IOA_Dir]= r1;
[P_IOA_Attr]= r1;
r1=0x0000;
[P_IOA_Data]= r1;
r1=0x003C; //初始化IOB2~IOB5为低电平输出口
[P_IOB_Dir]= r1;
[P_IOB_Attr]= r1;
r1=0x0000;
[P_IOB_Data]= r1;
BP=DisplayBuff; //设置显示缓冲区
r1=0x0001;
[BP++]= r1;
r1=0x0002;
[BP++]= r1;
r1=0x0003;
[BP++]= r1;
r1=0x0004
[BP++]= r1;
Loop1:
r3=0x0000; //初始化计数初值
r2=DisplayBuff; //r2指向显示缓冲区
r4=0x0004; //显示位码
Loop2:
r1=0x0001 //清看门狗
[P_Watchdog_Clear] = r1
r1=0x0000 //暂时关闭所有的数码管
[P_IOB_Data]= r1
BP=DispTbl; //BP指向段码表
r1=[r2++]; //从显示缓冲区内取显示内容(即偏移量)
BP+=r1; //段码表首地址加上偏移量
r1=[BP]; //从段码表中取出段码
[P_IOA_Data]= r1; //送出段码
[P_IOB_Data]= r4; //送出位码
r4= r4 LSL 1; //修改位码,以便下一位显示
r3+=0x0001; //计数器加1
CMP r3,0x0004 //4位数据显示完否
JB Loop2 //未显示完
JMP Loop1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -