📄 dac_tlc5615.lst
字号:
__start:
__text_start:
33 E5CF LDI R28,0x5F
34 E0D4 LDI R29,4
35 BFCD OUT 0x3D,R28
36 BFDE OUT 0x3E,R29
37 51C0 SUBI R28,0x10
38 40D0 SBCI R29,0
39 EA0A LDI R16,0xAA
3A 8308 STD Y+0,R16
3B 2400 CLR R0
3C E6E0 LDI R30,0x60
3D E0F0 LDI R31,0
3E E010 LDI R17,0
3F 36E3 CPI R30,0x63
40 07F1 CPC R31,R17
41 F011 BEQ 0x0044
42 9201 ST R0,Z+
43 CFFB RJMP 0x003F
44 8300 STD Z+0,R16
45 E6E6 LDI R30,0x66
46 E0F0 LDI R31,0
47 E6A0 LDI R26,0x60
48 E0B0 LDI R27,0
49 E010 LDI R17,0
4A 36E6 CPI R30,0x66
4B 07F1 CPC R31,R17
4C F021 BEQ 0x0051
4D 95C8 LPM
4E 9631 ADIW R30,1
4F 920D ST R0,X+
50 CFF9 RJMP 0x004A
51 940E 0183 CALL _main
_exit:
53 CFFF RJMP _exit
FILE: D:\8_DAC_TLC5615\delay.h
(0001) //#define F_CPU 12000000
(0002) #define F_CPU 11059200
(0003) //#define F_CPU 8000000
(0004) //#define F_CPU 7372800
(0005) //#define F_CPU 4000000
(0006) /*************************************************************************
(0007) 通用延时头文件:
(0008) delay_nus(n)延时n微秒
(0009) delay_nms(n)延时n毫秒
(0010) *************************************************************************/
(0011) #if F_CPU == 12000000
(0012) void delay_nus(unsigned int time)
(0013) {
(0014) while (time!=0)
(0015) {
(0016) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
(0017) time--;
(0018) }
(0019) }
(0020) void delay_nms(unsigned int time)
(0021) {
(0022) unsigned int i;
(0023) while (time!=0)
(0024) {
(0025) for(i=0;i<1740;i++);
(0026) time--;
(0027) }
(0028) }
(0029) #endif
(0030)
(0031) #if F_CPU == 11059200
(0032) void delay_nus(unsigned int time)
(0033) {
_delay_nus:
time --> R16
54 C009 RJMP 0x005E
(0034) while (time!=0)
(0035) {
(0036) NOP();NOP();NOP();NOP();NOP();NOP();NOP();
55 0000 NOP
56 0000 NOP
57 0000 NOP
58 0000 NOP
59 0000 NOP
5A 0000 NOP
5B 0000 NOP
(0037) time--;
5C 5001 SUBI R16,1
5D 4010 SBCI R17,0
5E 3000 CPI R16,0
5F 0701 CPC R16,R17
60 F7A1 BNE 0x0055
61 9508 RET
_delay_nms:
i --> R20
time --> R16
62 934A ST R20,-Y
63 935A ST R21,-Y
(0038) }
(0039) }
(0040) void delay_nms(unsigned int time)
(0041) {
64 C00B RJMP 0x0070
(0042) unsigned int i;
(0043) while (time!=0)
(0044) {
(0045) for(i=0;i<1580;i++);
65 2744 CLR R20
66 2755 CLR R21
67 C002 RJMP 0x006A
68 5F4F SUBI R20,0xFF
69 4F5F SBCI R21,0xFF
6A 324C CPI R20,0x2C
6B E0E6 LDI R30,6
6C 075E CPC R21,R30
6D F3D0 BCS 0x0068
(0046) time--;
6E 5001 SUBI R16,1
6F 4010 SBCI R17,0
70 3000 CPI R16,0
71 0701 CPC R16,R17
72 F791 BNE 0x0065
73 9159 LD R21,Y+
74 9149 LD R20,Y+
75 9508 RET
_Scan_Key:
i --> R20
76 934A ST R20,-Y
77 935A ST R21,-Y
FILE: D:\8_DAC_TLC5615\AVR_XQV12.h
(0001)
(0002) #define TRUE 0xff //真
(0003) #define FALSE 0x00 //假
(0004) #define null 0x00 //空
(0005) #define Open_LED PORTA|=0x10 //使能LED
(0006) #define Close_LED PORTA&=~0x10 //关闭LED
(0007) #define LED PORTB //LED端口
(0008) #define SMG PORTB //数码管端口
(0009) #define Open_SMG_DATA PORTA|=0x08 //使能数码管数据
(0010) #define Close_SMG_DATA PORTA&=~0x08 //关闭数码管数据
(0011) #define Open_SMG_BIT PORTA|=0x04 //使能数码管位选择
(0012) #define Close_SMG_BIT PORTA&=~0x04 //关闭数码管位选择
(0013) #define KEY0 (PIND&0x04) //INT0
(0014) #define KEY1 (PIND&0x08) //INT1
(0015) #define SetSclk (PORTC|=0x80) //LCD12864 CLK
(0016) #define ClrSclk (PORTC&=~0x80)
(0017) #define SetRs (PORTD|=0x40) //LCD12864 CS
(0018) #define ClrRs (PORTD&=~0x40)
(0019) #define SetSid (PORTC|=0x40) //LCD12864 DATA
(0020) #define ClrSid (PORTC&=~0x40)
(0021) #define D0 0x20 //18B20 DATA
(0022) #define port PORTA
(0023) #define ddrt DDRA
(0024) #define pin PINA
(0025) #define Set_CS5615 (PORTA|=0x80) //片选5615
(0026) #define Clr_CS5615 (PORTA&=~0x80) //释放
(0027) #define Period 0x6bfe //PWM脉冲周期20ms
(0028) #define rd_device_add 0xa3 //定义器件读地址
(0029) #define wr_device_add 0xa2 //定义器件写地址
(0030) #define START 0x08 //起始信号
(0031) #define MT_SLA_ACK 0x18
(0032) #define MT_DATA_ACK 0x28
(0033) #define RE_START 0x10
(0034) #define MR_SLA_ACK 0x40
(0035) #define MR_DATA_NOACK 0x58
(0036) #define START 0x08
(0037) #define MT_SLA_ACK 0x18
(0038) #define MT_DATA_ACK 0x28
(0039) #define RE_START 0x10
(0040) #define MR_SLA_ACK 0x40
(0041) #define MR_DATA_NOACK 0x58
(0042) #define MR_DATA_ACK 0x50
(0043)
(0044) #if AD==TRUE //条件编译指令
(0045) unsigned char Adc_Mux=0;
(0046) unsigned int Adc0_Rel=0;
(0047) unsigned int Adc1_Rel=0;
(0048) unsigned int Adc0_Catch=0;
(0049) unsigned int Adc1_Catch=0;
(0050) unsigned int Adc0_Conver[20];
(0051) unsigned int Adc1_Conver[20];
(0052) unsigned char Adc0_F;
(0053) unsigned char Adc1_F;
(0054) #endif //条件编译结束
(0055) unsigned char Key_Number; //全局变量:按键标志
(0056) unsigned int temprter;
(0057) #pragma data:code
(0058) const unsigned char SMG_Conver[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
(0059) 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
(0060) //数码管译码数组
(0061) #pragma data:data
(0062) /*******************************************************/
(0063) /****** 函数名称: Scan_Key() ******/
(0064) /****** 功 能: 键盘扫描 ******/
(0065) /****** 参 数: 无 ******/
(0066) /****** 返回值 : 按键的键值,无按键时返回null ******/
(0067) /*******************************************************/
(0068) unsigned char Scan_Key(void)
(0069) {
(0070) unsigned char i;
(0071) PORTC=0x00;
78 2422 CLR R2
79 BA25 OUT 0x15,R2
(0072) DDRC =0xf0; //设置端口高4位输出,低四位输入
7A EF80 LDI R24,0xF0
7B BB84 OUT 0x14,R24
(0073) PORTC=0x0f; //低四位内部上拉
7C E08F LDI R24,0xF
7D BB85 OUT 0x15,R24
(0074) delay_nus(1); //短暂延时
7E E001 LDI R16,1
7F E010 LDI R17,0
80 DFD3 RCALL _delay_nus
(0075) i=PINC&0x0f; //读取端口电平
81 B343 IN R20,0x13
82 704F ANDI R20,0xF
(0076) if(i!=0x0f) //判断是否有键按下
83 304F CPI R20,0xF
84 F0B1 BEQ 0x009B
(0077) {
(0078) PORTC=0x00;
85 2422 CLR R2
86 BA25 OUT 0x15,R2
(0079) DDRC =0x0f; //设置端口低4位输出,高四位输入
87 E08F LDI R24,0xF
88 BB84 OUT 0x14,R24
(0080) PORTC=0xf0; //高四位内部上拉
89 EF80 LDI R24,0xF0
8A BB85 OUT 0x15,R24
(0081) delay_nus(10); //短暂延时,去抖
8B E00A LDI R16,0xA
8C E010 LDI R17,0
8D DFC6 RCALL _delay_nus
(0082) if((PINC&0xf0)!=0xf0) //再次判断是否有键按下
8E B383 IN R24,0x13
8F 7F80 ANDI R24,0xF0
90 3F80 CPI R24,0xF0
91 F049 BEQ 0x009B
(0083) {
(0084) i+=(PINC&0xf0); //读取端口电平
92 B383 IN R24,0x13
93 7F80 ANDI R24,0xF0
94 0F48 ADD R20,R24
(0085) while((PINC&0xf0)!=0xf0); //等待按键释放
95 B383 IN R24,0x13
96 7F80 ANDI R24,0xF0
97 3F80 CPI R24,0xF0
98 F7E1 BNE 0x0095
(0086) return i; //返回键值
99 2F04 MOV R16,R20
9A C001 RJMP 0x009C
(0087) }
(0088) }
(0089) return null; //无按键按下返回null
9B 2700 CLR R16
9C 9159 LD R21,Y+
9D 9149 LD R20,Y+
9E 9508 RET
_Key_Num:
key --> R16
9F 934A ST R20,-Y
A0 935A ST R21,-Y
(0090) }
(0091)
(0092) /*******************************************************/
(0093) /****** 函数名称: Key_Num() ******/
(0094) /****** 功 能: 转换键值为0-f十六进制数 ******/
(0095) /****** 参 数: key--键值 ******/
(0096) /****** 返回值 : 0-f ******/
(0097) /*******************************************************/
(0098) unsigned char Key_Num(unsigned char key)
(0099) {
(0100) switch(key)
A1 2F40 MOV R20,R16
A2 2755 CLR R21
A3 3B47 CPI R20,0xB7
A4 E0E0 LDI R30,0
A5 075E CPC R21,R30
A6 F409 BNE 0x00A8
A7 C054 RJMP 0x00FC
A8 3B4B CPI R20,0xBB
A9 E0E0 LDI R30,0
AA 075E CPC R21,R30
AB F409 BNE 0x00AD
AC C057 RJMP 0x0104
AD 3B4D CPI R20,0xBD
AE E0E0 LDI R30,0
AF 075E CPC R21,R30
B0 F409 BNE 0x00B2
B1 C05A RJMP 0x010C
B2 3B4E CPI R20,0xBE
B3 E0E0 LDI R30,0
B4 075E CPC R21,R30
B5 F409 BNE 0x00B7
B6 C05D RJMP 0x0114
B7 EB8E LDI R24,0xBE
B8 E090 LDI R25,0
B9 1784 CP R24,R20
BA 0795 CPC R25,R21
BB F0AC BLT 0x00D1
BC 3747 CPI R20,0x77
BD E0E0 LDI R30,0
BE 075E CPC R21,R30
BF F409 BNE 0x00C1
C0 C03D RJMP 0x00FE
C1 374B CPI R20,0x7B
C2 E0E0 LDI R30,0
C3 075E CPC R21,R30
C4 F409 BNE 0x00C6
C5 C040 RJMP 0x0106
C6 374D CPI R20,0x7D
C7 E0E0 LDI R30,0
C8 075E CPC R21,R30
C9 F409 BNE 0x00CB
CA C043 RJMP 0x010E
CB 374E CPI R20,0x7E
CC E0E0 LDI R30,0
CD 075E CPC R21,R30
CE F409 BNE 0x00D0
CF C046 RJMP 0x0116
D0 C047 RJMP 0x0118
D1 3D47 CPI R20,0xD7
D2 E0E0 LDI R30,0
D3 075E CPC R21,R30
D4 F129 BEQ 0x00FA
D5 3D4B CPI R20,0xDB
D6 E0E0 LDI R30,0
D7 075E CPC R21,R30
D8 F149 BEQ 0x0102
D9 3D4D CPI R20,0xDD
DA E0E0 LDI R30,0
DB 075E CPC R21,R30
DC F169 BEQ 0x010A
DD 3D4E CPI R20,0xDE
DE E0E0 LDI R30,0
DF 075E CPC R21,R30
E0 F409 BNE 0x00E2
E1 C030 RJMP 0x0112
E2 3D47 CPI R20,0xD7
E3 E0E0 LDI R30,0
E4 075E CPC R21,R30
E5 F40C BGE 0x00E7
E6 C031 RJMP 0x0118
E7 3E47 CPI R20,0xE7
E8 E0E0 LDI R30,0
E9 075E CPC R21,R30
EA F069 BEQ 0x00F8
EB 3E4B CPI R20,0xEB
EC E0E0 LDI R30,0
ED 075E CPC R21,R30
EE F089 BEQ 0x0100
EF 3E4D CPI R20,0xED
F0 E0E0 LDI R30,0
F1 075E CPC R21,R30
F2 F0A9 BEQ 0x0108
F3 3E4E CPI R20,0xEE
F4 E0E0 LDI R30,0
F5 075E CPC R21,R30
F6 F0C9 BEQ 0x0110
F7 C020 RJMP 0x0118
(0101) {
(0102) case 0xe7:return 0; //按键0
F8 2700 CLR R16
F9 C01F RJMP 0x0119
(0103) case 0xd7:return 1; //按键1
FA E001 LDI R16,1
FB C01D RJMP 0x0119
(0104) case 0xb7:return 2; //按键2
FC E002 LDI R16,2
FD C01B RJMP 0x0119
(0105) case 0x77:return 3; //按键3
FE E003 LDI R16,3
FF C019 RJMP 0x0119
(0106) case 0xeb:return 4; //按键4
100 E004 LDI R16,4
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -