⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7920.lis

📁 7920中文液晶显示屏 程序一般 7920的优点是有个汉字库
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -