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

📄 ocmj815b.lst

📁 OCMJ815触摸屏使用范例
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -