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

📄 1602lcd.lis

📁 AVR之ATMega16
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _1602LCD.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\1602LCD/delay.h
 0000                   .dbfunc e DelayUS _DelayUS fV
 0000           ;           time -> R16,R17
                        .even
 0000           _DelayUS::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; /**********************************************
 0000           ;                  液晶1602实验
 0000           ;    晶振: 内部8.0000Mhz
 0000           ;    连接:RS    PA2,  
 0000           ;          RW    PA1, 
 0000           ;          EN    PA0,
 0000           ;          DATA  PD0-PD7
 0000           ; ***********************************************/
 0000           ; /******************头文件**********************/
 0000 02C0              xjmp L3
 0002           L2:
 0002                   .dbline 11
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006           L3:
 0006                   .dbline 10
 0006           ; #include <iom16v.h>
 0006 81E0              ldi R24,1
 0008 90E0              ldi R25,0
 000A 8017              cp R24,R16
 000C 9107              cpc R25,R17
 000E C8F3              brlo L2
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbsym r time 16 i
 0012                   .dbend
 0012                   .dbfunc e DelayMS _DelayMS fV
 0012           ;              i -> R20,R21
 0012           ;           time -> R16,R17
                        .even
 0012           _DelayMS::
 0012 0E940000          xcall push_gset1
 0016                   .dbline -1
 0016                   .dbline 20
 0016           ; #include <macros.h>
 0016           ; #include "delay.h"
 0016           ; /******************宏定义**********************/
 0016           ; #define  uchar unsigned char
 0016           ; #define  uint  unsigned int
 0016           ; 
 0016           ; #define mode       0x38            //功能设置
 0016           ;                                    //DL=1     八位数据接口
 0016           ;                                                          //N=1      两行显示
 0016           ;                                                          //F=0      5*7点阵字符
 0016 09C0              xjmp L7
 0018           L6:
 0018                   .dbline 23
 0018           ; #define cursor     0x0f            //显示开/关设置
 0018           ;                                    //D=1      显示屏开
 0018           ;                                                          //C=1      光标开
 0018                   .dbline 24
 0018           ;                                                          //B=1          闪烁开
 0018 41E0              ldi R20,1
 001A 50E0              ldi R21,0
 001C 02C0              xjmp L12
 001E           L9:
 001E                   .dbline 25
 001E           L10:
 001E                   .dbline 24
 001E 4F5F              subi R20,255  ; offset = 1
 0020 5F4F              sbci R21,255
 0022           L12:
 0022                   .dbline 24
 0022 4637              cpi R20,118
 0024 E4E0              ldi R30,4
 0026 5E07              cpc R21,R30
 0028 D0F3              brlo L9
 002A                   .dbline 26
 002A           L7:
 002A                   .dbline 22
 002A 1801              movw R2,R16
 002C 0150              subi R16,1
 002E 1040              sbci R17,0
 0030 2220              tst R2
 0032 91F7              brne L6
 0034 3320              tst R3
 0036 81F7              brne L6
 0038           X0:
 0038                   .dbline -2
 0038           L5:
 0038 0E940000          xcall pop_gset1
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbsym r i 20 i
 003E                   .dbsym r time 16 i
 003E                   .dbend
                        .area lit(rom, con, rel)
 0000           _table1::
 0000 6A6920736875207775206C6920786900  .byte 'j,'i,32,'s,'h,'u,32,'w,'u,32,'l,'i,32,'x,'i,0
 0010                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\1602LCD\1602LCD.c
 0010                   .dbsym e table1 _table1 A[16:16]kc
 0010           _table2::
 0010 6469616E7A697869616F7A7535303700  .byte 'd,'i,'a,'n,'z,'i,'x,'i,'a,'o,'z,'u,53,48,55,0
 0020                   .dbsym e table2 _table2 A[16:16]kc
                        .area text(rom, con, rel)
 003E                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\1602LCD\1602LCD.c
 003E                   .dbfunc e port_init _port_init fV
                        .even
 003E           _port_init::
 003E                   .dbline -1
 003E                   .dbline 57
 003E           ; #define shift_off  0x06            //输入方式设置
 003E           ;                                                          //ID=1     读写一个字符后,地址和光标加1
 003E           ;                                                          //S=0          屏幕视窗停留在1-16列寄存器不移动
 003E           ; #define shift_on   0x07            //输入方式设置
 003E           ;                                                          //ID=1     读写一个字符后,地址和光标加1
 003E           ;                                                          //S=1          每次写完一个字符屏幕视窗从左边的寄存器向右边的寄存器移动实现字符左移的效果
 003E           ; #define run        0x1c            //光标、画面移动,不影响DDRAM
 003E           ;                                                          //S/C=1    屏幕视窗向右平移一个字符
 003E           ;                                                          //R/L=1    右移                                                 
 003E           ; #define clean      0x01            //清屏指令
 003E           ; #define enter      0x02            //归位指令 AC=0   光标,画面回HOME位
 003E           ; 
 003E           ; #define RS_H       PORTA|=BIT(2)   //RS=1,选择数据
 003E           ; #define RS_L       PORTA&=~BIT(2)  //RS=0,选择命令
 003E           ; 
 003E           ; #define RW_H       PORTA|=BIT(1)   //R/W=1,读
 003E           ; #define RW_L       PORTA&=~BIT(1)  //R/W=0,写
 003E           ; 
 003E           ; #define EN_H       PORTA|=BIT(0)   //EN=1,使能关
 003E           ; #define EN_L       PORTA=~BIT(0)  //EN=0,使能开
 003E           ;  
 003E           ; const uchar table1[]="ji shu wu li xi";   //定义数据在flash中
 003E           ; const uchar table2[]="dianzixiaozu507";
 003E           ; /******************函数声明******************/
 003E           ; void port_init(void);                            //M16初始化
 003E           ; void n1602_init(void);                                   //1602初始化
 003E           ; void write_com(uchar com);                       //写指令
 003E           ; void write_dat(uchar dat);                       //写数据
 003E           ; void set_xy(uchar x,uchar y);            //设置行列
 003E           ; void show(uchar x,uchar y,uchar *str); //显示函数,x行,y列,*str字符串
 003E           ; /*****************M16初始化******************/
 003E           ; void port_init(void)
 003E           ; {
 003E                   .dbline 58
 003E           ;     PORTA = 0x00;//设置端口数据、方向
 003E 2224              clr R2
 0040 2BBA              out 0x1b,R2
 0042                   .dbline 59
 0042           ;     DDRA  = 0xFF;
 0042 8FEF              ldi R24,255
 0044 8ABB              out 0x1a,R24
 0046                   .dbline 60
 0046           ;     PORTB = 0x00;
 0046 28BA              out 0x18,R2
 0048                   .dbline 61
 0048           ;     DDRB  = 0x00;
 0048 27BA              out 0x17,R2
 004A                   .dbline 62
 004A           ;     PORTC = 0x00;
 004A 25BA              out 0x15,R2
 004C                   .dbline 63
 004C           ;     DDRC  = 0x00;
 004C 24BA              out 0x14,R2
 004E                   .dbline 64
 004E           ;     PORTD = 0x00;
 004E 22BA              out 0x12,R2
 0050                   .dbline 65
 0050           ;     DDRD  = 0xFF;
 0050 81BB              out 0x11,R24
 0052                   .dbline -2
 0052           L13:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbend
 0054                   .dbfunc e n1602_init _n1602_init fV
                        .even
 0054           _n1602_init::
 0054                   .dbline -1
 0054                   .dbline 69
 0054           ; }
 0054           ; /*****************1602初始化*****************/
 0054           ; void n1602_init(void)
 0054           ; {
 0054                   .dbline 70
 0054           ;         EN_L;
 0054 8EEF              ldi R24,254
 0056 8BBB              out 0x1b,R24
 0058                   .dbline 71
 0058           ;         write_com(mode);                                                //功能设置
 0058 08E3              ldi R16,56
 005A 1DD0              xcall _write_com
 005C                   .dbline 72
 005C           ;         DelayMS(1);
 005C 01E0              ldi R16,1
 005E 10E0              ldi R17,0
 0060 D8DF              xcall _DelayMS
 0062                   .dbline 73
 0062           ;         write_com(clean);                                               //清屏
 0062 01E0              ldi R16,1
 0064 18D0              xcall _write_com
 0066                   .dbline 74
 0066           ;         DelayMS(1);
 0066 01E0              ldi R16,1
 0068 10E0              ldi R17,0
 006A D3DF              xcall _DelayMS
 006C                   .dbline 75
 006C           ;         write_com(cursor);                                      //显示开/关设置
 006C 0FE0              ldi R16,15
 006E 13D0              xcall _write_com
 0070                   .dbline 76
 0070           ;         DelayMS(1);
 0070 01E0              ldi R16,1
 0072 10E0              ldi R17,0
 0074 CEDF              xcall _DelayMS
 0076                   .dbline 77
 0076           ;         write_com(shift_off);                 //每写完一个字符地址指针加+1,屏幕视窗不移动
 0076 06E0              ldi R16,6
 0078 0ED0              xcall _write_com
 007A                   .dbline 78
 007A           ;         DelayMS(1);
 007A 01E0              ldi R16,1
 007C 10E0              ldi R17,0
 007E C9DF              xcall _DelayMS
 0080                   .dbline -2
 0080           L14:
 0080                   .dbline 0 ; func end
 0080 0895              ret
 0082                   .dbend
 0082                   .dbfunc e init_devices _init_devices fV
                        .even
 0082           _init_devices::
 0082                   .dbline -1
 0082                   .dbline 82
 0082           ;         
 0082           ; }
 0082           ; void init_devices(void)
 0082           ; {
 0082                   .dbline 83
 0082           ;     CLI(); //禁止所有中断
 0082 F894              cli
 0084                   .dbline 84
 0084           ;     MCUCR  = 0x00;//INT0、INT1中断触发方式
 0084 2224              clr R2
 0086 25BE              out 0x35,R2
 0088                   .dbline 85

⌨️ 快捷键说明

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