📄 ds1302_main.lis
字号:
0214 DEDF xcall _writecom
0216 .dbline 62
0216 ; s_ms(1000);
0216 08EE ldi R16,1000
0218 13E0 ldi R17,3
021A A7DF xcall _s_ms
021C .dbline 63
021C ; writecom(0x01);
021C 01E0 ldi R16,1
021E D9DF xcall _writecom
0220 .dbline 64
0220 ; s_ms(1000);
0220 08EE ldi R16,1000
0222 13E0 ldi R17,3
0224 A2DF xcall _s_ms
0226 .dbline 65
0226 ; s_ms(1000);
0226 08EE ldi R16,1000
0228 13E0 ldi R17,3
022A 9FDF xcall _s_ms
022C .dbline 66
022C ; s_ms(1000);
022C 08EE ldi R16,1000
022E 13E0 ldi R17,3
0230 9CDF xcall _s_ms
0232 .dbline 67
0232 ; s_ms(1000);
0232 08EE ldi R16,1000
0234 13E0 ldi R17,3
0236 99DF xcall _s_ms
0238 .dbline 68
0238 ; s_ms(1000);
0238 08EE ldi R16,1000
023A 13E0 ldi R17,3
023C 96DF xcall _s_ms
023E .dbline 69
023E ; s_ms(1000);
023E 08EE ldi R16,1000
0240 13E0 ldi R17,3
0242 93DF xcall _s_ms
0244 .dbline 70
0244 ; s_ms(1000);
0244 08EE ldi R16,1000
0246 13E0 ldi R17,3
0248 90DF xcall _s_ms
024A .dbline 71
024A ; writecom(0x02);
024A 02E0 ldi R16,2
024C C2DF xcall _writecom
024E .dbline 72
024E ; s_ms(1000);
024E 08EE ldi R16,1000
0250 13E0 ldi R17,3
0252 8BDF xcall _s_ms
0254 .dbline 73
0254 ; writecom(0x06);
0254 06E0 ldi R16,6
0256 BDDF xcall _writecom
0258 .dbline 74
0258 ; s_ms(1000);
0258 08EE ldi R16,1000
025A 13E0 ldi R17,3
025C 86DF xcall _s_ms
025E .dbline 75
025E ; writecom(0x0c);
025E 0CE0 ldi R16,12
0260 B8DF xcall _writecom
0262 .dbline 76
0262 ; s_ms(1000);
0262 08EE ldi R16,1000
0264 13E0 ldi R17,3
0266 81DF xcall _s_ms
0268 .dbline 77
0268 ; writecom(0x38);
0268 08E3 ldi R16,56
026A B3DF xcall _writecom
026C .dbline 78
026C ; s_ms(1000);
026C 08EE ldi R16,1000
026E 13E0 ldi R17,3
0270 .dbline -2
0270 L40:
0270 .dbline 0 ; func end
0270 7CCF xjmp _s_ms
0272 .dbend
0272 .dbfunc e writedata _writedata fV
0272 ; data -> R10
.even
0272 _writedata::
0272 AA92 st -y,R10
0274 A02E mov R10,R16
0276 .dbline -1
0276 .dbline 83
0276 ; }
0276 ;
0276 ; //写数据
0276 ; void writedata(uchar data)
0276 ; {
0276 .dbline 84
0276 ; busy();
0276 82DF xcall _busy
0278 .dbline 85
0278 ; s_ms(500);
0278 04EF ldi R16,500
027A 11E0 ldi R17,1
027C 76DF xcall _s_ms
027E .dbline 86
027E ; PORTA|=(1<<RS); //RS=1
027E DD9A sbi 0x1b,5
0280 .dbline 87
0280 ; s_ms(500);
0280 04EF ldi R16,500
0282 11E0 ldi R17,1
0284 72DF xcall _s_ms
0286 .dbline 88
0286 ; PORTA&=~(1<<RW); //RW=0
0286 DE98 cbi 0x1b,6
0288 .dbline 89
0288 ; s_ms(500);
0288 04EF ldi R16,500
028A 11E0 ldi R17,1
028C 6EDF xcall _s_ms
028E .dbline 90
028E ; PORTA|=(1<<EN); //EN=1
028E DF9A sbi 0x1b,7
0290 .dbline 91
0290 ; s_ms(500);
0290 04EF ldi R16,500
0292 11E0 ldi R17,1
0294 6ADF xcall _s_ms
0296 .dbline 92
0296 ; PORTD = data; //输出数据
0296 A2BA out 0x12,R10
0298 .dbline 93
0298 ; s_ms(500);
0298 04EF ldi R16,500
029A 11E0 ldi R17,1
029C 66DF xcall _s_ms
029E .dbline 94
029E ; PORTA&=~(1<<EN); //EN=0
029E DF98 cbi 0x1b,7
02A0 .dbline 95
02A0 ; s_ms(500);
02A0 04EF ldi R16,500
02A2 11E0 ldi R17,1
02A4 62DF xcall _s_ms
02A6 .dbline -2
02A6 L41:
02A6 .dbline 0 ; func end
02A6 A990 ld R10,y+
02A8 0895 ret
02AA .dbsym r data 10 c
02AA .dbend
02AA .dbfunc e readdata _readdata fc
02AA ; temp -> R10
.even
02AA _readdata::
02AA AA92 st -y,R10
02AC .dbline -1
02AC .dbline 101
02AC ; }
02AC ;
02AC ;
02AC ; //读数据
02AC ; uchar readdata(void)
02AC ; {
02AC .dbline 103
02AC ; uchar temp;
02AC ; busy();
02AC 67DF xcall _busy
02AE .dbline 104
02AE ; s_ms(500);
02AE 04EF ldi R16,500
02B0 11E0 ldi R17,1
02B2 5BDF xcall _s_ms
02B4 .dbline 105
02B4 ; PORTA|=(1<<RS); //RS=1
02B4 DD9A sbi 0x1b,5
02B6 .dbline 106
02B6 ; s_ms(500);
02B6 04EF ldi R16,500
02B8 11E0 ldi R17,1
02BA 57DF xcall _s_ms
02BC .dbline 107
02BC ; PORTA|=(1<<RW); //RW=1
02BC DE9A sbi 0x1b,6
02BE .dbline 108
02BE ; s_ms(500);
02BE 04EF ldi R16,500
02C0 11E0 ldi R17,1
02C2 53DF xcall _s_ms
02C4 .dbline 109
02C4 ; PORTA|=(1<<EN); //EN=1
02C4 DF9A sbi 0x1b,7
02C6 .dbline 110
02C6 ; s_ms(500);
02C6 04EF ldi R16,500
02C8 11E0 ldi R17,1
02CA 4FDF xcall _s_ms
02CC .dbline 111
02CC ; DDRD=0x00; //A端口变输入
02CC 2224 clr R2
02CE 21BA out 0x11,R2
02D0 .dbline 112
02D0 ; s_ms(500);
02D0 04EF ldi R16,500
02D2 11E0 ldi R17,1
02D4 4ADF xcall _s_ms
02D6 .dbline 113
02D6 ; temp = PIND; //读A端口
02D6 A0B2 in R10,0x10
02D8 .dbline 114
02D8 ; s_ms(500);
02D8 04EF ldi R16,500
02DA 11E0 ldi R17,1
02DC 46DF xcall _s_ms
02DE .dbline 115
02DE ; DDRD=0xff; //A端口变输出
02DE 8FEF ldi R24,255
02E0 81BB out 0x11,R24
02E2 .dbline 116
02E2 ; s_ms(500);
02E2 04EF ldi R16,500
02E4 11E0 ldi R17,1
02E6 41DF xcall _s_ms
02E8 .dbline 117
02E8 ; PORTA&=~(1<<EN); //EN=0
02E8 DF98 cbi 0x1b,7
02EA .dbline 118
02EA ; s_ms(500);
02EA 04EF ldi R16,500
02EC 11E0 ldi R17,1
02EE 3DDF xcall _s_ms
02F0 .dbline 119
02F0 ; return temp;
02F0 0A2D mov R16,R10
02F2 .dbline -2
02F2 L42:
02F2 .dbline 0 ; func end
02F2 A990 ld R10,y+
02F4 0895 ret
02F6 .dbsym r temp 10 c
02F6 .dbend
02F6 .dbfunc e WriteCGRAM _WriteCGRAM fV
02F6 ; t -> R10,R11
02F6 ; i -> R20,R21
02F6 ; pBuffer -> R22,R23
02F6 ; num -> R10,R11
.even
02F6 _WriteCGRAM::
02F6 0E940000 xcall push_xgsetF00C
02FA B901 movw R22,R18
02FC 5801 movw R10,R16
02FE .dbline -1
02FE .dbline 129
02FE ; }
02FE ;
02FE ; //=================================================
02FE ; // 描述: 写LCD内部CGRAM函数
02FE ; // 入口: ‘num’要写的数据个数
02FE ; // ‘pbuffer’要写的数据的首地址
02FE ; // 出口: 无
02FE ; //================================================
02FE ; void WriteCGRAM(uint num, const uint *pBuffer)
02FE ; {
02FE .dbline 131
02FE ; uint i,t;
02FE ; writecom(0x40);
02FE 00E4 ldi R16,64
0300 68DF xcall _writecom
0302 .dbline 132
0302 ; PORTA|=(1<<RS);
0302 DD9A sbi 0x1b,5
0304 .dbline 133
0304 ; PORTA&=~(1<<RW);
0304 DE98 cbi 0x1b,6
0306 .dbline 134
0306 ; for(i=num;i!=0;i--)
0306 A501 movw R20,R10
0308 0AC0 xjmp L47
030A L44:
030A .dbline 135
030A ; {
030A .dbline 136
030A ; t = *pBuffer;
030A FB01 movw R30,R22
030C A080 ldd R10,z+0
030E B180 ldd R11,z+1
0310 .dbline 137
0310 ; PORTA|=(1<<EN);
0310 DF9A sbi 0x1b,7
0312 .dbline 138
0312 ; PORTD = t;
0312 A2BA out 0x12,R10
0314 .dbline 139
0314 ; PORTA&=~(1<<EN);
0314 DF98 cbi 0x1b,7
0316 .dbline 140
0316 ; pBuffer++;
0316 6E5F subi R22,254 ; offset = 2
0318 7F4F sbci R23,255
031A .dbline 141
031A ; }
031A L45:
031A .dbline 134
031A 4150 subi R20,1
031C 5040 sbci R21,0
031E L47:
031E .dbline 134
031E 4030 cpi R20,0
0320 4507 cpc R20,R21
0322 99F7 brne L44
0324 X10:
0324 .dbline -2
0324 L43:
0324 .dbline 0 ; func end
0324 0C940000 xjmp pop_xgsetF00C
0328 .dbsym r t 10 i
0328 .dbsym r i 20 i
0328 .dbsym r pBuffer 22 pki
0328 .dbsym r num 10 i
0328 .dbend
0328 .dbfunc e WriteMenu _WriteMenu fV
0328 ; t -> R10
0328 ; i -> R22
0328 ; pBuffer -> R20,R21
.even
0328 _WriteMenu::
0328 0E940000 xcall push_xgsetF00C
032C A801 movw R20,R16
032E .dbline -1
032E .dbline 151
032E ;
032E ; }
032E ;
032E ; //=================================================
032E ; //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
032E ; //入口:菜单数组首地址
032E ; //出口:无
032E ; //=================================================
032E ; void WriteMenu(const uchar *pBuffer)
032E ; {
032E .dbline 153
032E ; uchar i,t;
032E ; writecom(0x80); //数据地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -