📄 dac_tlc5615.s
字号:
.module DAC_TLC5615.c
.area text(rom, con, rel)
.dbfile D:\垃圾站\5615\DAC_TLC5615.c
.dbfile D:\垃圾站\5615\delay.h
.dbfunc e delay_nus _delay_nus fV
; time -> R16,R17
.even
_delay_nus::
.dbline -1
.dbline 33
; //#define F_CPU 12000000
; #define F_CPU 11059200
; //#define F_CPU 8000000
; //#define F_CPU 7372800
; //#define F_CPU 4000000
; /*************************************************************************
; 通用延时头文件:
; delay_nus(n)延时n微秒
; delay_nms(n)延时n毫秒
; *************************************************************************/
; #if F_CPU == 12000000
; void delay_nus(unsigned int time)
; {
; while (time!=0)
; {
; NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
; time--;
; }
; }
; void delay_nms(unsigned int time)
; {
; unsigned int i;
; while (time!=0)
; {
; for(i=0;i<1740;i++);
; time--;
; }
; }
; #endif
;
; #if F_CPU == 11059200
; void delay_nus(unsigned int time)
; {
xjmp L3
L2:
.dbline 35
; while (time!=0)
; {
.dbline 36
; NOP();NOP();NOP();NOP();NOP();NOP();NOP();
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 36
nop
.dbline 37
; time--;
subi R16,1
sbci R17,0
.dbline 38
; }
L3:
.dbline 34
cpi R16,0
cpc R16,R17
brne L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; time -> R16,R17
.even
_delay_nms::
st -y,R20
st -y,R21
.dbline -1
.dbline 41
; }
; void delay_nms(unsigned int time)
; {
xjmp L7
L6:
.dbline 44
; unsigned int i;
; while (time!=0)
; {
.dbline 45
; for(i=0;i<1580;i++);
clr R20
clr R21
xjmp L12
L9:
.dbline 45
L10:
.dbline 45
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 45
cpi R20,44
ldi R30,6
cpc R21,R30
brlo L9
X1:
.dbline 46
; time--;
subi R16,1
sbci R17,0
.dbline 47
; }
L7:
.dbline 43
cpi R16,0
cpc R16,R17
brne L6
X2:
.dbline -2
L5:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.area code(ram, con, rel)
.dbfile D:\垃圾站\5615\delay.h
.area lit(rom, con, rel)
_SMG_Conver::
.byte 63,6
.byte 91,'O
.byte 'f,'m
.byte 125,7
.byte 127,'o
.byte 'w,124
.byte 57,94
.byte 'y,'q
.byte 0,64
.dbfile D:\垃圾站\5615\AVR_XQV12.h
.dbsym e SMG_Conver _SMG_Conver A[18:18]kc
.area data(ram, con, rel)
.dbfile D:\垃圾站\5615\AVR_XQV12.h
.area text(rom, con, rel)
.dbfile D:\垃圾站\5615\AVR_XQV12.h
.dbfunc e Scan_Key _Scan_Key fc
; i -> R20
.even
_Scan_Key::
st -y,R20
st -y,R21
.dbline -1
.dbline 69
;
; #define TRUE 0xff //真
; #define FALSE 0x00 //假
; #define null 0x00 //空
; #define Open_LED PORTA|=0x10 //使能LED
; #define Close_LED PORTA&=~0x10 //关闭LED
; #define LED PORTB //LED端口
; #define SMG PORTB //数码管端口
; #define Open_SMG_DATA PORTA|=0x08 //使能数码管数据
; #define Close_SMG_DATA PORTA&=~0x08 //关闭数码管数据
; #define Open_SMG_BIT PORTA|=0x04 //使能数码管位选择
; #define Close_SMG_BIT PORTA&=~0x04 //关闭数码管位选择
; #define KEY0 (PIND&0x04) //INT0
; #define KEY1 (PIND&0x08) //INT1
; #define SetSclk (PORTC|=0x80) //LCD12864 CLK
; #define ClrSclk (PORTC&=~0x80)
; #define SetRs (PORTD|=0x40) //LCD12864 CS
; #define ClrRs (PORTD&=~0x40)
; #define SetSid (PORTC|=0x40) //LCD12864 DATA
; #define ClrSid (PORTC&=~0x40)
; #define D0 0x20 //18B20 DATA
; #define port PORTA
; #define ddrt DDRA
; #define pin PINA
; #define Set_CS5615 (PORTA|=0x10) //片选5615
; #define Clr_CS5615 (PORTA&=~0x10) //释放
; #define Period 0x6bfe //PWM脉冲周期20ms
; #define rd_device_add 0xa3 //定义器件读地址
; #define wr_device_add 0xa2 //定义器件写地址
; #define START 0x08 //起始信号
; #define MT_SLA_ACK 0x18
; #define MT_DATA_ACK 0x28
; #define RE_START 0x10
; #define MR_SLA_ACK 0x40
; #define MR_DATA_NOACK 0x58
; #define START 0x08
; #define MT_SLA_ACK 0x18
; #define MT_DATA_ACK 0x28
; #define RE_START 0x10
; #define MR_SLA_ACK 0x40
; #define MR_DATA_NOACK 0x58
; #define MR_DATA_ACK 0x50
;
; #if AD==TRUE //条件编译指令
; unsigned char Adc_Mux=0;
; unsigned int Adc0_Rel=0;
; unsigned int Adc1_Rel=0;
; unsigned int Adc0_Catch=0;
; unsigned int Adc1_Catch=0;
; unsigned int Adc0_Conver[20];
; unsigned int Adc1_Conver[20];
; unsigned char Adc0_F;
; unsigned char Adc1_F;
; #endif //条件编译结束
; unsigned char Key_Number; //全局变量:按键标志
; unsigned int temprter;
; #pragma data:code
; const unsigned char SMG_Conver[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
; //数码管译码数组
; #pragma data:data
; /*******************************************************/
; /****** 函数名称: Scan_Key() ******/
; /****** 功 能: 键盘扫描 ******/
; /****** 参 数: 无 ******/
; /****** 返回值 : 按键的键值,无按键时返回null ******/
; /*******************************************************/
; unsigned char Scan_Key(void)
; {
.dbline 71
; unsigned char i;
; PORTC=0x00;
clr R2
out 0x15,R2
.dbline 72
; DDRC =0xf0; //设置端口高4位输出,低四位输入
ldi R24,240
out 0x14,R24
.dbline 73
; PORTC=0x0f; //低四位内部上拉
ldi R24,15
out 0x15,R24
.dbline 74
; delay_nus(1); //短暂延时
ldi R16,1
ldi R17,0
xcall _delay_nus
.dbline 75
; i=PINC&0x0f; //读取端口电平
in R20,0x13
andi R20,15
.dbline 76
; if(i!=0x0f) //判断是否有键按下
cpi R20,15
breq L14
X3:
.dbline 77
; {
.dbline 78
; PORTC=0x00;
clr R2
out 0x15,R2
.dbline 79
; DDRC =0x0f; //设置端口低4位输出,高四位输入
ldi R24,15
out 0x14,R24
.dbline 80
; PORTC=0xf0; //高四位内部上拉
ldi R24,240
out 0x15,R24
.dbline 81
; delay_nus(10); //短暂延时,去抖
ldi R16,10
ldi R17,0
xcall _delay_nus
.dbline 82
; if((PINC&0xf0)!=0xf0) //再次判断是否有键按下
in R24,0x13
andi R24,240
cpi R24,240
breq L16
X4:
.dbline 83
; {
.dbline 84
; i+=(PINC&0xf0); //读取端口电平
in R24,0x13
andi R24,240
add R20,R24
L18:
.dbline 85
; while((PINC&0xf0)!=0xf0); //等待按键释放
L19:
.dbline 85
in R24,0x13
andi R24,240
cpi R24,240
brne L18
X5:
.dbline 86
; return i; //返回键值
mov R16,R20
xjmp L13
L16:
.dbline 88
; }
; }
L14:
.dbline 89
; return null; //无按键按下返回null
clr R16
.dbline -2
L13:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 c
.dbend
.dbfunc e Key_Num _Key_Num fc
; key -> R16
.even
_Key_Num::
st -y,R20
st -y,R21
.dbline -1
.dbline 99
; }
;
; /*******************************************************/
; /****** 函数名称: Key_Num() ******/
; /****** 功 能: 转换键值为0-f十六进制数 ******/
; /****** 参 数: key--键值 ******/
; /****** 返回值 : 0-f ******/
; /*******************************************************/
; unsigned char Key_Num(unsigned char key)
; {
.dbline 100
; switch(key)
mov R20,R16
clr R21
cpi R20,183
ldi R30,0
cpc R21,R30
brne X24
xjmp L27
X24:
X6:
cpi R20,187
ldi R30,0
cpc R21,R30
brne X25
xjmp L31
X25:
X7:
cpi R20,189
ldi R30,0
cpc R21,R30
brne X26
xjmp L35
X26:
X8:
cpi R20,190
ldi R30,0
cpc R21,R30
brne X27
xjmp L39
X27:
X9:
ldi R24,190
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L42
X10:
L41:
cpi R20,119
ldi R30,0
cpc R21,R30
brne X28
xjmp L28
X28:
X11:
cpi R20,123
ldi R30,0
cpc R21,R30
brne X29
xjmp L32
X29:
X12:
cpi R20,125
ldi R30,0
cpc R21,R30
brne X30
xjmp L36
X30:
X13:
cpi R20,126
ldi R30,0
cpc R21,R30
brne X31
xjmp L40
X31:
X14:
xjmp L22
L42:
cpi R20,215
ldi R30,0
cpc R21,R30
breq L26
X15:
cpi R20,219
ldi R30,0
cpc R21,R30
breq L30
X16:
cpi R20,221
ldi R30,0
cpc R21,R30
breq L34
X17:
cpi R20,222
ldi R30,0
cpc R21,R30
brne X32
xjmp L38
X32:
X18:
cpi R20,215
ldi R30,0
cpc R21,R30
brge X33
xjmp L22
X33:
X19:
L43:
cpi R20,231
ldi R30,0
cpc R21,R30
breq L25
X20:
cpi R20,235
ldi R30,0
cpc R21,R30
breq L29
X21:
cpi R20,237
ldi R30,0
cpc R21,R30
breq L33
X22:
cpi R20,238
ldi R30,0
cpc R21,R30
breq L37
X23:
xjmp L22
L25:
.dbline 102
; {
; case 0xe7:return 0; //按键0
clr R16
xjmp L21
L26:
.dbline 103
; case 0xd7:return 1; //按键1
ldi R16,1
xjmp L21
L27:
.dbline 104
; case 0xb7:return 2; //按键2
ldi R16,2
xjmp L21
L28:
.dbline 105
; case 0x77:return 3; //按键3
ldi R16,3
xjmp L21
L29:
.dbline 106
; case 0xeb:return 4; //按键4
ldi R16,4
xjmp L21
L30:
.dbline 107
; case 0xdb:return 5; //按键5
ldi R16,5
xjmp L21
L31:
.dbline 108
; case 0xbb:return 6; //按键6
ldi R16,6
xjmp L21
L32:
.dbline 109
; case 0x7b:return 7; //按键7
ldi R16,7
xjmp L21
L33:
.dbline 110
; case 0xed:return 8; //按键8
ldi R16,8
xjmp L21
L34:
.dbline 111
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -