📄 keydis_drv.lis
字号:
.module KeyDis_Drv.c
.area lit(rom, con, rel)
0000 _DisTab::
0000 FC60 .byte 252,96
0002 DAF2 .byte 218,242
0004 66B6 .byte 'f,182
0006 BEE0 .byte 190,224
0008 FEF6 .byte 254,246
000A EE3E .byte 238,62
000C 9C7A .byte 156,'z
000E 9E8E .byte 158,142
0010 CE1C .byte 206,28
0012 6E7C .byte 'n,124
0014 0A10 .byte 10,16
0016 02 .byte 2
0017 .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
0017 .dbsym e DisTab _DisTab A[23:23]kc
.area text(rom, con, rel)
0000 .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
0000 .dbfunc e SPI_INIT _SPI_INIT fV
.even
0000 _SPI_INIT::
0000 .dbline -1
0000 .dbline 107
0000 ; /***********************************************************
0000 ; * 函数库说明:键盘显示模块驱动函数库 *
0000 ; * 版本: *
0000 ; * 作者: *
0000 ; * 创建日期: *
0000 ; * -------------------------------------------------------- *
0000 ; * [硬件说明] *
0000 ; * 处理器: *
0000 ; * 系统时钟: *
0000 ; * -------------------------------------------------------- *
0000 ; * [支 持 库] *
0000 ; * 支持库名称:KeyDis_Drv.h *
0000 ; * 需要版本: ----- *
0000 ; * 支持库说明:键盘显示模块驱动声明库 *
0000 ; * *
0000 ; * 支持库名称: *
0000 ; * 需要版本: ----- *
0000 ; * 支持库说明: *
0000 ; * -------------------------------------------------------- *
0000 ; * [版本更新] *
0000 ; * 修改: *
0000 ; * 修改日期: *
0000 ; * 版本: *
0000 ; * -------------------------------------------------------- *
0000 ; * [版本历史] *
0000 ; * -------------------------------------------------------- *
0000 ; * [使用说明] *
0000 ; ***********************************************************/
0000 ;
0000 ; /********************
0000 ; * 头 文 件 配 置 区 *
0000 ; ********************/
0000 ; #include <iom48v.h> //在这里填写你所用处理器的专用头文件 //
0000 ; #include "EX_Support.h"
0000 ; #include "KeyDis_Drv.h"
0000 ;
0000 ; /********************
0000 ; * 系 统 宏 定 义 *
0000 ; ********************/
0000 ;
0000 ; /*------------------*
0000 ; * 常 数 宏 定 义 *
0000 ; *------------------*/
0000 ;
0000 ; #define ExtPortNum 3
0000 ;
0000 ; #define Key_Press 0x00
0000 ; #define Key_Bounce 0x01
0000 ; #define Key_Release 0x02
0000 ;
0000 ; #define PINE PortBuffer[0]
0000 ; #define PORTF PortBuffer[1]
0000 ; #define PORTG PortBuffer[2]
0000 ;
0000 ; #define KeyPin PINE
0000 ; #define ScanPort PORTG
0000 ; #define SegPort PORTF
0000 ;
0000 ; /*------------------*
0000 ; * 动 作 宏 定 义 *
0000 ; *------------------*/
0000 ;
0000 ; #define SS_Low PORTB &= ~(1<<2)
0000 ; #define SS_High PORTB |= (1<<2)
0000 ;
0000 ; /********************
0000 ; * 模块结构体定义区 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 函 数 声 明 区 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 模块函数声明区 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 模块变量声明区 *
0000 ; ********************/
0000 ;
0000 ; /********************
0000 ; * 全局变量声明区 *
0000 ; ********************/
0000 ;
0000 ; unsigned char PortBuffer[3];
0000 ; unsigned char LEDDisBuffer[8];
0000 ; unsigned char KeyBuffer;
0000 ;
0000 ; const unsigned char DisTab[]=
0000 ; {
0000 ; 0xFC,0x60,0xDA,0xF2,0x66, //0,1,2,3,4
0000 ; 0xB6,0xBE,0xE0,0xFE,0xF6, //5,6,7,8,9
0000 ; 0xEE,0x3E,0x9C,0x7A,0x9E, //A,b,C,d,E
0000 ; 0x8E,0xCE,0x1C,0x6E,0x7C, //F,P,L,H,U
0000 ; 0x0A,0x10,0x02 //r,_,-
0000 ; };
0000 ;
0000 ; /***********************************************************
0000 ; * 函数声明:SPI初始化程序 *
0000 ; * 输入: 无 *
0000 ; * 输出: 无 *
0000 ; * 调用函数:无 *
0000 ; ***********************************************************/
0000 ;
0000 ; void SPI_INIT (void)
0000 ; {
0000 .dbline 108
0000 ; SPCR = 0x7D; //禁止SPI中断,使能SPI模块,LSB先传送,选择主机模式,空闲时时钟为高,时钟结束沿采样,时钟频率64分频
0000 8DE7 ldi R24,125
0002 8CBD out 0x2c,R24
0004 .dbline 109
0004 ; SPSR = 0x00; //不使用SPI倍速
0004 2224 clr R2
0006 2DBC out 0x2d,R2
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
.area data(ram, con, rel)
0000 .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
0000 L3:
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
.area text(rom, con, rel)
000A .dbfile D:\设计项目\深入浅出AVR\光盘文件\实例程序源代码\实例15_键盘显示模块\实例15_键盘显示模块-拨号装置\KeyDis_Drv.c
000A .dbfunc e LEDDisplay _LEDDisplay fV
000A .dbsym s ScanStatu L3 c
000A ; LocalTime -> R20
.even
000A _LEDDisplay::
000A 00D0 rcall push_gset1
000C .dbline -1
000C .dbline 119
000C ; }
000C ;
000C ; /***********************************************************
000C ; * 函数说明:端口通讯程序 *
000C ; * 输入: 无 *
000C ; * 输出: 无 *
000C ; * 调用函数: *
000C ; ***********************************************************/
000C ; void LEDDisplay (void)
000C ; {
000C .dbline 123
000C ; static unsigned char ScanStatu = 0; //扫描状态标志,扫描程序内部使用
000C ; unsigned char LocalTime; //函数内部使用的时标
000C ;
000C ; LocalTime = g_wSystemTimer%20;
000C 24E1 ldi R18,20
000E 30E0 ldi R19,0
0010 00910000 lds R16,_g_wSystemTimer
0014 10910100 lds R17,_g_wSystemTimer+1
0018 00D0 rcall mod16u
001A 402F mov R20,R16
001C .dbline 125
001C ;
001C ; if (LocalTime > 16)
001C 80E1 ldi R24,16
001E 8017 cp R24,R16
0020 20F4 brsh L4
0022 .dbline 126
0022 ; {
0022 .dbline 127
0022 ; ScanPort = 0xFF;
0022 8FEF ldi R24,255
0024 80930C00 sts _PortBuffer+2,R24
0028 .dbline 128
0028 ; return;
0028 17C0 rjmp L2
002A L4:
002A .dbline 132
002A ; }
002A ;
002A ; else
002A ; {
002A .dbline 133
002A ; LocalTime >>= 1;
002A 4695 lsr R20
002C .dbline 134
002C ; ScanPort = (~(1<<LocalTime));
002C 01E0 ldi R16,1
002E 142F mov R17,R20
0030 00D0 rcall lsl8
0032 202E mov R2,R16
0034 2094 com R2
0036 20920C00 sts _PortBuffer+2,R2
003A .dbline 135
003A ; SegPort = (DisTab[LEDDisBuffer[LocalTime]]);
003A 80E0 ldi R24,<_LEDDisBuffer
003C 90E0 ldi R25,>_LEDDisBuffer
003E E42F mov R30,R20
0040 FF27 clr R31
0042 E80F add R30,R24
0044 F91F adc R31,R25
0046 E081 ldd R30,z+0
0048 FF27 clr R31
004A 80E0 ldi R24,<_DisTab
004C 90E0 ldi R25,>_DisTab
004E E80F add R30,R24
0050 F91F adc R31,R25
0052 E491 lpm R30,Z
0054 E0930B00 sts _PortBuffer+1,R30
0058 .dbline 136
0058 ; }
0058 .dbline -2
0058 L2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -