📄 ds1302.lst
字号:
(0012) void delay_1ms(unsigned int t)
(0013) {
(0014) unsigned int j=0;
41B 2744 CLR R20
41C 2755 CLR R21
41D C003 RJMP 0x0421
(0015) while(j<t)
(0016) {
(0017) delayms();
41E DFF0 RCALL _delayms
(0018) j++;
41F 5F4F SUBI R20,0xFF
420 4F5F SBCI R21,0xFF
421 154A CP R20,R10
422 055B CPC R21,R11
423 F3D0 BCS 0x041E
424 C292 RJMP pop_xgset300C
_W_1byte:
H_data --> R22
S_ID --> R10
L_data --> R20
W_data --> R12
RS --> R14
RW --> R20
425 D281 RCALL push_xgsetF0FC
426 2EE2 MOV R14,R18
427 2F40 MOV R20,R16
428 84CA LDD R12,Y+10
(0019) }
(0020) }
(0021)
(0022)
(0023)
(0024)
(0025) /*******************************************************************
(0026) 函 数 名:W_1byte
(0027) 入口参数:RW、RS、W_data
(0028) 出口参数:无
(0029) 建立日期:2007年3月3日
(0030) 修改日期:
(0031) 函数作用:写一个字节的数据到12864液晶,包括指令和数据
(0032) 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
(0033) (一般RW都设为0,即只向液晶写数据,不读数据)
(0034) RS=1,写入的是数据;RS=0,写入的是指令;
(0035) 一般模式:RW=0,RS=1;写数据
(0036) RW=0,RS=0;写指令
(0037) ********************************************************************/
(0038) void W_1byte(uchar RW, uchar RS, uchar W_data)
(0039) {
(0040) uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
429 EF88 LDI R24,0xF8
42A E090 LDI R25,0
42B 015C MOVW R10,R24
(0041) if(RW == 0)
42C 2344 TST R20
42D F419 BNE 0x0431
(0042) {
(0043) S_ID &=~ 0x04;
42E 7F8B ANDI R24,0xFB
42F 015C MOVW R10,R24
(0044) }
430 C003 RJMP 0x0434
(0045) else //if(RW==1) ????
(0046) {
(0047) S_ID |= 0X04;
431 01C5 MOVW R24,R10
432 6084 ORI R24,4
433 015C MOVW R10,R24
(0048) }
(0049) if(RS == 0)
434 20EE TST R14
435 F421 BNE 0x043A
(0050) {
(0051) S_ID &=~ 0x02;
436 01C5 MOVW R24,R10
437 7F8D ANDI R24,0xFD
438 015C MOVW R10,R24
(0052) }
439 C003 RJMP 0x043D
(0053) else //if(RS==1) ?????
(0054) {
(0055) S_ID |= 0X02;
43A 01C5 MOVW R24,R10
43B 6082 ORI R24,2
43C 015C MOVW R10,R24
(0056) }
(0057) H_data = W_data;
43D 2D6C MOV R22,R12
43E 2777 CLR R23
(0058) H_data &= 0xf0; //屏蔽低4位的数据
43F 7F60 ANDI R22,0xF0
440 7070 ANDI R23,0
(0059) L_data = W_data; //xxxx0000格式
441 2D4C MOV R20,R12
442 2755 CLR R21
(0060) L_data &= 0x0f; //屏蔽高4位的数据
443 704F ANDI R20,0xF
444 7050 ANDI R21,0
(0061) L_data <<= 4; //xxxx0000格式
445 0F44 LSL R20
446 1F55 ROL R21
447 0F44 LSL R20
448 1F55 ROL R21
449 0F44 LSL R20
44A 1F55 ROL R21
44B 0F44 LSL R20
44C 1F55 ROL R21
(0062) Set_CS();
44D 9AAD SBI 0x15,5
(0063) Write_8bits(S_ID); //发送S_ID
44E 0185 MOVW R16,R10
44F D006 RCALL _Write_8bits
(0064) Write_8bits(H_data); //发送H_data
450 018B MOVW R16,R22
451 D004 RCALL _Write_8bits
(0065) Write_8bits(L_data); //发送L_data
452 018A MOVW R16,R20
453 D002 RCALL _Write_8bits
(0066) //Write_8bits(W_data);
(0067)
(0068) Clr_CS();
454 98AD CBI 0x15,5
455 C246 RJMP pop_xgsetF0FC
_Write_8bits:
Temp_data --> R12
i --> R20
W_bits --> R10
456 D273 RCALL push_xgset303C
457 0158 MOVW R10,R16
(0069) }
(0070)
(0071)
(0072) /********************************************************************
(0073) 函 数 名:Write_8bits
(0074) 入口参数:W_bits
(0075) 出口参数:无
(0076) 建立日期:2007年3月3日
(0077) 修改日期:
(0078) 函数作用:负责串行输出8个bit位
(0079) 说 明:
(0080) ********************************************************************/
(0081) void Write_8bits(uint W_bits)
(0082) {
(0083) uint i,Temp_data;
(0084) // feed_dog;
(0085) for(i=0; i<8; i++)
458 2744 CLR R20
459 2755 CLR R21
45A C013 RJMP 0x046E
(0086) {
(0087) Temp_data = W_bits;
45B 0165 MOVW R12,R10
(0088) Temp_data <<= i;
45C 019A MOVW R18,R20
45D 0186 MOVW R16,R12
45E D28B RCALL lsl16
45F 0168 MOVW R12,R16
(0089) if((Temp_data&0x80)==0)
460 FD07 SBRC R16,7
461 C002 RJMP 0x0464
(0090) {
(0091) Clr_SID();
462 98AE CBI 0x15,6
(0092) }
463 C001 RJMP 0x0465
(0093) else
(0094) {
(0095) Set_SID();
464 9AAE SBI 0x15,6
(0096) }
(0097) asm("nop");
465 0000 NOP
(0098) Set_SCLK();
466 9AAF SBI 0x15,7
(0099) asm("nop");
467 0000 NOP
(0100) asm("nop");
468 0000 NOP
(0101) Clr_SCLK();
469 98AF CBI 0x15,7
(0102) asm("nop");
46A 0000 NOP
(0103) Clr_SID();
46B 98AE CBI 0x15,6
46C 5F4F SUBI R20,0xFF
46D 4F5F SBCI R21,0xFF
46E 3048 CPI R20,0x8
46F E0E0 LDI R30,0
470 075E CPC R21,R30
471 F348 BCS 0x045B
472 C25E RJMP pop_xgset303C
_Char_Set_XY:
p --> R10
y --> R22
x --> R20
473 D248 RCALL push_xgsetF00C
474 2F62 MOV R22,R18
475 2F40 MOV R20,R16
476 9721 SBIW R28,1
477 80AF LDD R10,Y+7
478 84B8 LDD R11,Y+8
(0104) }
(0105) }
(0106)
(0107) //===================================================================*/
(0108) /********************************************************************
(0109) 函 数 名:Char_Set_XY
(0110) 入口参数:x,y,*p
(0111) 出口参数:无
(0112) 建立日期:2007年8月26日
(0113) 修改日期:
(0114) 函数作用:指定位置显示字符串
(0115) 说 明:
(0116) ********************************************************************/
(0117) void Char_Set_XY(uchar x, uchar y, uchar *p)
(0118) {
(0119) if(y == 0)
479 2366 TST R22
47A F431 BNE 0x0481
(0120) {
(0121) W_1byte(0,0,(0x80+x));
47B 2F84 MOV R24,R20
47C 5880 SUBI R24,0x80
47D 8388 STD Y+0,R24
47E 2722 CLR R18
47F 2700 CLR R16
480 DFA4 RCALL _W_1byte
(0122) }
(0123) if(y == 1)
481 3061 CPI R22,1
482 F431 BNE 0x0489
(0124) {
(0125) W_1byte(0,0,(0x90+x));
483 2F84 MOV R24,R20
484 5780 SUBI R24,0x70
485 8388 STD Y+0,R24
486 2722 CLR R18
487 2700 CLR R16
488 DF9C RCALL _W_1byte
(0126) }
(0127) if(y == 2)
489 3062 CPI R22,2
48A F431 BNE 0x0491
(0128) {
(0129) W_1byte(0,0,(0x88+x));
48B 2F84 MOV R24,R20
48C 5788 SUBI R24,0x78
48D 8388 STD Y+0,R24
48E 2722 CLR R18
48F 2700 CLR R16
490 DF94 RCALL _W_1byte
(0130) }
(0131) if(y == 3)
491 3063 CPI R22,3
492 F471 BNE 0x04A1
(0132) {
(0133) W_1byte(0,0,(0x98+x));
493 2F84 MOV R24,R20
494 5688 SUBI R24,0x68
495 8388 STD Y+0,R24
496 2722 CLR R18
497 2700 CLR R16
498 DF8C RCALL _W_1byte
(0134) }
499 C007 RJMP 0x04A1
(0135) while(*p != 0)
(0136) {
(0137) W_1byte(0,1,*p++);
49A 01F5 MOVW R30,R10
49B 9021 LD R2,Z+
49C 015F MOVW R10,R30
49D 8228 STD Y+0,R2
49E E021 LDI R18,1
49F 2700 CLR R16
4A0 DF84 RCALL _W_1byte
4A1 01F5 MOVW R30,R10
4A2 8020 LDD R2,Z+0
4A3 2022 TST R2
4A4 F7A9 BNE 0x049A
4A5 9621 ADIW R28,1
4A6 C21C RJMP pop_xgsetF00C
_Char_Set_XY_BYTE:
k --> R20
p --> R10
y --> R12
x --> R22
4A7 D230 RCALL push_xgsetF03C
4A8 2EC2 MOV R12,R18
4A9 2F60 MOV R22,R16
4AA 9721 SBIW R28,1
4AB 84A9 LDD R10,Y+9
4AC 854B LDD R20,Y+11
(0138) }
(0139) }
(0140) //===================================================================*/
(0141)
(0142)
(0143) //===================================================================*/
(0144) /********************************************************************
(0145) 函 数 名:Char_Set_XY_BYTE
(0146) 入口参数:x,y,*p
(0147) 出口参数:无
(0148) 建立日期:2007年8月26日
(0149) 修改日期:
(0150) 函数作用:指定位置显示一个字符
(0151) 说 明:
(0152) ********************************************************************/
(0153) void Char_Set_XY_BYTE(uchar x, uchar y, uchar p,uchar k )
(0154) {
(0155) if(y == 0)//0x80+x
4AD 20CC TST R12
4AE F431 BNE 0x04B5
(0156) {
(0157) W_1byte(0,0,(0x80+x));
4AF 2F86 MOV R24,R22
4B0 5880 SUBI R24,0x80
4B1 8388 STD Y+0,R24
4B2 2722 CLR R18
4B3 2700 CLR R16
4B4 DF70 RCALL _W_1byte
(0158) }
(0159) if(y == 1)
4B5 2D8C MOV R24,R12
4B6 3081 CPI R24,1
4B7 F431 BNE 0x04BE
(0160) {
(0161) W_1byte(0,0,(0x90+x));
4B8 2F86 MOV R24,R22
4B9 5780 SUBI R24,0x70
4BA 8388 STD Y+0,R24
4BB 2722 CLR R18
4BC 2700 CLR R16
4BD DF67 RCALL _W_1byte
(0162) }
(0163) if(y == 2)//0x88+x
4BE 2D8C MOV R24,R12
4BF 3082 CPI R24,2
4C0 F431 BNE 0x04C7
(0164) {
(0165) W_1byte(0,0,(0x88+x));
4C1 2F86 MOV R24,R22
4C2 5788 SUBI R24,0x78
4C3 8388 STD Y+0,R24
4C4 2722 CLR R18
4C5 2700 CLR R16
4C6 DF5E RCALL _W_1byte
(0166) }
(0167) if(y == 3)
4C7 2D8C MOV R24,R12
4C8 3083 CPI R24,3
4C9 F431 BNE 0x04D0
(0168) {
(0169) W_1byte(0,0,(0x98+x));
4CA 2F86 MOV R24,R22
4CB 5688 SUBI R24,0x68
4CC 8388 STD Y+0,R24
4CD 2722 CLR R18
4CE 2700 CLR R16
4CF DF55 RCALL _W_1byte
(0170) }
(0171)
(0172) if(k==1)
4D0 3041 CPI R20,1
4D1 F421 BNE 0x04D6
(0173) {
(0174) W_1byte(0,1,p);
4D2 82A8 STD Y+0,R10
4D3 E021 LDI R18,1
4D4 2700 CLR R16
4D5 DF4F RCALL _W_1byte
(0175)
(0176) }//W_1byte(0,1,p);
(0177) if(k==2)
4D6 3042 CPI R20,2
4D7 F449 BNE 0x04E1
(0178) {
(0179) W_1byte(0,1,0x20);
4D8 E280 LDI R24,0x20
4D9 8388 STD Y+0,R24
4DA E021 LDI R18,1
4DB 2700 CLR R16
4DC DF48 RCALL _W_1byte
(0180)
(0181) W_1byte(0,1,p);
4DD 82A8 STD Y+0,R10
4DE E021 LDI R18,1
4DF 2700 CLR R16
4E0 DF44 RCALL _W_1byte
(0182) }
4E1 9621 ADIW R28,1
4E2 C1FE RJMP pop_xgsetF03C
_Set_Draw:
4E3 9721 SBIW R28,1
(0183)
(0184)
(0185) }
(0186) //===================================================================*/
(0187)
(0188)
(0189)
(0190) /********************************************************************
(0191) 函 数 名:Set_Draw(
(0192) 入口参数:无
(0193) 出口参数:无
(0194) 建立日期:2007年8月26日
(0195) 修改日期:
(0196) 函数作用:反白前必须调用此函数
(0197) 说 明:
(0198) ********************************************************************/
(0199) void Set_Draw(void)
(0200) {
(0201) //W_1byte(0,0,0x01); //清屏
(0202) delay_1ms(20); //延时
4E4 E104 LDI R16,0x14
4E5 E010 LDI R17,0
4E6 DF32 RCALL _delay_1ms
(0203) //W_1byte(0,0,0x34); //8BIT控制界面,扩充指令集,,绘图显示OFF
(0204) W_1byte(0,0,0x36);
4E7 E386 LDI R24,0x36
4E8 8388 STD Y+0,R24
4E9 2722 CLR R18
4EA 2700 CLR R16
4EB DF39 RCALL _W_1byte
(0205) delay_1ms(20); //延时
4EC E104 LDI R16,0x14
4ED E010 LDI R17,0
4EE DF2A RCALL _delay_1ms
4EF 9621 ADIW R28,1
4F0 9508 RET
_Set_Char:
4F1 9721 SBIW R28,1
(0206) }
(0207)
(0208)
(0209)
(0210) /********************************************************************
(0211) 函 数 名:Set_Char(
(0212) 入口参数:无
(0213) 出口参数:无
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -