📄 jhd12864.lis
字号:
.module jhd12864.c
.area text(rom, con, rel)
0000 .dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
0000 .dbfunc e delayms _delayms fI
0000 ; i -> R16,R17
.even
0000 _delayms::
0000 .dbline -1
0000 .dbline 5
0000 ; #include "jhd12864.h"
0000 ;
0000 ;
0000 ; delayms()
0000 ; { unsigned int i=0;
0000 .dbline 5
0000 0027 clr R16
0002 1127 clr R17
0004 02C0 rjmp L3
0006 L2:
0006 .dbline 7
0006 ; while(i!=1140)
0006 ; {
0006 .dbline 8
0006 ; i++;
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A .dbline 9
000A ; }
000A L3:
000A .dbline 6
000A 0437 cpi R16,116
000C E4E0 ldi R30,4
000E 1E07 cpc R17,R30
0010 D1F7 brne L2
0012 X0:
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 16 i
0014 .dbend
0014 .dbfunc e delay_1ms _delay_1ms fV
0014 ; j -> R20,R21
0014 ; t -> R10,R11
.even
0014 _delay_1ms::
0014 00D0 rcall push_xgset300C
0016 5801 movw R10,R16
0018 .dbline -1
0018 .dbline 13
0018 ; }
0018 ;
0018 ; void delay_1ms(unsigned int t)
0018 ; {
0018 .dbline 14
0018 ; unsigned int j=0;
0018 4427 clr R20
001A 5527 clr R21
001C 03C0 rjmp L7
001E L6:
001E .dbline 16
001E ; while(j<t)
001E ; {
001E .dbline 17
001E ; delayms();
001E F0DF rcall _delayms
0020 .dbline 18
0020 ; j++;
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 .dbline 19
0024 ; }
0024 L7:
0024 .dbline 15
0024 4A15 cp R20,R10
0026 5B05 cpc R21,R11
0028 D0F3 brlo L6
002A X1:
002A .dbline -2
002A L5:
002A .dbline 0 ; func end
002A 00C0 rjmp pop_xgset300C
002C .dbsym r j 20 i
002C .dbsym r t 10 i
002C .dbend
002C .dbfunc e W_1byte _W_1byte fV
002C ; H_data -> R22,R23
002C ; S_ID -> R10,R11
002C ; L_data -> R20,R21
002C ; W_data -> R12
002C ; RS -> R14
002C ; RW -> R20
.even
002C _W_1byte::
002C 00D0 rcall push_xgsetF0FC
002E E22E mov R14,R18
0030 402F mov R20,R16
0032 CA84 ldd R12,y+10
0034 .dbline -1
0034 .dbline 39
0034 ; }
0034 ;
0034 ;
0034 ;
0034 ;
0034 ; /*******************************************************************
0034 ; 函 数 名:W_1byte
0034 ; 入口参数:RW、RS、W_data
0034 ; 出口参数:无
0034 ; 建立日期:2007年3月3日
0034 ; 修改日期:
0034 ; 函数作用:写一个字节的数据到12864液晶,包括指令和数据
0034 ; 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
0034 ; (一般RW都设为0,即只向液晶写数据,不读数据)
0034 ; RS=1,写入的是数据;RS=0,写入的是指令;
0034 ; 一般模式:RW=0,RS=1;写数据
0034 ; RW=0,RS=0;写指令
0034 ; ********************************************************************/
0034 ; void W_1byte(uchar RW, uchar RS, uchar W_data)
0034 ; {
0034 .dbline 40
0034 ; uint H_data,L_data,S_ID = 0xf8; //11111RWRS0
0034 88EF ldi R24,248
0036 90E0 ldi R25,0
0038 5C01 movw R10,R24
003A .dbline 41
003A ; if(RW == 0)
003A 4423 tst R20
003C 19F4 brne L10
003E X2:
003E .dbline 42
003E ; {
003E .dbline 43
003E ; S_ID &=~ 0x04;
003E 8B7F andi R24,251
0040 5C01 movw R10,R24
0042 .dbline 44
0042 ; }
0042 03C0 rjmp L11
0044 L10:
0044 .dbline 46
0044 ; else //if(RW==1) ????
0044 ; {
0044 .dbline 47
0044 ; S_ID |= 0X04;
0044 C501 movw R24,R10
0046 8460 ori R24,4
0048 5C01 movw R10,R24
004A .dbline 48
004A ; }
004A L11:
004A .dbline 49
004A ; if(RS == 0)
004A EE20 tst R14
004C 21F4 brne L12
004E X3:
004E .dbline 50
004E ; {
004E .dbline 51
004E ; S_ID &=~ 0x02;
004E C501 movw R24,R10
0050 8D7F andi R24,253
0052 5C01 movw R10,R24
0054 .dbline 52
0054 ; }
0054 03C0 rjmp L13
0056 L12:
0056 .dbline 54
0056 ; else //if(RS==1) ?????
0056 ; {
0056 .dbline 55
0056 ; S_ID |= 0X02;
0056 C501 movw R24,R10
0058 8260 ori R24,2
005A 5C01 movw R10,R24
005C .dbline 56
005C ; }
005C L13:
005C .dbline 57
005C ; H_data = W_data;
005C 6C2D mov R22,R12
005E 7727 clr R23
0060 .dbline 58
0060 ; H_data &= 0xf0; //屏蔽低4位的数据
0060 607F andi R22,240
0062 7070 andi R23,0
0064 .dbline 59
0064 ; L_data = W_data; //xxxx0000格式
0064 4C2D mov R20,R12
0066 5527 clr R21
0068 .dbline 60
0068 ; L_data &= 0x0f; //屏蔽高4位的数据
0068 4F70 andi R20,15
006A 5070 andi R21,0
006C .dbline 61
006C ; L_data <<= 4; //xxxx0000格式
006C 440F lsl R20
006E 551F rol R21
0070 440F lsl R20
0072 551F rol R21
0074 440F lsl R20
0076 551F rol R21
0078 440F lsl R20
007A 551F rol R21
007C .dbline 62
007C ; Set_CS();
007C AD9A sbi 0x15,5
007E .dbline 63
007E ; Write_8bits(S_ID); //发送S_ID
007E 8501 movw R16,R10
0080 06D0 rcall _Write_8bits
0082 .dbline 64
0082 ; Write_8bits(H_data); //发送H_data
0082 8B01 movw R16,R22
0084 04D0 rcall _Write_8bits
0086 .dbline 65
0086 ; Write_8bits(L_data); //发送L_data
0086 8A01 movw R16,R20
0088 02D0 rcall _Write_8bits
008A .dbline 68
008A ; //Write_8bits(W_data);
008A ;
008A ; Clr_CS();
008A AD98 cbi 0x15,5
008C .dbline -2
008C L9:
008C .dbline 0 ; func end
008C 00C0 rjmp pop_xgsetF0FC
008E .dbsym r H_data 22 i
008E .dbsym r S_ID 10 i
008E .dbsym r L_data 20 i
008E .dbsym r W_data 12 c
008E .dbsym r RS 14 c
008E .dbsym r RW 20 c
008E .dbend
008E .dbfunc e Write_8bits _Write_8bits fV
008E ; Temp_data -> R12,R13
008E ; i -> R20,R21
008E ; W_bits -> R10,R11
.even
008E _Write_8bits::
008E 00D0 rcall push_xgset303C
0090 5801 movw R10,R16
0092 .dbline -1
0092 .dbline 82
0092 ; }
0092 ;
0092 ;
0092 ; /********************************************************************
0092 ; 函 数 名:Write_8bits
0092 ; 入口参数:W_bits
0092 ; 出口参数:无
0092 ; 建立日期:2007年3月3日
0092 ; 修改日期:
0092 ; 函数作用:负责串行输出8个bit位
0092 ; 说 明:
0092 ; ********************************************************************/
0092 ; void Write_8bits(uint W_bits)
0092 ; {
0092 .dbline 85
0092 ; uint i,Temp_data;
0092 ; // feed_dog;
0092 ; for(i=0; i<8; i++)
0092 4427 clr R20
0094 5527 clr R21
0096 13C0 rjmp L18
0098 L15:
0098 .dbline 86
0098 ; {
0098 .dbline 87
0098 ; Temp_data = W_bits;
0098 6501 movw R12,R10
009A .dbline 88
009A ; Temp_data <<= i;
009A 9A01 movw R18,R20
009C 8601 movw R16,R12
009E 00D0 rcall lsl16
00A0 6801 movw R12,R16
00A2 .dbline 89
00A2 ; if((Temp_data&0x80)==0)
00A2 07FD sbrc R16,7
00A4 02C0 rjmp L19
00A6 X4:
00A6 .dbline 90
00A6 ; {
00A6 .dbline 91
00A6 ; Clr_SID();
00A6 AE98 cbi 0x15,6
00A8 .dbline 92
00A8 ; }
00A8 01C0 rjmp L20
00AA L19:
00AA .dbline 94
00AA ; else
00AA ; {
00AA .dbline 95
00AA ; Set_SID();
00AA AE9A sbi 0x15,6
00AC .dbline 96
00AC ; }
00AC L20:
00AC .dbline 97
00AC ; asm("nop");
00AC 0000 nop
00AE .dbline 98
00AE ; Set_SCLK();
00AE AF9A sbi 0x15,7
00B0 .dbline 99
00B0 ; asm("nop");
00B0 0000 nop
00B2 .dbline 100
00B2 ; asm("nop");
00B2 0000 nop
00B4 .dbline 101
00B4 ; Clr_SCLK();
00B4 AF98 cbi 0x15,7
00B6 .dbline 102
00B6 ; asm("nop");
00B6 0000 nop
00B8 .dbline 103
00B8 ; Clr_SID();
00B8 AE98 cbi 0x15,6
00BA .dbline 104
00BA ; }
00BA L16:
00BA .dbline 85
00BA 4F5F subi R20,255 ; offset = 1
00BC 5F4F sbci R21,255
00BE L18:
00BE .dbline 85
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -