📄 system.s
字号:
.module System.c
.area lit(rom, con, rel)
_DisTab::
.byte 252,96
.byte 218,242
.byte 'f,182
.byte 190,224
.byte 254,246
.byte 238,62
.byte 156,'z
.byte 158,142
.byte 206,28
.byte 'n,124
.byte 10,16
.byte 2
.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
.dbsym e DisTab _DisTab A[23:23]kc
.area data(ram, con, rel)
.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
L2:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
.area text(rom, con, rel)
.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
.dbfunc e LEDDisplay _LEDDisplay fV
.dbsym s ScanStatu L2 c
; LocalTime -> R20
.even
_LEDDisplay::
rcall push_gset1
.dbline -1
.dbline 92
; /*********************************************************/
; /* */
; /* 实例15 键盘显示模块 */
; /* */
; /* 显示驱动测试程序 */
; /* */
; /* 程序设计 江海波 */
; /* */
; /* 编写时间 : 2007-06 版本 : V1.0 */
; /* */
; /* 提示 : 代码受版权保护,示例程序用于工程应谨慎 */
; /* */
; /* E-mail : soundman@sohu.com */
; /*-------------------------------------------------------*/
; /* 硬件环境: */
; /* */
; /* 实验电路板,ATmega48单片机,CPU时钟1MHz */
; /* ------------------------------------------------------*/
; /* 软件环境: */
; /* */
; /* ICCAVR 6.31A */
; /* ------------------------------------------------------*/
; /* 最后修改时间: */
; /* */
; /*-------------------------------------------------------*/
; /* 历史版本纪录: */
; /* */
; /*********************************************************/
;
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "PF_Config.h"
;
; /********************
; * 系 统 宏 定 义 *
; ********************/
;
; /*------------------*
; * 常 数 宏 定 义 *
; *------------------*/
;
; #define ExtPortNum 3
;
; #define Key_Press 0x00
; #define Key_Bounce 0x01
; #define Key_Release 0x02
;
; #define PINE PortBuffer[0]
; #define PORTF PortBuffer[1]
; #define PORTG PortBuffer[2]
;
; #define KeyPin PINE
; #define ScanPort PORTG
; #define SegPort PORTF
;
; unsigned char PortBuffer[3];
; unsigned char LEDDisBuffer[8];
;
; /*------------------*
; * 动 作 宏 定 义 *
; *------------------*/
;
; /********************
; * 模块结构体定义区 *
; ********************/
;
; /********************
; * 模块函数声明区 *
; ********************/
;
; /********************
; * 模块变量声明区 *
; ********************/
;
; const unsigned char DisTab[]=
; {
; 0xFC,0x60,0xDA,0xF2,0x66, //0,1,2,3,4
; 0xB6,0xBE,0xE0,0xFE,0xF6, //5,6,7,8,9
; 0xEE,0x3E,0x9C,0x7A,0x9E, //A,b,C,d,E
; 0x8E,0xCE,0x1C,0x6E,0x7C, //F,P,L,H,U
; 0x0A,0x10,0x02 //r,_,-
; };
;
; /***********************************************************
; * 函数说明:端口通讯程序 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数: *
; ***********************************************************/
; void LEDDisplay (void)
; {
.dbline 96
; static unsigned char ScanStatu = 0; //扫描状态标志,扫描程序内部使用
; unsigned char LocalTime; //函数内部使用的时标
;
; LocalTime = g_wSystemTimer%20;
ldi R18,20
ldi R19,0
lds R16,_g_wSystemTimer
lds R17,_g_wSystemTimer+1
rcall mod16u
mov R20,R16
.dbline 98
;
; if (LocalTime > 16)
ldi R24,16
cp R24,R16
brsh L3
.dbline 99
; return;
rjmp L1
L3:
.dbline 101
; else
; {
.dbline 102
; LocalTime >>= 1;
lsr R20
.dbline 103
; ScanPort = (~(1<<LocalTime));
ldi R16,1
mov R17,R20
rcall lsl8
mov R2,R16
com R2
sts _PortBuffer+2,R2
.dbline 104
; SegPort = (DisTab[LEDDisBuffer[LocalTime]]);
ldi R24,<_LEDDisBuffer
ldi R25,>_LEDDisBuffer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R30,z+0
clr R31
ldi R24,<_DisTab
ldi R25,>_DisTab
add R30,R24
adc R31,R25
lpm R30,Z
sts _PortBuffer+1,R30
.dbline 105
; }
.dbline -2
L1:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r LocalTime 20 c
.dbend
.dbfunc e Port_refresh _Port_refresh fV
; i -> R16
.even
_Port_refresh::
.dbline -1
.dbline 115
; }
;
; /***********************************************************
; * 函数说明:端口通讯程序 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数: *
; ***********************************************************/
; void Port_refresh (void)
; {
.dbline 118
; unsigned char i;
;
; SS_Low; //模拟#SS的下跳沿
cbi 0x5,2
.dbline 120
;
; for (i=0; i<ExtPortNum; i++)
clr R16
rjmp L11
L8:
.dbline 121
; {
.dbline 122
; SPDR = PortBuffer[i]; //刷新虚拟端口的一个字节
ldi R24,<_PortBuffer
ldi R25,>_PortBuffer
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0x2e,R2
L12:
.dbline 123
L13:
.dbline 123
in R2,0x2d
sbrs R2,7
rjmp L12
.dbline 124
L9:
.dbline 120
inc R16
L11:
.dbline 120
cpi R16,3
brlo L8
.dbline 126
; while(!(SPSR&(1<<SPIF))); //等待通讯完成
; }
;
; SS_High; //模拟#SS的上跳沿
sbi 0x5,2
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 136
; }
;
; /***********************************************************
; * 函数说明:主函数 *
; * 输入: 无 *
; * 输出: 无 *
; * 调用函数:System_INIT() *
; ***********************************************************/
; void main(void)
; {
.dbline 137
; System_INIT(); //代码初始化
rcall _System_INIT
.dbline 139
;
; LEDDisBuffer[0] = 0x00;
clr R2
sts _LEDDisBuffer,R2
.dbline 140
; LEDDisBuffer[1] = 0x01;
ldi R24,1
sts _LEDDisBuffer+1,R24
.dbline 141
; LEDDisBuffer[2] = 0x02;
ldi R24,2
sts _LEDDisBuffer+2,R24
.dbline 142
; LEDDisBuffer[3] = 0x03;
ldi R24,3
sts _LEDDisBuffer+3,R24
.dbline 143
; LEDDisBuffer[4] = 0x04;
ldi R24,4
sts _LEDDisBuffer+4,R24
.dbline 144
; LEDDisBuffer[5] = 0x05;
ldi R24,5
sts _LEDDisBuffer+5,R24
.dbline 145
; LEDDisBuffer[6] = 0x06;
ldi R24,6
sts _LEDDisBuffer+6,R24
.dbline 146
; LEDDisBuffer[7] = 0x07;
ldi R24,7
sts _LEDDisBuffer+7,R24
rjmp L24
L23:
.dbline 149
;
; while(TRUE) //超级循环
; {
.dbline 150
; if (DoTime==TRUE)
lds R24,_DoTime
cpi R24,1
brne L26
.dbline 151
; {
.dbline 152
; DoTime=FALSE;
clr R2
sts _DoTime,R2
.dbline 153
; LEDDisplay();
rcall _LEDDisplay
.dbline 154
; Port_refresh();
rcall _Port_refresh
.dbline 155
; }
L26:
.dbline 156
L24:
.dbline 148
rjmp L23
X0:
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-显示驱动测试\System.c
_LEDDisBuffer::
.blkb 8
.dbsym e LEDDisBuffer _LEDDisBuffer A[8:8]c
_PortBuffer::
.blkb 3
.dbsym e PortBuffer _PortBuffer A[3:3]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -