📄 dac_tlc5615.lst
字号:
101 C017 RJMP 0x0119
(0107) case 0xdb:return 5; //按键5
102 E005 LDI R16,5
103 C015 RJMP 0x0119
(0108) case 0xbb:return 6; //按键6
104 E006 LDI R16,6
105 C013 RJMP 0x0119
(0109) case 0x7b:return 7; //按键7
106 E007 LDI R16,7
107 C011 RJMP 0x0119
(0110) case 0xed:return 8; //按键8
108 E008 LDI R16,0x8
109 C00F RJMP 0x0119
(0111) case 0xdd:return 9; //按键9
10A E009 LDI R16,0x9
10B C00D RJMP 0x0119
(0112) case 0xbd:return 10; //按键A
10C E00A LDI R16,0xA
10D C00B RJMP 0x0119
(0113) case 0x7d:return 11; //按键B
10E E00B LDI R16,0xB
10F C009 RJMP 0x0119
(0114) case 0xee:return 12; //按键C
110 E00C LDI R16,0xC
111 C007 RJMP 0x0119
(0115) case 0xde:return 13; //按键D
112 E00D LDI R16,0xD
113 C005 RJMP 0x0119
(0116) case 0xbe:return 14; //按键E
114 E00E LDI R16,0xE
115 C003 RJMP 0x0119
(0117) case 0x7e:return 15; //按键F
116 E00F LDI R16,0xF
117 C001 RJMP 0x0119
(0118) default: return 16; //无按键按下
118 E100 LDI R16,0x10
119 9159 LD R21,Y+
11A 9149 LD R20,Y+
11B 9508 RET
_Display_One_SMG:
data --> R12
bit --> R10
11C 940E 01A7 CALL push_xgset003C
11E 2EC2 MOV R12,R18
11F 2EA0 MOV R10,R16
(0119) }
(0120) }
(0121) /*******************************************************/
(0122) /****** 函数名称: Display_One_SMG() ******/
(0123) /****** 功 能: 显示指定内容在指定位 ******/
(0124) /****** 参 数: bit--位(1-8), ******/
(0125) /****** data--显示内容(0-15,16为全灭)****/
(0126) /****** 返回值 : 无 ******/
(0127) /*******************************************************/
(0128) void Display_One_SMG(unsigned char bit,unsigned char data)
(0129) {
(0130) SMG=SMG_Conver[data]; //送显示数据
120 E584 LDI R24,0x54
121 E090 LDI R25,0
122 2DEC MOV R30,R12
123 27FF CLR R31
124 0FE8 ADD R30,R24
125 1FF9 ADC R31,R25
126 9024 LPM R2,0(Z)
127 BA28 OUT 0x18,R2
(0131) Open_SMG_DATA; //锁存数据
128 9ADB SBI 0x1B,3
(0132) Close_SMG_DATA;
129 98DB CBI 0x1B,3
(0133) SMG=~BIT(bit); //送位数据
12A E001 LDI R16,1
12B 2D1A MOV R17,R10
12C 940E 01AC CALL lsl8
12E 2E20 MOV R2,R16
12F 9420 COM R2
130 BA28 OUT 0x18,R2
(0134) Open_SMG_BIT; //锁存数据
131 9ADA SBI 0x1B,2
(0135) Close_SMG_BIT;
132 98DA CBI 0x1B,2
(0136) delay_nms(2);
133 E002 LDI R16,2
134 E010 LDI R17,0
135 DF2C RCALL _delay_nms
136 940C 019C JMP pop_xgset003C
_Display_One_SMG_Point:
bit --> R10
138 92AA ST R10,-Y
139 92BA ST R11,-Y
13A 2EA0 MOV R10,R16
(0137) }
(0138) /*******************************************************/
(0139) /****** 函数名称: Display_One_SMG_Point() ******/
(0140) /****** 功 能: 显示小数点在指定位 ******/
(0141) /****** 返回值 : 无 ******/
(0142) /*******************************************************/
(0143) void Display_One_SMG_Point(unsigned char bit)
(0144) {
(0145) SMG=0x80; //送显示数据
13B E880 LDI R24,0x80
13C BB88 OUT 0x18,R24
(0146) Open_SMG_DATA; //锁存数据
13D 9ADB SBI 0x1B,3
(0147) Close_SMG_DATA;
13E 98DB CBI 0x1B,3
(0148) SMG=~BIT(bit); //送位数据
13F E001 LDI R16,1
140 2D1A MOV R17,R10
141 940E 01AC CALL lsl8
143 2E20 MOV R2,R16
144 9420 COM R2
145 BA28 OUT 0x18,R2
(0149) Open_SMG_BIT; //锁存数据
146 9ADA SBI 0x1B,2
(0150) Close_SMG_BIT;
147 98DA CBI 0x1B,2
(0151) delay_nms(2);
148 E002 LDI R16,2
149 E010 LDI R17,0
14A DF17 RCALL _delay_nms
14B 90B9 LD R11,Y+
14C 90A9 LD R10,Y+
14D 9508 RET
(0152) }
(0153) /*******************************************************/
(0154) /****** 函数名称: En_Led() ******/
(0155) /****** 功 能: 使能LED功能 ******/
(0156) /****** 参 数: 无 ******/
(0157) /****** 返回值 : 无 ******/
(0158) /*******************************************************/
(0159) void En_Led(void)
(0160) {
(0161) DDRB=0xff; //设置输出
_En_Led:
14E EF8F LDI R24,0xFF
14F BB87 OUT 0x17,R24
(0162) PORTB=0xff; //输出高电平
150 BB88 OUT 0x18,R24
(0163) Open_LED; //打开LED功能
151 9ADC SBI 0x1B,4
152 9508 RET
(0164) }
(0165) /*******************************************************/
(0166) /****** 函数名称: Un_Led() ******/
(0167) /****** 功 能: 关闭LED功能 ******/
(0168) /****** 参 数: 无 ******/
(0169) /****** 返回值 : 无 ******/
(0170) /*******************************************************/
(0171) void Un_Led(void)
(0172) {
(0173) DDRB=0xff; //设置输出
_Un_Led:
153 EF8F LDI R24,0xFF
154 BB87 OUT 0x17,R24
(0174) PORTB=0xff; //输出高电平
155 BB88 OUT 0x18,R24
(0175) Open_LED; //打开LED功能
156 9ADC SBI 0x1B,4
(0176) Close_LED; //关闭LED功能
157 98DC CBI 0x1B,4
158 9508 RET
(0177) }
(0178) /*******************************************************/
(0179) /****** 函数名称: Clear_SMG() ******/
(0180) /****** 功 能: 关闭数码管功能 ******/
(0181) /****** 参 数: 无 ******/
(0182) /****** 返回值 : 无 ******/
(0183) /*******************************************************/
(0184) void Clear_SMG(void)
(0185) {
(0186) DDRB=0xff; //设置输出
_Clear_SMG:
159 EF8F LDI R24,0xFF
15A BB87 OUT 0x17,R24
(0187) PORTB=0x00; //输出高电平
15B 2422 CLR R2
15C BA28 OUT 0x18,R2
(0188) Open_SMG_DATA; //锁存数据
15D 9ADB SBI 0x1B,3
(0189) Close_SMG_DATA;
15E 98DB CBI 0x1B,3
(0190) Open_SMG_BIT;
15F 9ADA SBI 0x1B,2
(0191) Close_SMG_BIT;
160 98DA CBI 0x1B,2
161 9508 RET
(0192) }
(0193) /*******************************************************/
(0194) /****** 函数名称: Spi_Init() ******/
(0195) /****** 功 能: 初始化SPI接口 ******/
(0196) /****** 参 数: 无 ******/
(0197) /****** 返回值 : 无 ******/
(0198) /*******************************************************/
(0199) void Spi_Init(void)
(0200) {
(0201) unsigned char i;
(0202) DDRB|=0xb0; //MISO输入MOSI,SCK,SS输出
_Spi_Init:
i --> R16
162 B387 IN R24,0x17
163 6B80 ORI R24,0xB0
164 BB87 OUT 0x17,R24
(0203) DDRB&=~0x40;
165 98BE CBI 0x17,6
(0204) PORTB|=0x40; //MISO上拉有效
166 9AC6 SBI 0x18,6
(0205) SPSR=0x01; //SPI允许,主机模式,高位在先,极性00,1/2系统时钟速率
167 E081 LDI R24,1
168 B98E OUT 0x0E,R24
(0206) SPCR=0x50;
169 E580 LDI R24,0x50
16A B98D OUT 0x0D,R24
(0207) i=SPSR;
16B B10E IN R16,0x0E
(0208) i=SPDR; //清空SPI,和中断标志,使SPI空闲
16C B10F IN R16,0x0F
16D 9508 RET
(0209) }
(0210) /*******************************************************/
(0211) /****** 函数名称: PutSPIchar() ******/
(0212) /****** 功 能: 用SPI发送数据 ******/
(0213) /****** 参 数: data--待发的数据 ******/
(0214) /****** 返回值 : 无 ******/
(0215) /*******************************************************/
(0216) void PutSPIchar(char data)
(0217) {
(0218) SPDR=data;
_PutSPIchar:
data --> R16
16E B90F OUT 0x0F,R16
(0219) while(!(SPSR&(1<<SPIF))); //等待发送完毕
16F 9B77 SBIS 0x0E,7
170 CFFE RJMP 0x016F
171 9508 RET
(0220) }
(0221) /*******************************************************/
(0222) /****** 函数名称: CPU_Init() ******/
(0223) /****** 功 能: 初始化CPU端口 ******/
(0224) /****** 参 数: 无 ******/
(0225) /****** 返回值 : 无 ******/
(0226) /*******************************************************/
(0227) void CPU_Init(void)
(0228) {
(0229) PORTB=0xff;
_CPU_Init:
172 EF8F LDI R24,0xFF
173 BB88 OUT 0x18,R24
(0230) DDRB=0xff;
174 BB87 OUT 0x17,R24
(0231) PORTA=0x80;
175 E880 LDI R24,0x80
176 BB8B OUT 0x1B,R24
(0232) DDRA=0xdc;
177 ED8C LDI R24,0xDC
178 BB8A OUT 0x1A,R24
(0233) DDRB=0x00;
179 2422 CLR R2
17A BA27 OUT 0x17,R2
(0234) PORTC=0xff;
17B EF8F LDI R24,0xFF
17C BB85 OUT 0x15,R24
(0235) DDRC=0x00;
17D BA24 OUT 0x14,R2
(0236) PORTD=0xff;
17E BB82 OUT 0x12,R24
(0237) DDRD=0x00;
17F BA21 OUT 0x11,R2
(0238) Un_Led();
180 DFD2 RCALL _Un_Led
(0239) Clear_SMG();
181 DFD7 RCALL _Clear_SMG
182 9508 RET
FILE: D:\垃圾站\5615\DAC_TLC5615.c
(0001) /////////////////////////////////////////////////////////////
(0002) // 文件:DAC_TLC5615.C //
(0003) // 环境:编译为ICC AVR6.31A,仿真为AVR Studio4.12sp4 //
(0004) // 硬件:ATMEGA16芯片 //
(0005) // 日期:2007年5月28日 //
(0006) // 功能:DA输出模拟电压控制LED亮度渐变 //
(0007) // 备注: //
(0008) /////////////////////////////////////////////////////////////
(0009) #include <iom16v.h> //包含单片机型号头文件
(0010) #include <macros.h> //包含"位"操作头文件
(0011) #include "delay.h" //包含延时头文件
(0012) #include "AVR_XQV12.h" //包含通用函数及宏定义头文件
(0013)
(0014) /*******************************************************/
(0015) /****** 函数名称: main() ******/
(0016) /****** 功 能: DA输出模拟电压控制LED亮度渐变 ******/
(0017) /****** 参 数: 无 ******/
(0018) /****** 返回值 : 无 ******/
(0019) /*******************************************************/
(0020) void main(void)
(0021) {
(0022) unsigned int i;
(0023) CPU_Init(); //初始化单片机
_main:
i --> R20
183 DFEE RCALL _CPU_Init
(0024) Spi_Init(); //初始化SPI接口
184 DFDD RCALL _Spi_Init
185 C014 RJMP 0x019A
(0025) while(1) //无限循环
(0026) {
(0027)
(0028) i=256;
(0029) Clr_CS5615; //片选TLC5615 ((i&0x03c0)>>6)
186 98DC CBI 0x1B,4
(0030) PutSPIchar((unsigned char) 0x00);//发送数据)((i&0x003f)<<2)
187 2700 CLR R16
188 DFE5 RCALL _PutSPIchar
(0031) PutSPIchar((unsigned char) 0x00);
189 2700 CLR R16
18A DFE3 RCALL _PutSPIchar
(0032) Set_CS5615; //释放TLC5615
18B 9ADC SBI 0x1B,4
(0033) delay_nms(5); //延时
18C E005 LDI R16,5
18D E010 LDI R17,0
18E DED3 RCALL _delay_nms
(0034)
(0035)
(0036) i=1023;
18F EF4F LDI R20,0xFF
190 E053 LDI R21,3
(0037) Clr_CS5615; //片选TLC5615
191 98DC CBI 0x1B,4
(0038) PutSPIchar((unsigned char) 0xff);//发送数据((i&0x03c0)>>6)
192 EF0F LDI R16,0xFF
193 DFDA RCALL _PutSPIchar
(0039) PutSPIchar((unsigned char) 0xff);
194 EF0F LDI R16,0xFF
195 DFD8 RCALL _PutSPIchar
(0040) Set_CS5615; //释放TLC5615)((i&0x003f)<<2)
196 9ADC SBI 0x1B,4
(0041) delay_nms(5); //延时
FILE: <library>
197 E005 LDI R16,5
198 E010 LDI R17,0
199 DEC8 RCALL _delay_nms
19A CFEB RJMP 0x0186
19B 9508 RET
pop_xgset003C:
19C 90A9 LD R10,Y+
19D 90B9 LD R11,Y+
19E 90C9 LD R12,Y+
19F 90D9 LD R13,Y+
1A0 9508 RET
push_xgsetF0FC:
1A1 937A ST R23,-Y
1A2 936A ST R22,-Y
push_xgset30FC:
1A3 935A ST R21,-Y
1A4 934A ST R20,-Y
push_xgset00FC:
1A5 92FA ST R15,-Y
1A6 92EA ST R14,-Y
push_xgset003C:
1A7 92DA ST R13,-Y
1A8 92CA ST R12,-Y
1A9 92BA ST R11,-Y
1AA 92AA ST R10,-Y
1AB 9508 RET
lsl8:
1AC 2311 TST R17
1AD F019 BEQ 0x01B1
1AE 0F00 LSL R16
1AF 951A DEC R17
1B0 CFFB RJMP lsl8
1B1 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -