📄 图康科技.lst
字号:
__text_start:
__start:
C6 E5CF LDI R28,0x5F
C7 E0D4 LDI R29,4
C8 BFCD OUT 0x3D,R28
C9 BFDE OUT 0x3E,R29
CA 51C0 SUBI R28,0x10
CB 40D0 SBCI R29,0
CC EA0A LDI R16,0xAA
CD 8308 STD Y+0,R16
CE 2400 CLR R0
CF ECE5 LDI R30,0xC5
D0 E0F1 LDI R31,1
D1 E011 LDI R17,1
D2 3FE1 CPI R30,0xF1
D3 07F1 CPC R31,R17
D4 F011 BEQ 0x00D7
D5 9201 ST R0,Z+
D6 CFFB RJMP 0x00D2
D7 8300 STD Z+0,R16
D8 E2E6 LDI R30,0x26
D9 E0F0 LDI R31,0
DA E6A0 LDI R26,0x60
DB E0B0 LDI R27,0
DC E011 LDI R17,1
DD E000 LDI R16,0
DE BF0B OUT 0x3B,R16
DF 38EB CPI R30,0x8B
E0 07F1 CPC R31,R17
E1 F021 BEQ 0x00E6
E2 95C8 LPM
E3 9631 ADIW R30,1
E4 920D ST R0,X+
E5 CFF9 RJMP 0x00DF
E6 D001 RCALL _main
_exit:
E7 CFFF RJMP _exit
FILE: F:\Work\Data\程序\修订版~1.1\main.c
(0001) /*****************************************************
(0002) * File name : main.C
(0003) * Description : Header file of main_H.H
(0004) * Platform : ICCAVR
(0005) * Author : xiao xue
(0006) * Email : ay1509@yahoo.com
(0007) * Date : 2008-03-13
(0008) * Description :
(0009) /********************头文件*************************/
(0010) #include"main_H.h"
(0011)
(0012) void main(void)
(0013) {
(0014) SEI();
_main:
E8 9478 BSET 7
(0015) RS485_init();
E9 D284 RCALL _RS485_init
(0016) KeyInit();
EA D556 RCALL _KeyInit
(0017) lcd_init();
EB D047 RCALL _lcd_init
(0018) timer1_init();
EC D6EB RCALL _timer1_init
(0019) delay_nms(1000);
ED EE08 LDI R16,0xE8
EE E013 LDI R17,3
EF D245 RCALL _delay_nms
(0020) delay_nms(1000);
F0 EE08 LDI R16,0xE8
F1 E013 LDI R17,3
F2 D242 RCALL _delay_nms
(0021) Send_485();
F3 D2A4 RCALL _Send_485
F4 C020 RJMP 0x0115
(0022)
(0023) while(1){
(0024) switch(flag){
F5 9140 01D6 LDS R20,flag
F7 2755 CLR R21
F8 3041 CPI R20,1
F9 E0E0 LDI R30,0
FA 075E CPC R21,R30
FB F049 BEQ 0x0105
FC 3042 CPI R20,2
FD E0E0 LDI R30,0
FE 075E CPC R21,R30
FF F039 BEQ 0x0107
100 3043 CPI R20,3
101 E0E0 LDI R30,0
102 075E CPC R21,R30
103 F029 BEQ 0x0109
104 C005 RJMP 0x010A
(0025) case 1:
(0026) display(); //flag=1液晶显示
105 D23B RCALL _display
(0027) break;
106 C003 RJMP 0x010A
(0028) case 2:
(0029) Send_485(); //发送数据
107 D290 RCALL _Send_485
(0030) break;
108 C001 RJMP 0x010A
(0031) case 3:
(0032) RS485_getchar(); //决断模块
109 D470 RCALL _RS485_getchar
(0033) break;
(0034) default:break;
(0035) }//end switch
(0036) if(PIND!=0xfb){ //判断有无键按下
10A B380 IN R24,0x10
10B 3F8B CPI R24,0xFB
10C F041 BEQ 0x0115
(0037) delay_nms(15); //延时消抖
10D E00F LDI R16,0xF
10E E010 LDI R17,0
10F D225 RCALL _delay_nms
(0038) if ((PIND&0xfb)!= 0xfb)
110 B380 IN R24,0x10
111 7F8B ANDI R24,0xFB
112 3F8B CPI R24,0xFB
113 F009 BEQ 0x0115
(0039) Keyment(); //按键处理函数
114 D5E4 RCALL _Keyment
115 CFDF RJMP 0x00F5
116 9508 RET
_wr_com:
cmd --> R10
117 92AA ST R10,-Y
118 2EA0 MOV R10,R16
FILE: F:\Work\Data\程序\修订版~1.1\LCD_HG1286.c
(0001) /*****************************************************
(0002) * File name : LCD_HG1286.C
(0003) * Description : Header file of main_H.H
(0004) * Platform : ICCAVR
(0005) * Author : xiao xue
(0006) * Email : ay1509@yahoo.com
(0007) * Date : 2008-03-13
(0008) * Description : LCD Show
(0009) /********************头文件*************************/
(0010) #include"main_H.h"
(0011) /***************写命令***************
(0012) *函 数:wr_com
(0013) *函数功能:写命令字
(0014) *入口参数:cmd
(0015) *返 回 值:无
(0016) *备 注:
(0017) ************************************/
(0018) void wr_com(uchar cmd)
(0019) {
(0020) PORTB=cmd; //命令送至B端口
119 BAA8 OUT 0x18,R10
(0021) RS_clear; //写命令
11A 98AA CBI 0x15,2
(0022) RW_clear; //写使能
11B 98AC CBI 0x15,4
(0023) E_clear; //模块使能
11C 98AD CBI 0x15,5
(0024) delay_nus(300);
11D E20C LDI R16,0x2C
11E E011 LDI R17,1
11F D1FF RCALL _delay_nus
(0025) E_set; //关闭使能
120 9AAD SBI 0x15,5
121 90A9 LD R10,Y+
122 9508 RET
_wr_date:
data --> R10
123 92AA ST R10,-Y
124 92BA ST R11,-Y
125 0158 MOVW R10,R16
(0026) }
(0027)
(0028) /*****************写数据**************
(0029) *函 数:wr_date
(0030) *函数功能:写数据
(0031) *入口参数:*data
(0032) *返 回 值:无
(0033) *备 注:
(0034) ************************************/
(0035) void wr_date(uchar *data)
(0036) {
(0037) PORTB=*data; //数据传至B端口
126 01F5 MOVW R30,R10
127 8020 LDD R2,Z+0
128 BA28 OUT 0x18,R2
(0038) RS_set; //写数据
129 9AAA SBI 0x15,2
(0039) RW_clear; //写使能
12A 98AC CBI 0x15,4
(0040) E_clear; //模块使能
12B 98AD CBI 0x15,5
(0041) delay_nus(300);
12C E20C LDI R16,0x2C
12D E011 LDI R17,1
12E D1F0 RCALL _delay_nus
(0042) E_set; //关闭使能
12F 9AAD SBI 0x15,5
130 90B9 LD R11,Y+
131 90A9 LD R10,Y+
132 9508 RET
(0043) }
(0044) /******************初始化**********
(0045) *函 数:lcd_init
(0046) *函数功能:液晶始化
(0047) *入口参数:无
(0048) *返 回 值:无
(0049) *备 注:
(0050) **********************************/
(0051) void lcd_init(void)
(0052) {
(0053) DDRB=0xff;
_lcd_init:
133 EF8F LDI R24,0xFF
134 BB87 OUT 0x17,R24
(0054) DDRC=0xff;
135 BB84 OUT 0x14,R24
(0055) PORTB=0XFF;
136 BB88 OUT 0x18,R24
(0056) PORTC=0XFF;
137 BB85 OUT 0x15,R24
(0057) wr_com(0x01); //清DDRAM
138 E001 LDI R16,1
139 DFDD RCALL _wr_com
(0058) wr_com(0x30); //功能设置,一次送8位数据(基本指令集)
13A E300 LDI R16,0x30
13B DFDB RCALL _wr_com
(0059) wr_com(0x02); //DDRAM地址归位
13C E002 LDI R16,2
13D DFD9 RCALL _wr_com
(0060) wr_com(0x04);
13E E004 LDI R16,4
13F DFD7 RCALL _wr_com
(0061) wr_com(0x0C); //整体显示,游标off,游标位置off
140 E00C LDI R16,0xC
141 DFD5 RCALL _wr_com
(0062) wr_com(0x80); //设定DDRAM7位地址到地址计数器AC
142 E800 LDI R16,0x80
143 DFD3 RCALL _wr_com
144 9508 RET
_dis:
k --> R10
datas --> Y,+8
sum --> R12
h --> R14
145 D6EA RCALL push_xgset30FC
146 2EC2 MOV R12,R18
147 2EE0 MOV R14,R16
(0063) }
(0064) /******************显示数据******************
(0065) *h代表行数可取(1,2,3,4)
(0066) * SUM表示一次要显示汉字的总个数。(1--32)
(0067) ********************************************/
(0068) void dis(uchar h , uchar sum , uchar *datas )
(0069) {
(0070) unsigned char k=0;
148 24AA CLR R10
(0071) switch (h){ //判断所要显示行
149 2D4E MOV R20,R14
14A 2755 CLR R21
14B 3041 CPI R20,1
14C E0E0 LDI R30,0
14D 075E CPC R21,R30
14E F069 BEQ 0x015C
14F 3042 CPI R20,2
150 E0E0 LDI R30,0
151 075E CPC R21,R30
152 F061 BEQ 0x015F
153 3043 CPI R20,3
154 E0E0 LDI R30,0
155 075E CPC R21,R30
156 F059 BEQ 0x0162
157 3044 CPI R20,4
158 E0E0 LDI R30,0
159 075E CPC R21,R30
15A F051 BEQ 0x0165
15B C014 RJMP 0x0170
(0072) case 1: wr_com(0x80);break;
15C E800 LDI R16,0x80
15D DFB9 RCALL _wr_com
15E C011 RJMP 0x0170
(0073) case 2: wr_com(0x90);break;
15F E900 LDI R16,0x90
160 DFB6 RCALL _wr_com
161 C00E RJMP 0x0170
(0074) case 3: wr_com(0x88);break;
162 E808 LDI R16,0x88
163 DFB3 RCALL _wr_com
164 C00B RJMP 0x0170
(0075) case 4: wr_com(0x98);break;
165 E908 LDI R16,0x98
166 DFB0 RCALL _wr_com
167 C008 RJMP 0x0170
(0076) }//end switch
(0077) while(k<=sum){ //显示数据个数
(0078) wr_date(&(*(datas+k))); //写入数据
168 2D0A MOV R16,R10
169 2711 CLR R17
16A 8408 LDD R0,Y+8
16B 8419 LDD R1,Y+9
16C 0D00 ADD R16,R0
16D 1D11 ADC R17,R1
16E DFB4 RCALL _wr_date
(0079) k++;
16F 94A3 INC R10
170 2C2C MOV R2,R12
171 2433 CLR R3
172 2C4A MOV R4,R10
173 2455 CLR R5
174 1424 CP R2,R4
175 0435 CPC R3,R5
176 F78C BGE 0x0168
177 C6AD RJMP pop_xgset30FC
_lcd_dis:
datac --> R20
y --> R22
x --> R10
178 D6CA RCALL push_xgsetF00C
179 2F62 MOV R22,R18
17A 2EA0 MOV R10,R16
17B 814E LDD R20,Y+6
17C 815F LDD R21,Y+7
(0080) }//end while
(0081) }
(0082) /***********************定点显示数据*********************
(0083) *LCD显示子程序(一次写入两个字节)
(0084) * x代表行数可取:1,2,3,4(十进制)
(0085) * y代表列数可取:0X0,0X1————0X7(十六进制)
(0086) * *data代表显示数据
(0087) ********************************************************/
(0088) void lcd_dis(uchar x,uchar y,uchar *datac)
(0089) {
(0090) switch (x){ //判断所要显示行
17D 24BB CLR R11
17E 01C5 MOVW R24,R10
17F 3081 CPI R24,1
180 E0E0 LDI R30,0
181 079E CPC R25,R30
182 F069 BEQ 0x0190
183 3082 CPI R24,2
184 E0E0 LDI R30,0
185 079E CPC R25,R30
186 F069 BEQ 0x0194
187 3083 CPI R24,3
188 E0E0 LDI R30,0
189 079E CPC R25,R30
18A F069 BEQ 0x0198
18B 3084 CPI R24,4
18C E0E0 LDI R30,0
18D 079E CPC R25,R30
18E F069 BEQ 0x019C
18F C00F RJMP 0x019F
(0091) case 1: wr_com(0x80+y);break; //所要显示行和列
190 2F06 MOV R16,R22
191 5800 SUBI R16,0x80
192 DF84 RCALL _wr_com
193 C00B RJMP 0x019F
(0092) case 2: wr_com(0x90+y);break;
194 2F06 MOV R16,R22
195 5700 SUBI R16,0x70
196 DF80 RCALL _wr_com
197 C007 RJMP 0x019F
(0093) case 3: wr_com(0x88+y);break;
198 2F06 MOV R16,R22
199 5708 SUBI R16,0x78
19A DF7C RCALL _wr_com
19B C003 RJMP 0x019F
(0094) case 4: wr_com(0x98+y);break;
19C 2F06 MOV R16,R22
19D 5608 SUBI R16,0x68
19E DF78 RCALL _wr_com
(0095) }//end switch
(0096) wr_date(datac); //定点显示数据第一个字节
19F 018A MOVW R16,R20
1A0 DF82 RCALL _wr_date
(0097) wr_date(&(*(datac+1))); //定点显示数据第二个字节
1A1 018A MOVW R16,R20
1A2 5F0F SUBI R16,0xFF
1A3 4F1F SBCI R17,0xFF
1A4 DF7E RCALL _wr_date
1A5 C6A4 RJMP pop_xgsetF00C
_clr:
a --> Y,+0
i --> R20
1A6 934A ST R20,-Y
1A7 9721 SBIW R28,1
(0098) }
(0099) /**********************清屏函数***********************
(0100) *函 数:clr
(0101) *函数功能:清屏
(0102) *入口参数:无
(0103) *返 回 值:无
(0104) *备 注:
(0105) ****************************************************/
(0106) void clr(void)
(0107) {
(0108) uchar i,a=0x20;
1A8 E280 LDI R24,0x20
1A9 8388 STD Y+0,R24
(0109) wr_com(0x80); //显示命令
1AA E800 LDI R16,0x80
1AB DF6B RCALL _wr_com
(0110) for(i=1;i<=64;i++)
1AC E041 LDI R20,1
1AD C003 RJMP 0x01B1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -