📄 ocmj815b.lst
字号:
__start:
__text_start:
014F E5CF LDI R28,0x5F
0150 E0D4 LDI R29,4
0151 BFCD OUT 0x3D,R28
0152 BFDE OUT 0x3E,R29
0153 51C0 SUBI R28,0x10
0154 40D0 SBCI R29,0
0155 EA0A LDI R16,0xAA
0156 8308 STD Y+0,R16
0157 2400 CLR R0
0158 EAE9 LDI R30,0xA9
0159 E0F2 LDI R31,2
015A E012 LDI R17,2
015B 3BE1 CPI R30,0xB1
015C 07F1 CPC R31,R17
015D F011 BEQ 0x0160
015E 9201 ST R0,Z+
015F CFFB RJMP 0x015B
0160 8300 STD Z+0,R16
0161 E5E4 LDI R30,0x54
0162 E0F0 LDI R31,0
0163 E6A0 LDI R26,0x60
0164 E0B0 LDI R27,0
0165 E012 LDI R17,2
0166 39ED CPI R30,0x9D
0167 07F1 CPC R31,R17
0168 F021 BEQ 0x016D
0169 95C8 LPM
016A 9631 ADIW R30,1
016B 920D ST R0,X+
016C CFF9 RJMP 0x0166
016D 940E0312 CALL _main
_exit:
016F CFFF RJMP _exit
FILE: F:\项目\电子设计培训计划\MYOWNT~1.12\function.h
(0001) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0002) //功能: 函数定义及其构架
(0003) //输入: 无
(0004) //输出: 函数名
(0005) //By: 李 平 2007.7.11
(0006) //备注:
(0007) #include <iom16v.h>
(0008) #include <macros.h>
(0009) //#include "Portini.h"
(0010) //#include "Data.h"
(0011)
(0012)
(0013) //定义全局变量 tabx[4] 和 taby[4]
(0014) uchar tabx[4];
(0015) uchar taby[4];
(0016)
(0017) void bang(void);
(0018) void send(uchar dat); //送出一行指令或数据
(0019) //F0 XX YY QQ WW: 汉字显示命令 以汉字为单位的X,Y坐标值,QQ,WW为汉字区码,位码
(0020) //F1 XX YY AS : 8*8ASCII字符显示 以ASCII为单位的X,以1*1为单位的Y坐标值,AS为ASCII字符
(0021) //F2 XX YY : 显示位点阵 以1*1点阵为单位的X,Y坐标值,
(0022) //F3 XX YY BT : 显示字节点阵 以1*8为行单位,以1*1为列单位的坐标值,BT=0白色,=1黑色
(0023) //F4: 清屏
(0024) //F5: 上移一个点阵
(0025) //F6: 下移一个点阵
(0026) //F7: 左移一个点阵
(0027) //F8: 右移一个点阵
(0028) //F9 XX YY AS : 8*16 ASCII字符显示 以ASCII为单位的X,以1*1为单位的Y坐标值 AS:ASCII字符
(0029) //FA : 此后的图形或文字反白显示
(0030) //FB 00/07/0F : 光标显示 00关光标 07 光标为8点 0F光标为16点
(0031) //FC 00/01/07/0F: 移动速度 00按一个点移动 01按2个点移动
(0032) // 07按8个点移动 0F按16个点移动
(0033) void write(uchar comm,uchar addr_x,uchar addr_y);
(0034) //对应于F0 XX YY 即送命名+X坐标值+Y坐标值,分别一Send()格式送出
(0035) void disp1line (uchar *chn); //显示一行汉字
(0036) void disp2lines (uchar *chn); //显示2行汉字
(0037) void disp_img (uchar *img); //显示一幅图片
(0038) void disptouch(void); //显示X,Y坐标值
(0039) void start(void); //SPI使能
(0040) void WriteCharTo7843(uchar num); //SPI写数据
(0041) unsigned int ReadFromCharFrom7843(void); //SPI 读数据
(0042) void disp_ciclr(uint X,uint Y); //画曲线
(0043)
(0044) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0045) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0046) //函数名: send( data )
(0047) //功能: 写命令或数据
(0048) //输入: 待送入的data值
(0049) //输出: 无 因为送进液晶后便可以显示了,不必返回
(0050) //By: 李 平 2007.7.11
(0051) //备注:
(0052) void send (uchar dat)
(0053) {
(0054) while(busy==1)
_send:
dat --> R16
0170 B226 IN R2,0x16
0171 2433 CLR R3
0172 FC20 SBRC R2,0
0173 CFFC RJMP _send
(0055) ;
(0056) dataout=dat;
0174 BB0B OUT 0x1B,R16
(0057) req_set;
0175 9AC1 SBI 0x18,1
(0058) while(busy==0)
0176 9BB0 SBIS 0x16,0
0177 CFFE RJMP 0x0176
(0059) ;
(0060) req_clr;
0178 98C1 CBI 0x18,1
0179 9508 RET
_write:
addr_y --> Y+4
addr_x --> R20
comm --> R22
017A 940E044D CALL push_gset2
017C 2F42 MOV R20,R18
017D 2F60 MOV R22,R16
(0061) }
(0062) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0063) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0064) //函数名: write()
(0065) //功能: 写命令或数据到LCD-
(0066) //输入: comm命令, addr_x坐标X ,addr_y坐标Y
(0067) //输出: 无
(0068) //By: 李 平 2007.7.11
(0069) //备注:
(0070) void write(uchar comm,uchar addr_x,uchar addr_y)
(0071) {
(0072) send(comm);
017E 2F06 MOV R16,R22
017F DFF0 RCALL _send
(0073) send(addr_x);
0180 2F04 MOV R16,R20
0181 DFEE RCALL _send
(0074) send(addr_y);
0182 810C LDD R16,Y+4
0183 DFEC RCALL _send
0184 940E0441 CALL pop_gset2
0186 9508 RET
_disp1line:
i --> R20
chn --> R22
0187 940E044D CALL push_gset2
0189 01B8 MOVW R22,R16
018A 9721 SBIW R28,1
(0075) }
(0076) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0077) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0078) //函数名: disp1line()
(0079) //功能: 显示一行汉字
(0080) //输入: 待显示的chn数组名
(0081) //输出: 无
(0082) //By: 李 平 2007.7.11
(0083) //备注:
(0084) void disp1line(uchar *chn)
(0085) {
(0086) uchar i;
(0087) for(i=2;i<14;i++)
018B E042 LDI R20,2
018C C019 RJMP 0x01A6
(0088) {
(0089) write(0xf0,i-2,0);
018D 2422 CLR R2
018E 8228 STD Y+0,R2
018F 2F24 MOV R18,R20
0190 5022 SUBI R18,2
0191 EF00 LDI R16,0xF0
0192 DFE7 RCALL _write
(0090) send(chn[(i-2)*2]-0xa0);
0193 E082 LDI R24,2
0194 9F84 MUL R24,R20
0195 01F0 MOVW R30,R0
0196 9734 SBIW R30,4
0197 0FE6 ADD R30,R22
0198 1FF7 ADC R31,R23
0199 8100 LDD R16,Z+0
019A 5A00 SUBI R16,0xA0
019B DFD4 RCALL _send
(0091) send(chn[(i-2)*2+1]-0xa0);
019C E082 LDI R24,2
019D 9F84 MUL R24,R20
019E 01F0 MOVW R30,R0
019F 9734 SBIW R30,4
01A0 0FE6 ADD R30,R22
01A1 1FF7 ADC R31,R23
01A2 8101 LDD R16,Z+1
01A3 5A00 SUBI R16,0xA0
01A4 DFCB RCALL _send
01A5 9543 INC R20
01A6 304E CPI R20,0xE
01A7 F328 BCS 0x018D
01A8 9621 ADIW R28,1
01A9 940E0441 CALL pop_gset2
01AB 9508 RET
_disp2lines:
i --> R20
chn --> R22
01AC 940E044D CALL push_gset2
01AE 01B8 MOVW R22,R16
01AF 9721 SBIW R28,1
(0092) }
(0093) }
(0094) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0095) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0096) //函数名: disp2lines()
(0097) //功能: 显示2行汉字
(0098) //输入: 待显示的chn数组名
(0099) //输出: 无
(0100) //By: 李 平 2007.7.11
(0101) //备注:
(0102) void disp2lines (uchar *chn)
(0103) {
(0104) uchar i;
(0105) for(i=2;i<11;i++)
01B0 E042 LDI R20,2
01B1 C019 RJMP 0x01CB
(0106) {
(0107) write(0xf0,i-2,2);
01B2 E082 LDI R24,2
01B3 8388 STD Y+0,R24
01B4 2F24 MOV R18,R20
01B5 5022 SUBI R18,2
01B6 EF00 LDI R16,0xF0
01B7 DFC2 RCALL _write
(0108) send(chn[(i-2)*2]-0xa0);
01B8 E082 LDI R24,2
01B9 9F84 MUL R24,R20
01BA 01F0 MOVW R30,R0
01BB 9734 SBIW R30,4
01BC 0FE6 ADD R30,R22
01BD 1FF7 ADC R31,R23
01BE 8100 LDD R16,Z+0
01BF 5A00 SUBI R16,0xA0
01C0 DFAF RCALL _send
(0109) send(chn[(i-2)*2+1]-0xa0);
01C1 E082 LDI R24,2
01C2 9F84 MUL R24,R20
01C3 01F0 MOVW R30,R0
01C4 9734 SBIW R30,4
01C5 0FE6 ADD R30,R22
01C6 1FF7 ADC R31,R23
01C7 8101 LDD R16,Z+1
01C8 5A00 SUBI R16,0xA0
01C9 DFA6 RCALL _send
01CA 9543 INC R20
01CB 304B CPI R20,0xB
01CC F328 BCS 0x01B2
(0110) }
(0111) for(i=2;i<11;i++)
01CD E042 LDI R20,2
01CE C017 RJMP 0x01E6
(0112) {
(0113) write(0xf0,i-2,3);
01CF E083 LDI R24,3
01D0 8388 STD Y+0,R24
01D1 2F24 MOV R18,R20
01D2 5022 SUBI R18,2
01D3 EF00 LDI R16,0xF0
01D4 DFA5 RCALL _write
(0114) send(chn[(i+6)*2]-0xa0);
01D5 E082 LDI R24,2
01D6 9F84 MUL R24,R20
01D7 01F0 MOVW R30,R0
01D8 0FE6 ADD R30,R22
01D9 1FF7 ADC R31,R23
01DA 8504 LDD R16,Z+12
01DB 5A00 SUBI R16,0xA0
01DC DF93 RCALL _send
(0115) send(chn[(i+6)*2+1]-0xa0);
01DD E082 LDI R24,2
01DE 9F84 MUL R24,R20
01DF 01F0 MOVW R30,R0
01E0 0FE6 ADD R30,R22
01E1 1FF7 ADC R31,R23
01E2 8505 LDD R16,Z+13
01E3 5A00 SUBI R16,0xA0
01E4 DF8B RCALL _send
01E5 9543 INC R20
01E6 304B CPI R20,0xB
01E7 F338 BCS 0x01CF
01E8 9621 ADIW R28,1
01E9 940E0441 CALL pop_gset2
01EB 9508 RET
_disp_img:
j --> R20
i --> R10
img --> R22
01EC 940E044B CALL push_gset3
01EE 01B8 MOVW R22,R16
01EF 9721 SBIW R28,1
(0116) }
(0117) }
(0118) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0119) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0120) //函数名: disp_img()
(0121) //功能: 显示一幅图片
(0122) //输入: 待显示的img数组名
(0123) //输出: 无
(0124) //By: 李 平 2007.7.11
(0125) //备注:
(0126) void disp_img (uchar *img)
(0127) {
(0128) uchar i,j;
(0129) for(j=31;j<64;j++)
01F0 E14F LDI R20,0x1F
01F1 C01A RJMP 0x020C
(0130) {
(0131) for(i=4;i<20;i++)
01F2 E084 LDI R24,4
01F3 2EA8 MOV R10,R24
01F4 C013 RJMP 0x0208
(0132) {
(0133) write(0xf3,i,j);
01F5 8348 STD Y+0,R20
01F6 2D2A MOV R18,R10
01F7 EF03 LDI R16,0xF3
01F8 DF81 RCALL _write
(0134) send(img[(j-31)*16+i-4]); //16*33=528
01F9 E180 LDI R24,0x10
01FA 9F84 MUL R24,R20
01FB 01F0 MOVW R30,R0
01FC 5FE0 SUBI R30,0xF0
01FD 40F1 SBCI R31,1
01FE 2C2A MOV R2,R10
01FF 2433 CLR R3
0200 0DE2 ADD R30,R2
0201 1DF3 ADC R31,R3
0202 9734 SBIW R30,4
0203 0FE6 ADD R30,R22
0204 1FF7 ADC R31,R23
0205 8100 LDD R16,Z+0
0206 DF69 RCALL _send
0207 94A3 INC R10
0208 2D8A MOV R24,R10
0209 3184 CPI R24,0x14
020A F350 BCS 0x01F5
020B 9543 INC R20
020C 3440 CPI R20,0x40
020D F320 BCS 0x01F2
020E 9621 ADIW R28,1
020F 940E0444 CALL pop_gset3
0211 9508 RET
_disptouch:
r --> R20
0212 940E044F CALL push_gset1
0214 9721 SBIW R28,1
(0135) }
(0136) }
(0137) }
(0138) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0139) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0140) //函数名: disptouch()
(0141) //功能: 显示触摸屏摁下处的X,Y坐标值
(0142) //输入: tabx[4] taby[4] 2个4位的坐标值
(0143) //输出: 无 因为所有的数据均显示之
(0144) //By: 李 平 2007.7.11
(0145) //备注:
(0146) void disptouch(void)
(0147) {
(0148) uchar r;
(0149) for(r=6;r<10;r++)
0215 E046 LDI R20,6
0216 C010 RJMP 0x0227
(0150) {
(0151) write(0xf9,r+20,0);//248/16=15,15*2=30,30-4=26,26-6=20
0217 2422 CLR R2
0218 8228 STD Y+0,R2
0219 2F24 MOV R18,R20
021A 5E2C SUBI R18,0xEC
021B EF09 LDI R16,0xF9
021C DF5D RCALL _write
(0152) send(tabx[r-6]+48);
021D EA87 LDI R24,0xA7
021E E092 LDI R25,2
021F 2FE4 MOV R30,R20
0220 27FF CLR R31
0221 0FE8 ADD R30,R24
0222 1FF9 ADC R31,R25
0223 8100 LDD R16,Z+0
0224 5D00 SUBI R16,0xD0
0225 DF4A RCALL _send
0226 9543 INC R20
0227 304A CPI R20,0xA
0228 F370 BCS 0x0217
(0153) }
(0154) for(r=13;r<17;r++)
0229 E04D LDI R20,0xD
022A C010 RJMP 0x023B
(0155) {
(0156) write(0xf9,r+13,16);//248/16=15,15*2=30,30-4=26,26-13=13
022B E180 LDI R24,0x10
022C 8388 STD Y+0,R24
022D 2F24 MOV R18,R20
022E 5F23 SUBI R18,0xF3
022F EF09 LDI R16,0xF9
0230 DF49 RCALL _write
(0157) send(taby[r-13]+48);
0231 E98C LDI R24,0x9C
0232 E092 LDI R25,2
0233 2FE4 MOV R30,R20
0234 27FF CLR R31
0235 0FE8 ADD R30,R24
0236 1FF9 ADC R31,R25
0237 8100 LDD R16,Z+0
0238 5D00 SUBI R16,0xD0
0239 DF36 RCALL _send
023A 9543 INC R20
023B 3141 CPI R20,0x11
023C F370 BCS 0x022B
023D 9621 ADIW R28,1
023E 940E0452 CALL pop_gset1
0240 9508 RET
(0158) }
(0159) }
(0160) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0161) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0162) //函数名: spi_start
(0163) //功能: SPI使能
(0164) //输入:
(0165) //输出:
(0166) //By: 李 平 2007.7.11
(0167) //备注:
(0168) void spi_start(void)
(0169) {
(0170) clk_clr;
_spi_start:
0241 98C2 CBI 0x18,2
(0171) cs_set;
0242 9AC3 SBI 0x18,3
(0172) din_set;
0243 9AC4 SBI 0x18,4
(0173) clk_set;
0244 9AC2 SBI 0x18,2
(0174) cs_clr;
0245 98C3 CBI 0x18,3
0246 9508 RET
_WriteCharTo7843:
count --> R20
num --> R16
0247 940E044F CALL push_gset1
(0175) }
(0176) /*^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ */
(0177) /*&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&&&&&&&&&&&*/
(0178) //函数名: WriteCharTo7843()
(0179) //功能: SPI写数据
(0180) //输入: 要写入7843的数据num
(0181) //输出: 无
(0182) //By: 李 平 2007.7.11
(0183) //备注:
(0184) void WriteCharTo7843(uchar num)
(0185) {
(0186) uchar count=0;
0249 2744 CLR R20
(0187) clk_clr;
024A 98C2 CBI 0x18,2
(0188) for(count=0;count<8;count++)
024B C00F RJMP 0x025B
(0189) {
(0190) if(num&0x80)
024C FF07 SBRS R16,7
024D C002 RJMP 0x0250
(0191) din_set;
024E 9AC4 SBI 0x18,4
024F C001 RJMP 0x0251
(0192) else din_clr;
0250 98C4 CBI 0x18,4
(0193) num<<=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -