📄 7920.lis
字号:
.module _7920.c
.area data(ram, con, rel)
0000 _TextLogo::
0000 .blkb 19
.area idata
0000 D2BABEA7CFD4CABEC4A3BFE9284C4344 .byte 210,186,190,167,207,212,202,190,196,163,191,233,40,'L,'C,'D
0010 4D2900 .byte 'M,41,0
.area data(ram, con, rel)
0013 .dbfile E:\_opt\___7920_serial\source\7920.c
0013 .dbsym e TextLogo _TextLogo A[19:19]c
.area text(rom, con, rel)
0000 .dbfile E:\_opt\___7920_serial\source\7920.c
0000 .dbfunc e initLCDM _initLCDM fV
.even
0000 _initLCDM::
0000 .dbline -1
0000 .dbline 55
0000 ; //本程序是7920的LM3037的液晶驱动程序
0000 ; //汉字2x9
0000 ; //ATMEGA16, 内部晶振8M
0000 ; //使用串行传输
0000 ; //本程序测试通过
0000 ;
0000 ; //绿叶子整理 -- 2005.08.30
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define LCD_DATA_PORT PORTA
0000 ; #define LCD_DATA_DDR DDRA
0000 ; #define LCD_DATA_PIN PINA
0000 ; #define LCD_DATA 0x0ff //portA out
0000 ;
0000 ; #define LCD_CONTROL_PORT PORTB
0000 ; #define LCD_CONTROL_DDR DDRB
0000 ;
0000 ; #define RS 0 //RS(CS) 可直接接VCC -- 替代
0000 ; #define RW 1 //RW(SID)
0000 ; #define E 2 //E(sclk)
0000 ; #define PSB 3 //可以直接接地 -- 替代
0000 ; #define _RES 4 //可以去掉
0000 ;
0000 ; /*--------------------------------------------------------------------------------------------------
0000 ; Public function prototypes
0000 ; --------------------------------------------------------------------------------------------------*/
0000 ; void delay_1us(void);
0000 ; void delay_1ms(void);
0000 ; void delay_nus (unsigned int n);
0000 ; void delay_nms (unsigned int n);
0000 ;
0000 ; #define SETBIT(x,y) (x|=(1<<y)) //set bit y in byte x
0000 ; #define CLRBIT(x,y) (x&=(~(1<<y))) //clear bit y in byte x
0000 ; #define CHKBIT(x,y) (x&(1<<y)) //check bit y in byte x
0000 ;
0000 ; #define uchar unsigned char // 0~255
0000 ; #define uint unsigned int // 0~65535
0000 ;
0000 ; void CheckState();
0000 ; void initLCDM(void);
0000 ; void Send(unsigned char senddata);
0000 ; void SdCmd(unsigned char scmd);
0000 ; void SdData(unsigned char DData);
0000 ; void WriteTextScreen(unsigned char *TxtData);
0000 ; void WriteTextScreen2(unsigned char *pstr);
0000 ; void WriteGraphicScreen(unsigned char *GDData);
0000 ;
0000 ; void DispSetCursor(unsigned char LineNum, unsigned char ColumnNum);
0000 ;
0000 ; unsigned char TextLogo[]={"液晶显示模块(LCDM)"};
0000 ;
0000 ; void initLCDM(void)
0000 ; {
0000 .dbline 56
0000 ; delay_nms(100);
0000 04E6 ldi R16,100
0002 10E0 ldi R17,0
0004 07D1 xcall _delay_nms
0006 .dbline 60
0006 ;
0006 ; //端口初始化
0006 ; //LCD_DATA_DDR=0xFF;
0006 ; LCD_CONTROL_DDR=0xFF;
0006 8FEF ldi R24,255
0008 87BB out 0x17,R24
000A .dbline 62
000A ;
000A ; CLRBIT(LCD_CONTROL_PORT,E);
000A C298 cbi 0x18,2
000C .dbline 63
000C ; CLRBIT(LCD_CONTROL_PORT,RW);
000C C198 cbi 0x18,1
000E .dbline 64
000E ; CLRBIT(LCD_CONTROL_PORT,RS);
000E C098 cbi 0x18,0
0010 .dbline 65
0010 ; CLRBIT(LCD_CONTROL_PORT,PSB);
0010 C398 cbi 0x18,3
0012 .dbline 70
0012 ;
0012 ; //LCD_DATA_PORT|=0x0;
0012 ; //delay_nms(1500);
0012 ;
0012 ; LCD_DATA_PORT|=0xFF;
0012 8BB3 in R24,0x1b
0014 8F6F ori R24,255
0016 8BBB out 0x1b,R24
0018 .dbline 73
0018 ;
0018 ; //SETBIT(LCD_CONTROL_PORT,_RES);
0018 ; CLRBIT(LCD_CONTROL_PORT,_RES);
0018 C498 cbi 0x18,4
001A .dbline 74
001A ; delay_nms(1);
001A 01E0 ldi R16,1
001C 10E0 ldi R17,0
001E FAD0 xcall _delay_nms
0020 .dbline 75
0020 ; SETBIT(LCD_CONTROL_PORT,_RES);
0020 C49A sbi 0x18,4
0022 .dbline 77
0022 ;
0022 ; SdCmd(0x20); // 8bit I/F, basic command, graphic off
0022 00E2 ldi R16,32
0024 26D0 xcall _SdCmd
0026 .dbline 78
0026 ; SdCmd(0x20); // 8bit I/F, basic command, graphic off
0026 00E2 ldi R16,32
0028 24D0 xcall _SdCmd
002A .dbline 79
002A ; SdCmd(0x0C); // display on
002A 0CE0 ldi R16,12
002C 22D0 xcall _SdCmd
002E .dbline 80
002E ; SdCmd(0x06); // cursor right shift
002E 06E0 ldi R16,6
0030 20D0 xcall _SdCmd
0032 .dbline 81
0032 ; SdCmd(0x01); // cursor right shift
0032 01E0 ldi R16,1
0034 1ED0 xcall _SdCmd
0036 .dbline -2
0036 L1:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
0038 .dbfunc e CheckState _CheckState fV
0038 ; dat -> <dead>
.even
0038 _CheckState::
0038 .dbline -1
0038 .dbline 89
0038 ;
0038 ; }
0038 ;
0038 ; /*-----------------------------------------------------
0038 ; 状态检查函数,判断是否处于忙状态
0038 ; -------------------------------------------------------*/
0038 ; void CheckState()
0038 ; {
0038 .dbline 91
0038 ; unsigned char dat;
0038 ; CLRBIT(LCD_CONTROL_PORT,RS); //RS=0
0038 C098 cbi 0x18,0
003A .dbline 92
003A ; SETBIT(LCD_CONTROL_PORT,RW); //RW=1
003A C19A sbi 0x18,1
003C .dbline 93
003C ; LCD_DATA_DDR=0x00; // portA as input
003C 2224 clr R2
003E 2ABA out 0x1a,R2
0040 L3:
0040 .dbline 95
0040 ; do
0040 ; {
0040 .dbline 96
0040 ; SETBIT(LCD_CONTROL_PORT,E);
0040 C29A sbi 0x18,2
0042 .dbline 97
0042 ; NOP();
0042 0000 nop
0044 .dbline 98
0044 ; CLRBIT(LCD_CONTROL_PORT,E);
0044 C298 cbi 0x18,2
0046 .dbline 99
0046 ; }
0046 L4:
0046 .dbline 100
0046 ; while (LCD_DATA_PIN&0x80);
0046 CF99 sbic 0x19,7
0048 FBCF rjmp L3
004A .dbline -2
004A L2:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym l dat 1 c
004C .dbend
004C .dbfunc e Send _Send fV
004C ; i -> R20
004C ; senddata -> R16
.even
004C _Send::
004C 0E940000 xcall push_gset1
0050 .dbline -1
0050 .dbline 104
0050 ; }
0050 ;
0050 ; void Send(unsigned char senddata)
0050 ; {
0050 .dbline 107
0050 ; unsigned char i;
0050 ;
0050 ; for(i=0;i<8;i++)
0050 4427 clr R20
0052 0AC0 xjmp L10
0054 L7:
0054 .dbline 108
0054 ; {
0054 .dbline 109
0054 ; if((senddata)&0x80)
0054 07FF sbrs R16,7
0056 02C0 rjmp L11
0058 .dbline 110
0058 ; {
0058 .dbline 112
0058 ; //D_OUT=1 ;
0058 ; SETBIT(LCD_CONTROL_PORT,RW);
0058 C19A sbi 0x18,1
005A .dbline 113
005A ; }
005A 01C0 xjmp L12
005C L11:
005C .dbline 115
005C ; else
005C ; {
005C .dbline 117
005C ; //D_OUT=0;
005C ; CLRBIT(LCD_CONTROL_PORT,RW);
005C C198 cbi 0x18,1
005E .dbline 118
005E ; }
005E L12:
005E .dbline 121
005E C29A sbi 0x18,2
0060 .dbline 122
0060 0000 nop
0062 .dbline 124
0062 C298 cbi 0x18,2
0064 .dbline 126
0064 000F lsl R16
0066 .dbline 127
0066 L8:
0066 .dbline 107
0066 4395 inc R20
0068 L10:
0068 .dbline 107
0068 4830 cpi R20,8
006A A0F3 brlo L7
006C .dbline -2
006C L6:
006C 0E940000 xcall pop_gset1
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r i 20 c
0072 .dbsym r senddata 16 c
0072 .dbend
0072 .dbfunc e SdCmd _SdCmd fV
0072 ; scmd -> R20
.even
0072 _SdCmd::
0072 0E940000 xcall push_gset1
0076 402F mov R20,R16
0078 .dbline -1
0078 .dbline 131
0078 ;
0078 ; //SCK=1;
0078 ; SETBIT(LCD_CONTROL_PORT,E);
0078 ; NOP();
0078 ; //SCK=0;
0078 ; CLRBIT(LCD_CONTROL_PORT,E);
0078 ;
0078 ; senddata<<=1;
0078 ; }
0078 ; }
0078 ;
0078 ; void SdCmd(unsigned char scmd) //send command
0078 ; {
0078 .dbline 133
0078 ; //ST7920CS=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -