⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac_tlc5615.lst

📁 基于ATMEGA16的DA转换的C程序源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
     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 + -