📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile G:\avr16\avr16-1020-2\lcd.c
0000 .dbfunc e LCD16xx_init _LCD16xx_init fV
.even
0000 _LCD16xx_init::
0000 .dbline -1
0000 .dbline 32
0000 ; /*--------------------------------------------------*/
0000 ; /* AVR-ARM开发网论坛 */
0000 ; /* http://www.avrarm.com */
0000 ; /* AVR生成代码测试程序 */
0000 ; /*--------------------------------------------------*/
0000 ; /* 程序由AVR辅助开发工具V2.0.1自动生成 */
0000 ; /* AVR系统的处理器为: ATMega16 */
0000 ; /* AVR系统的晶振频率: 8.0000 Mhz */
0000 ; /*--------------------------------------------------*/
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include "lcd.h"
0000 ; #include "delay.h"
0000 ;
0000 ; /**********************************************************
0000 ; 光标命令
0000 ; LCD16xx_write_char(1,0x0e); //光标开
0000 ; LCD16xx_write_char(1,0x0d); //光标所在字符闪烁
0000 ; LCD16xx_write_char(1,0x0c); //光标关
0000 ; **********************************************************/
0000 ; /**********************************************************
0000 ; TC16xxB LCD DISPLAY
0000 ; 建立时间:2006年08月30日
0000 ; 修改日期:2006年08月30日
0000 ; LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
0000 ; 入命令
0000 ; LCD第一行显示寄存器地址:0x80-0x8F
0000 ; LCD第二行显示寄存器地址:0xC0-0xCF
0000 ; **********************************************************/
0000 ; void LCD16xx_init(void)
0000 ; {
0000 .dbline 33
0000 ; LCD_DATA_DDR |= LCD_DATA;
0000 84B3 in R24,0x14
0002 8F6F ori R24,255
0004 84BB out 0x14,R24
0006 .dbline 34
0006 ; LCD_EN_DDR |= LCD_EN;
0006 8F9A sbi 0x11,7
0008 .dbline 35
0008 ; LCD_RS_DDR |= LCD_RS;
0008 8E9A sbi 0x11,6
000A .dbline 38
000A ;
000A ;
000A ; LCD_DATA_PORT = 0xff;
000A 8FEF ldi R24,255
000C 85BB out 0x15,R24
000E .dbline 39
000E ; LCD16xx_en_write();
000E 0DD0 xcall _LCD16xx_en_write
0010 .dbline 41
0010 ;
0010 ; LCD16xx_write_char(0,0x38); //4bit test
0010 28E3 ldi R18,56
0012 0027 clr R16
0014 15D0 xcall _LCD16xx_write_char
0016 .dbline 42
0016 ; LCD16xx_write_char(0,0x0c); //显示开
0016 2CE0 ldi R18,12
0018 0027 clr R16
001A 12D0 xcall _LCD16xx_write_char
001C .dbline 43
001C ; LCD16xx_write_char(0,0x01); //显示清屏
001C 21E0 ldi R18,1
001E 0027 clr R16
0020 0FD0 xcall _LCD16xx_write_char
0022 .dbline 44
0022 ; LCD16xx_write_char(0,0x06); //显示光标移动设置
0022 26E0 ldi R18,6
0024 0027 clr R16
0026 0CD0 xcall _LCD16xx_write_char
0028 .dbline -2
0028 L1:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e LCD16xx_en_write _LCD16xx_en_write fV
.even
002A _LCD16xx_en_write::
002A .dbline -1
002A .dbline 48
002A ; }
002A ;
002A ; void LCD16xx_en_write(void) //EN端产生一个高电平脉冲,写LCD
002A ; {
002A .dbline 49
002A ; LCD_EN_PORT |= LCD_EN;
002A 979A sbi 0x12,7
002C .dbline 50
002C ; delay_nus(4); //如果晶振频率太高,则可相应提高延时
002C 04E0 ldi R16,4
002E 10E0 ldi R17,0
0030 0E940000 xcall _delay_nus
0034 .dbline 51
0034 ; LCD_EN_PORT &= ~LCD_EN;
0034 9798 cbi 0x12,7
0036 .dbline -2
0036 L2:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbend
0038 .dbfunc e LCD16xx_clr _LCD16xx_clr fV
.even
0038 _LCD16xx_clr::
0038 .dbline -1
0038 .dbline 58
0038 ; }
0038 ;
0038 ; /************************************************************************/
0038 ; /* LCD16xx清屏 */
0038 ; /************************************************************************/
0038 ; void LCD16xx_clr(void)
0038 ; {
0038 .dbline 59
0038 ; LCD16xx_write_char(1,0x01);
0038 21E0 ldi R18,1
003A 01E0 ldi R16,1
003C 01D0 xcall _LCD16xx_write_char
003E .dbline -2
003E L3:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbend
0040 .dbfunc e LCD16xx_write_char _LCD16xx_write_char fV
0040 ; data_temp -> R20
0040 ; data -> R10
0040 ; command -> R22
.even
0040 _LCD16xx_write_char::
0040 0E940000 xcall push_gset3
0044 A22E mov R10,R18
0046 602F mov R22,R16
0048 .dbline -1
0048 .dbline 75
0048 ; }
0048 ;
0048 ; /*-----------------------------------------------------------------------
0048 ; LCD16xx_write_char : 英文字符串显示函数
0048 ;
0048 ; 输入参数:*s :英文字符串指针;
0048 ; X、Y : 显示字符串的位置,X:0-15,Y:0-1
0048 ; LCD第一行显示寄存器地址:0x80-0x8F
0048 ; LCD第一行显示寄存器地址:0xC0-0xCF
0048 ; LCD第三行显示寄存器地址:0x90-0x9F
0048 ; LCD第四行显示寄存器地址:0xD0-0xDF
0048 ; 编写日期 :2006年08月30日
0048 ; 最后修改日期 :2006年08月30日
0048 ; -----------------------------------------------------------------------*/
0048 ; void LCD16xx_write_char(unsigned char command,unsigned char data)
0048 ; {
0048 .dbline 78
0048 ; unsigned char data_temp;
0048 ;
0048 ; data_temp = data;
0048 4A2D mov R20,R10
004A .dbline 83
004A ;
004A ; //LCD16xx_wait_Ready();
004A ;
004A ;
004A ; if (command == 0) //data
004A 6623 tst R22
004C 11F4 brne L5
004E .dbline 84
004E ; LCD_RS_PORT |= LCD_RS; //RS=1
004E 969A sbi 0x12,6
0050 01C0 xjmp L6
0052 L5:
0052 .dbline 86
0052 ; else //command
0052 ; LCD_RS_PORT &= ~LCD_RS; //RS=0
0052 9698 cbi 0x12,6
0054 L6:
0054 .dbline 88
0054 ;
0054 ; LCD_DATA_PORT &= 0x00;
0054 2224 clr R2
0056 25BA out 0x15,R2
0058 .dbline 89
0058 ; LCD_DATA_PORT |= data_temp&0xff; //send high 4bit
0058 842F mov R24,R20
005A 8F7F andi R24,255
005C 25B2 in R2,0x15
005E 282A or R2,R24
0060 25BA out 0x15,R2
0062 .dbline 90
0062 ; LCD16xx_en_write();
0062 E3DF xcall _LCD16xx_en_write
0064 .dbline 92
0064 ;
0064 ; LCD_DATA_PORT &= 0x00;
0064 2224 clr R2
0066 25BA out 0x15,R2
0068 .dbline 93
0068 ; LCD_DATA_PORT |= data_temp&0xff; //send low 4bit
0068 842F mov R24,R20
006A 8F7F andi R24,255
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -