?? lcddrive.lis
字號:
.module LCDDrive.C
.area text(rom, con, rel)
0000 .dbfile D:\學習\AVRpro\Mega8程序\TestADC\LCDDrive.C
.area lit(rom, con, rel)
0000 _CharMap::
0000 8081 .byte 128,129
0002 8283 .byte 130,131
0004 8485 .byte 132,133
0006 8687 .byte 134,135
0008 9091 .byte 144,145
000A 9293 .byte 146,147
000C 9495 .byte 148,149
000E 9697 .byte 150,151
0010 8889 .byte 136,137
0012 8A8B .byte 138,139
0014 8C8D .byte 140,141
0016 8E8F .byte 142,143
0018 9899 .byte 152,153
001A 9A9B .byte 154,155
001C 9C9D .byte 156,157
001E 9E9F .byte 158,159
0020 .dbfile D:\學習\AVRpro\Mega8程序\TestADC\FontModel.h
0020 .dbsym e CharMap _CharMap A[32:4:8]kc
.area text(rom, con, rel)
0000 .dbfile D:\學習\AVRpro\Mega8程序\TestADC\FontModel.h
0000 .dbfile D:\學習\AVRpro\Mega8程序\TestADC\LCDDrive.C
0000 .dbfunc e Delay_1ms _Delay_1ms fV
0000 ; j -> R16,R17
.even
0000 _Delay_1ms::
0000 .dbline -1
0000 .dbline 22
0000 ; //*********************************************
0000 ; //MCU:ATMEL AVR MEGA8 ,晶振頻率:8MHz,頻率越高,播放Mp3越流暢
0000 ; //LCD:128*64
0000 ; //LCD型號:FYD12864-0402B
0000 ; //制作人:平頂山工學院計算機系,郭猛
0000 ; //*********************************************
0000 ; # include "iom8v.h"
0000 ; # include "macros.h"
0000 ; #include <math.h>
0000 ; #include "FontModel.h"
0000 ; #include "LCDFun.h"
0000 ;
0000 ; //LCD驅動用到的變量:
0000 ; uchar LCD_COM; //LCD控制命令字
0000 ; uchar LCD_DAT; //LCD數據
0000 ; //繪圖方式下的坐標:
0000 ; uchar AC_X; //X坐標
0000 ; uchar AC_Y; //Y坐標
0000 ;
0000 ; //延時1ms
0000 ; void Delay_1ms(void)
0000 ; {
0000 .dbline 24
0000 ; unsigned int j;
0000 ; for(j=1;j<(unsigned int)(XTAL*143-2);j++) NOP();
0000 01E0 ldi R16,1
0002 10E0 ldi R17,0
0004 03C0 rjmp L5
0006 L2:
0006 .dbline 24
0006 0000 nop
0008 L3:
0008 .dbline 24
0008 0F5F subi R16,255 ; offset = 1
000A 1F4F sbci R17,255
000C L5:
000C .dbline 24
000C 86E7 ldi R24,1142
000E 94E0 ldi R25,4
0010 0817 cp R16,R24
0012 1907 cpc R17,R25
0014 C0F3 brlo L2
0016 X0:
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbsym r j 16 i
0018 .dbend
0018 .dbfunc e Delay _Delay fV
0018 ; i -> R10
0018 ; j -> R20
0018 ; n -> R12,R13
.even
0018 _Delay::
0018 00D0 rcall push_xgset303C
001A 6801 movw R12,R16
001C .dbline -1
001C .dbline 29
001C ; }
001C ; /*******************************************延時子程序**********************************************/
001C ; ///////////////////n的取值最好不要超過500!!!
001C ; void Delay(unsigned int n)
001C ; {
001C .dbline 31
001C ; uchar i,j;
001C ; for(i=0;i<(uchar)(n/100);i++)
001C AA24 clr R10
001E 07C0 rjmp L10
0020 L7:
0020 .dbline 32
0020 ; for(j=0;j<100;j++) Delay_1ms(); //100mS
0020 4427 clr R20
0022 02C0 rjmp L14
0024 L11:
0024 .dbline 32
0024 EDDF rcall _Delay_1ms
0026 L12:
0026 .dbline 32
0026 4395 inc R20
0028 L14:
0028 .dbline 32
0028 4436 cpi R20,100
002A E0F3 brlo L11
002C X1:
002C L8:
002C .dbline 31
002C A394 inc R10
002E L10:
002E .dbline 31
002E 24E6 ldi R18,100
0030 30E0 ldi R19,0
0032 8601 movw R16,R12
0034 00D0 rcall div16u
0036 A016 cp R10,R16
0038 98F3 brlo L7
003A X2:
003A .dbline -2
003A L6:
003A .dbline 0 ; func end
003A 00C0 rjmp pop_xgset303C
003C .dbsym r i 10 c
003C .dbsym r j 20 c
003C .dbsym r n 12 i
003C .dbend
003C .dbfunc e LCD_AK_Control _LCD_AK_Control fV
003C ; OnOff -> R16
.even
003C _LCD_AK_Control::
003C .dbline -1
003C .dbline 37
003C ; }
003C ;
003C ; //*************************************LCD背光控制***************************************
003C ; void LCD_AK_Control(uchar OnOff) //On0FF=1,背光顯示開;
003C ; {
003C .dbline 38
003C ; if(OnOff) CLRPORT(LCD_AK); else SETPORT(LCD_AK);
003C 0023 tst R16
003E 11F0 breq L16
0040 X3:
0040 .dbline 38
0040 9398 cbi 0x12,3
0042 01C0 rjmp L17
0044 L16:
0044 .dbline 38
0044 939A sbi 0x12,3
0046 L17:
0046 .dbline -2
0046 L15:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbsym r OnOff 16 c
0048 .dbend
0048 .dbfunc e SendToSID _SendToSID fV
0048 ; bitcode -> R20
0048 ; i -> R10
0048 ; dat -> R18
0048 ; bitNum -> R16
.even
0048 _SendToSID::
0048 AA92 st -y,R10
004A 4A93 st -y,R20
004C .dbline -1
004C .dbline 42
004C ; }
004C ;
004C ; void SendToSID(unsigned char bitNum, unsigned char dat)//向串行數據線發送指定位數一個數據
004C ; {
004C .dbline 44
004C ; unsigned char i,bitcode;
004C ; for(i=0;i<bitNum;i++)
004C AA24 clr R10
004E 0BC0 rjmp L22
0050 L19:
0050 .dbline 45
0050 ; {
0050 .dbline 46
0050 ; bitcode=dat & 0x80;
0050 422F mov R20,R18
0052 4078 andi R20,128
0054 .dbline 47
0054 ; if(bitcode!=0) SETPORT(SID); else CLRPORT(SID); //SID = dat & 0x80;
0054 11F0 breq L23
0056 X4:
0056 .dbline 47
0056 969A sbi 0x12,6
0058 01C0 rjmp L24
005A L23:
005A .dbline 47
005A 9698 cbi 0x12,6
005C L24:
005C .dbline 48
005C ; dat = dat << 1;
005C 220F lsl R18
005E .dbline 49
005E ; CLRPORT(SCLK); //SCLK = 0;
005E 9798 cbi 0x12,7
0060 .dbline 50
0060 ; SETPORT(SCLK); //SCLK = 1;
0060 979A sbi 0x12,7
0062 .dbline 51
0062 ; CLRPORT(SCLK); //SCLK = 0;
0062 9798 cbi 0x12,7
0064 .dbline 52
0064 ; }
0064 L20:
0064 .dbline 44
0064 A394 inc R10
0066 L22:
0066 .dbline 44
0066 A016 cp R10,R16
0068 98F3 brlo L19
006A X5:
006A .dbline -2
006A L18:
006A .dbline 0 ; func end
006A 4991 ld R20,y+
006C A990 ld R10,y+
006E 0895 ret
0070 .dbsym r bitcode 20 c
0070 .dbsym r i 10 c
0070 .dbsym r dat 18 c
0070 .dbsym r bitNum 16 c
0070 .dbend
0070 .dbfunc e Write_LCD_Com _Write_LCD_Com fV
0070 ; SynCode -> R20
.even
0070 _Write_LCD_Com::
0070 4A93 st -y,R20
0072 .dbline -1
0072 .dbline 57
0072 ; }
0072 ;
0072 ; //*************************************寫入LCD控制字******************************
0072 ; void Write_LCD_Com(void) //對LCD寫入控制命令
0072 ; {
0072 .dbline 60
0072 ; // SynCode為同步碼
0072 ; unsigned char SynCode;
0072 ; CLRPORT(CS); //CS=0;
0072 9598 cbi 0x12,5
0074 .dbline 61
0074 ; SETPORT(CS); //CS=1;
0074 959A sbi 0x12,5
0076 .dbline 63
0076 ;
0076 ; SynCode = 0xFF; //同步碼
0076 4FEF ldi R20,255
0078 .dbline 64
0078 ; SendToSID(5,SynCode);
0078 242F mov R18,R20
007A 05E0 ldi R16,5
007C E5DF rcall _SendToSID
007E .dbline 66
007E ;
007E ; SynCode = 0x00; //寫入代碼RW,RS,0,3位代碼
007E 4427 clr R20
0080 .dbline 67
0080 ; SendToSID(3,SynCode);
0080 242F mov R18,R20
0082 03E0 ldi R16,3
0084 E1DF rcall _SendToSID
0086 .dbline 69
0086 ;
0086 ; SynCode = LCD_COM & 0xF0; //寫入代碼COM數據的高四位 要發送的數據格式是XXXX0000
0086 40910300 lds R20,_LCD_COM
008A 407F andi R20,240
008C .dbline 70
008C ; SendToSID(8,SynCode);
008C 242F mov R18,R20
008E 08E0 ldi R16,8
0090 DBDF rcall _SendToSID
0092 .dbline 72
0092 ;
0092 ; SynCode = LCD_COM & 0x0F; //寫入代碼COM數據的低四位 0000XXXX
0092 40910300 lds R20,_LCD_COM
0096 4F70 andi R20,15
0098 .dbline 73
0098 ; SynCode = SynCode<<4; //要發送的數據格式是XXXX0000
0098 842F mov R24,R20
009A 8F70 andi R24,#0x0F
009C 8295 swap R24
009E 482F mov R20,R24
00A0 .dbline 74
00A0 ; SendToSID(8,SynCode);
00A0 282F mov R18,R24
00A2 08E0 ldi R16,8
00A4 D1DF rcall _SendToSID
00A6 .dbline 75
00A6 ; Delay_1ms() ; //必要的延時
00A6 ACDF rcall _Delay_1ms
00A8 .dbline -2
00A8 L25:
00A8 .dbline 0 ; func end
00A8 4991 ld R20,y+
00AA 0895 ret
00AC .dbsym r SynCode 20 c
00AC .dbend
00AC .dbfunc e Write_LCD_Data _Write_LCD_Data fV
00AC ; bitcode -> R10
00AC ; iSynCode -> R22
00AC ; SynCode -> R20
.even
00AC _Write_LCD_Data::
00AC 00D0 rcall push_xgsetF00C
00AE .dbline -1
00AE .dbline 80
00AE ; }
00AE ;
00AE ; //*************************************寫入LCD數據**********************************
00AE ; void Write_LCD_Data(void) //對LCD寫入8位數據
00AE ; {
00AE .dbline 84
00AE ; // iSynCode為同步碼計數器,同步碼為5位, SynCode為同步碼
00AE ; unsigned char iSynCode,SynCode;
00AE ; uchar bitcode;
00AE ; CLRPORT(CS); //CS=0;
00AE 9598 cbi 0x12,5
00B0 .dbline 85
00B0 ; SETPORT(CS); //CS=1;
00B0 959A sbi 0x12,5
00B2 .dbline 87
00B2 ;
00B2 ; SynCode = 0xFF; //同步碼
00B2 4FEF ldi R20,255
00B4 .dbline 88
00B4 ; SendToSID(5,SynCode);
00B4 242F mov R18,R20
00B6 05E0 ldi R16,5
00B8 C7DF rcall _SendToSID
00BA .dbline 89
00BA ; SynCode = 0x40; //寫入代碼RW,RS,0,3位代碼
00BA 40E4 ldi R20,64
00BC .dbline 90
00BC ; SendToSID(3,SynCode);
00BC 242F mov R18,R20
00BE 03E0 ldi R16,3
00C0 C3DF rcall _SendToSID
00C2 .dbline 92
00C2 ;
00C2 ; SynCode = LCD_DAT & 0xF0; //寫入代碼COM數據的高四位 要發送的數據格式是XXXX0000
00C2 40910200 lds R20,_LCD_DAT
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -