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

📄 dm12864m串行.lis

📁 EEPROM读写程序: 先向EEPROM写入一幅图片数据
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module dm12864m串行.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\学习专区\AVR专区\个人创作区\AVR单片机开发平台\EEPROM读写演示程序\dm12864m串行.c
 0000                   .dbfunc e dm12864_inputbyte _dm12864_inputbyte fV
 0000           ;            mid -> R20
 0000           ;              i -> R22
 0000           ;           comm -> R16
                        .even
 0000           _dm12864_inputbyte::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 33
 0004           ; /****************************************************************************************
 0004           ;            LCM(DM12864M-带字库,ST7920控制芯片)显示程序   
 0004           ;                                                               
 0004           ;              程序功能:该程序是用AVR来控制对DM12864M
 0004           ;                                  读写信号等的操作.
 0004           ;              硬件连接:采用串行方式显示,分配PA.0,PA.1,PA.2
 0004           ;                                  三个I/O口分别作为LCM片选CS,数据SID,时钟信
 0004           ;                                          号CLK的控制。PA3置为低电平,用来串行选择信号。
 0004           ;                               PA4置位时开启背光。                                           
 0004           ;  
 0004           ; ****************************************************************************************/
 0004           ; 
 0004           ; #include <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; #include <stdio.h>  
 0004           ; #define LCDDDR        DDRA
 0004           ; #define LCDDDR_IN     LCDDDR&=~BIT(PA1);
 0004           ; #define LCDDDR_OUT    LCDDDR|=BIT(PA0)|BIT(PA1)|BIT(PA2)|BIT(PA3)|BIT(PA4);
 0004           ; /*===============================================================*/
 0004           ; #define LCDCTL      PORTA   
 0004           ; #define LCD_RS_H    LCDCTL |= BIT(PA0)  //片选               
 0004           ; #define LCD_RS_L    LCDCTL &= ~BIT(PA0)                                           
 0004           ; #define LCD_RW_H    LCDCTL |= BIT(PA1)  //数据                            
 0004           ; #define LCD_RW_L    LCDCTL &= ~BIT(PA1)  
 0004           ; #define LCD_EN_H    LCDCTL |= BIT(PA2)  //时钟                          
 0004           ; #define LCD_EN_L    LCDCTL &= ~BIT(PA2) 
 0004           ; #define LCD_PSB     LCDCTL &= ~BIT(PA3) //串行选择
 0004           ; #define LCD_AK      LCDCTL |= BIT(PA4)  //开启背光
 0004           ; #define  uchar unsigned char
 0004           ; /***********************函数体部分*********************************/
 0004           ; 
 0004           ; void dm12864_inputbyte(uchar comm)  // 写入一字节数据
 0004           ; {
 0004                   .dbline 36
 0004           ;        uchar i;
 0004           ;        uchar mid;
 0004           ;        for (i=0;i<8;i++)
 0004 6627              clr R22
 0006 0AC0              xjmp L5
 0008           L2:
 0008                   .dbline 37
 0008           ;        {
 0008                   .dbline 38
 0008           ;                mid=comm&0x80;
 0008 402F              mov R20,R16
 000A 4078              andi R20,128
 000C                   .dbline 39
 000C           ;                if (mid==0)
 000C 11F4              brne L6
 000E                   .dbline 40
 000E           ;                LCD_RW_L ;
 000E D998              cbi 0x1b,1
 0010 01C0              xjmp L7
 0012           L6:
 0012                   .dbline 42
 0012           ;                else
 0012           ;                LCD_RW_H ;
 0012 D99A              sbi 0x1b,1
 0014           L7:
 0014                   .dbline 43
 0014 DA9A              sbi 0x1b,2
 0016                   .dbline 45
 0016 DA98              cbi 0x1b,2
 0018                   .dbline 46
 0018 000F              lsl R16
 001A                   .dbline 47
 001A           L3:
 001A                   .dbline 36
 001A 6395              inc R22
 001C           L5:
 001C                   .dbline 36
 001C 6830              cpi R22,8
 001E A0F3              brlo L2
 0020                   .dbline -2
 0020           L1:
 0020 0E940000          xcall pop_gset2
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026                   .dbsym r mid 20 c
 0026                   .dbsym r i 22 c
 0026                   .dbsym r comm 16 c
 0026                   .dbend
 0026                   .dbfunc e dm12864_outputbyte _dm12864_outputbyte fc
 0026           ;              i -> R16
 0026           ;            mid -> R18
                        .even
 0026           _dm12864_outputbyte::
 0026                   .dbline -1
 0026                   .dbline 50
 0026           ;                LCD_EN_H ;
 0026           ;                //delay(15);
 0026           ;                LCD_EN_L; 
 0026           ;                comm=comm<<1;
 0026           ;         }
 0026           ; }
 0026           ; uchar dm12864_outputbyte(void)  //读取一字节数据
 0026           ; {
 0026                   .dbline 51
 0026           ;         uchar i,mid=0;
 0026 2227              clr R18
 0028                   .dbline 52
 0028           ;         for (i=0;i<8;i++)
 0028 0027              clr R16
 002A 0EC0              xjmp L12
 002C           L9:
 002C                   .dbline 53
 002C           ;         {
 002C                   .dbline 55
 002C           ;                 //delay(15);
 002C           ;                 LCDDDR_IN;
 002C D198              cbi 0x1a,1
 002E                   .dbline 55
 002E                   .dbline 56
 002E           ;                 LCD_RS_H ;
 002E D89A              sbi 0x1b,0
 0030                   .dbline 57
 0030           ;                 mid=mid<<1;
 0030 220F              lsl R18
 0032                   .dbline 58
 0032           ;                 if ((PINA&0x02)==0)
 0032 C999              sbic 0x19,1
 0034 02C0              rjmp L13
 0036                   .dbline 59
 0036           ;                 mid&=~BIT(PD0);
 0036 2E7F              andi R18,254
 0038 01C0              xjmp L14
 003A           L13:
 003A                   .dbline 61
 003A           ;                 else
 003A           ;                 mid|=BIT(PD0);
 003A 2160              ori R18,1
 003C           L14:
 003C                   .dbline 62
 003C 8AB3              in R24,0x1a
 003E 8F61              ori R24,31
 0040 8ABB              out 0x1a,R24
 0042                   .dbline 62
 0042                   .dbline 63
 0042 DA9A              sbi 0x1b,2
 0044                   .dbline 65
 0044 DA98              cbi 0x1b,2
 0046                   .dbline 66
 0046           L10:
 0046                   .dbline 52
 0046 0395              inc R16
 0048           L12:
 0048                   .dbline 52
 0048 0830              cpi R16,8
 004A 80F3              brlo L9
 004C                   .dbline 67
 004C           ;                 LCDDDR_OUT;
 004C           ;                 LCD_EN_H ;
 004C           ;                 //delay(15);
 004C           ;                 LCD_EN_L; 
 004C           ;        }
 004C           ;        return(mid);
 004C 022F              mov R16,R18
 004E                   .dbline -2
 004E           L8:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbsym r i 16 c
 0050                   .dbsym r mid 18 c
 0050                   .dbend
 0050                   .dbfunc e DetectLCMBusyState _DetectLCMBusyState fV
 0050           ;             BF -> R20
                        .even
 0050           _DetectLCMBusyState::
 0050 0E940000          xcall push_gset1
 0054                   .dbline -1
 0054                   .dbline 72
 0054           ; }
 0054           ; 
 0054           ; /*-----------------读取标志位,判断控制器是否为忙状态--------------*/
 0054           ; void DetectLCMBusyState()
 0054           ; {
 0054                   .dbline 73
 0054           ;        char BF = 0x00;
 0054 4427              clr R20
 0056                   .dbline 74
 0056           ;        LCDDDR_OUT;
 0056 8AB3              in R24,0x1a
 0058 8F61              ori R24,31
 005A 8ABB              out 0x1a,R24
 005C                   .dbline 74
 005C                   .dbline 75
 005C           ;        LCD_RS_H ;
 005C D89A              sbi 0x1b,0
 005E                   .dbline 76
 005E           ;        LCD_EN_L ;
 005E DA98              cbi 0x1b,2
 0060           L16:
 0060                   .dbline 78
 0060           ;        do
 0060           ;     {
 0060                   .dbline 79
 0060           ;          dm12864_inputbyte(0xfc);
 0060 0CEF              ldi R16,252
 0062 CEDF              xcall _dm12864_inputbyte
 0064                   .dbline 80
 0064           ;          BF=dm12864_outputbyte();
 0064 E0DF              xcall _dm12864_outputbyte
 0066 402F              mov R20,R16
 0068                   .dbline 81
 0068           L17:
 0068                   .dbline 81
 0068           ;     } while(BF==0x80);
 0068 4038              cpi R20,128
 006A D1F3              breq L16
 006C                   .dbline 82
 006C           ;       LCD_RS_L ;
 006C D898              cbi 0x1b,0
 006E                   .dbline 83
 006E           ;       LCD_EN_H ;
 006E DA9A              sbi 0x1b,2
 0070                   .dbline -2
 0070           L15:
 0070 0E940000          xcall pop_gset1
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r BF 20 c
 0076                   .dbend
 0076                   .dbfunc e LCMWriteCommand _LCMWriteCommand fV
 0076           ;              b -> R20
 0076           ;              a -> R22
 0076           ;     DisplayCmd -> R20
                        .even
 0076           _LCMWriteCommand::
 0076 0E940000          xcall push_gset2
 007A 402F              mov R20,R16
 007C                   .dbline -1
 007C                   .dbline 89
 007C           ;       //delay(15);
 007C           ; }
 007C           ; 
 007C           ; /*----------------------------写入命令-----------------------------*/
 007C           ; void LCMWriteCommand(char DisplayCmd)
 007C           ; {
 007C                   .dbline 91
 007C           ;        uchar a,b;
 007C           ;        a=DisplayCmd&0xf0;
 007C 642F              mov R22,R20
 007E 607F              andi R22,240
 0080                   .dbline 92
 0080           ;        b=(DisplayCmd<<4)&0xf0;
 0080 842F              mov R24,R20
 0082 8F70              andi R24,#0x0F
 0084 8295              swap R24
 0086 807F              andi R24,240
 0088 482F              mov R20,R24
 008A                   .dbline 93
 008A           ;        LCDDDR_OUT;
 008A 8AB3              in R24,0x1a
 008C 8F61              ori R24,31
 008E 8ABB              out 0x1a,R24
 0090                   .dbline 93
 0090                   .dbline 94
 0090           ;        LCD_RS_H ;
 0090 D89A              sbi 0x1b,0
 0092                   .dbline 95
 0092           ;        LCD_EN_L ;
 0092 DA98              cbi 0x1b,2
 0094                   .dbline 96
 0094           ;        dm12864_inputbyte(0xf8);
 0094 08EF              ldi R16,248
 0096 B4DF              xcall _dm12864_inputbyte
 0098                   .dbline 97
 0098           ;        dm12864_inputbyte(a);
 0098 062F              mov R16,R22
 009A B2DF              xcall _dm12864_inputbyte
 009C                   .dbline 98
 009C           ;        dm12864_inputbyte(b);
 009C 042F              mov R16,R20
 009E B0DF              xcall _dm12864_inputbyte
 00A0                   .dbline 99
 00A0           ;        LCD_EN_H ;
 00A0 DA9A              sbi 0x1b,2
 00A2                   .dbline 100
 00A2           ;        LCD_RS_L ;
 00A2 D898              cbi 0x1b,0
 00A4                   .dbline -2
 00A4           L19:
 00A4 0E940000          xcall pop_gset2
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbsym r b 20 c
 00AA                   .dbsym r a 22 c
 00AA                   .dbsym r DisplayCmd 20 c
 00AA                   .dbend
 00AA                   .dbfunc e LCMWriteData _LCMWriteData fV
 00AA           ;              b -> R20
 00AA           ;              a -> R22
 00AA           ;    DisplayData -> R20

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -