📄 lcd_hg1286.lis
字号:
.module LCD_HG1286.c
.area text(rom, con, rel)
0000 .dbfile F:\Work\Data\程序\修订版~1.1\LCD_HG1286.c
0000 .dbfunc e wr_com _wr_com fV
0000 ; cmd -> R10
.even
0000 _wr_com::
0000 AA92 st -y,R10
0002 A02E mov R10,R16
0004 .dbline -1
0004 .dbline 19
0004 ; /*****************************************************
0004 ; * File name : LCD_HG1286.C
0004 ; * Description : Header file of main_H.H
0004 ; * Platform : ICCAVR
0004 ; * Author : xiao xue
0004 ; * Email : ay1509@yahoo.com
0004 ; * Date : 2008-03-13
0004 ; * Description : LCD Show
0004 ; /********************头文件*************************/
0004 ; #include"main_H.h"
0004 ; /***************写命令***************
0004 ; *函 数:wr_com
0004 ; *函数功能:写命令字
0004 ; *入口参数:cmd
0004 ; *返 回 值:无
0004 ; *备 注:
0004 ; ************************************/
0004 ; void wr_com(uchar cmd)
0004 ; {
0004 .dbline 20
0004 ; PORTB=cmd; //命令送至B端口
0004 A8BA out 0x18,R10
0006 .dbline 21
0006 ; RS_clear; //写命令
0006 AA98 cbi 0x15,2
0008 .dbline 22
0008 ; RW_clear; //写使能
0008 AC98 cbi 0x15,4
000A .dbline 23
000A ; E_clear; //模块使能
000A AD98 cbi 0x15,5
000C .dbline 24
000C ; delay_nus(300);
000C 0CE2 ldi R16,300
000E 11E0 ldi R17,1
0010 FFD1 rcall _delay_nus
0012 .dbline 25
0012 ; E_set; //关闭使能
0012 AD9A sbi 0x15,5
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 A990 ld R10,y+
0016 0895 ret
0018 .dbsym r cmd 10 c
0018 .dbend
0018 .dbfunc e wr_date _wr_date fV
0018 ; data -> R10,R11
.even
0018 _wr_date::
0018 AA92 st -y,R10
001A BA92 st -y,R11
001C 5801 movw R10,R16
001E .dbline -1
001E .dbline 36
001E ; }
001E ;
001E ; /*****************写数据**************
001E ; *函 数:wr_date
001E ; *函数功能:写数据
001E ; *入口参数:*data
001E ; *返 回 值:无
001E ; *备 注:
001E ; ************************************/
001E ; void wr_date(uchar *data)
001E ; {
001E .dbline 37
001E ; PORTB=*data; //数据传至B端口
001E F501 movw R30,R10
0020 2080 ldd R2,z+0
0022 28BA out 0x18,R2
0024 .dbline 38
0024 ; RS_set; //写数据
0024 AA9A sbi 0x15,2
0026 .dbline 39
0026 ; RW_clear; //写使能
0026 AC98 cbi 0x15,4
0028 .dbline 40
0028 ; E_clear; //模块使能
0028 AD98 cbi 0x15,5
002A .dbline 41
002A ; delay_nus(300);
002A 0CE2 ldi R16,300
002C 11E0 ldi R17,1
002E F0D1 rcall _delay_nus
0030 .dbline 42
0030 ; E_set; //关闭使能
0030 AD9A sbi 0x15,5
0032 .dbline -2
0032 L2:
0032 .dbline 0 ; func end
0032 B990 ld R11,y+
0034 A990 ld R10,y+
0036 0895 ret
0038 .dbsym r data 10 pc
0038 .dbend
0038 .dbfunc e lcd_init _lcd_init fV
.even
0038 _lcd_init::
0038 .dbline -1
0038 .dbline 52
0038 ; }
0038 ; /******************初始化**********
0038 ; *函 数:lcd_init
0038 ; *函数功能:液晶始化
0038 ; *入口参数:无
0038 ; *返 回 值:无
0038 ; *备 注:
0038 ; **********************************/
0038 ; void lcd_init(void)
0038 ; {
0038 .dbline 53
0038 ; DDRB=0xff;
0038 8FEF ldi R24,255
003A 87BB out 0x17,R24
003C .dbline 54
003C ; DDRC=0xff;
003C 84BB out 0x14,R24
003E .dbline 55
003E ; PORTB=0XFF;
003E 88BB out 0x18,R24
0040 .dbline 56
0040 ; PORTC=0XFF;
0040 85BB out 0x15,R24
0042 .dbline 57
0042 ; wr_com(0x01); //清DDRAM
0042 01E0 ldi R16,1
0044 DDDF rcall _wr_com
0046 .dbline 58
0046 ; wr_com(0x30); //功能设置,一次送8位数据(基本指令集)
0046 00E3 ldi R16,48
0048 DBDF rcall _wr_com
004A .dbline 59
004A ; wr_com(0x02); //DDRAM地址归位
004A 02E0 ldi R16,2
004C D9DF rcall _wr_com
004E .dbline 60
004E ; wr_com(0x04);
004E 04E0 ldi R16,4
0050 D7DF rcall _wr_com
0052 .dbline 61
0052 ; wr_com(0x0C); //整体显示,游标off,游标位置off
0052 0CE0 ldi R16,12
0054 D5DF rcall _wr_com
0056 .dbline 62
0056 ; wr_com(0x80); //设定DDRAM7位地址到地址计数器AC
0056 00E8 ldi R16,128
0058 D3DF rcall _wr_com
005A .dbline -2
005A L3:
005A .dbline 0 ; func end
005A 0895 ret
005C .dbend
005C .dbfunc e dis _dis fV
005C ; k -> R10
005C ; datas -> y+8
005C ; sum -> R12
005C ; h -> R14
.even
005C _dis::
005C 00D0 rcall push_xgset30FC
005E C22E mov R12,R18
0060 E02E mov R14,R16
0062 .dbline -1
0062 .dbline 69
0062 ; }
0062 ; /******************显示数据******************
0062 ; *h代表行数可取(1,2,3,4)
0062 ; * SUM表示一次要显示汉字的总个数。(1--32)
0062 ; ********************************************/
0062 ; void dis(uchar h , uchar sum , uchar *datas )
0062 ; {
0062 .dbline 70
0062 ; unsigned char k=0;
0062 AA24 clr R10
0064 .dbline 71
0064 ; switch (h){ //判断所要显示行
0064 4E2D mov R20,R14
0066 5527 clr R21
0068 4130 cpi R20,1
006A E0E0 ldi R30,0
006C 5E07 cpc R21,R30
006E 69F0 breq L8
0070 X0:
0070 4230 cpi R20,2
0072 E0E0 ldi R30,0
0074 5E07 cpc R21,R30
0076 61F0 breq L9
0078 X1:
0078 4330 cpi R20,3
007A E0E0 ldi R30,0
007C 5E07 cpc R21,R30
007E 59F0 breq L10
0080 X2:
0080 4430 cpi R20,4
0082 E0E0 ldi R30,0
0084 5E07 cpc R21,R30
0086 51F0 breq L11
0088 X3:
0088 14C0 rjmp L13
008A L8:
008A .dbline 72
008A ; case 1: wr_com(0x80);break;
008A 00E8 ldi R16,128
008C B9DF rcall _wr_com
008E .dbline 72
008E 11C0 rjmp L13
0090 L9:
0090 .dbline 73
0090 ; case 2: wr_com(0x90);break;
0090 00E9 ldi R16,144
0092 B6DF rcall _wr_com
0094 .dbline 73
0094 0EC0 rjmp L13
0096 L10:
0096 .dbline 74
0096 ; case 3: wr_com(0x88);break;
0096 08E8 ldi R16,136
0098 B3DF rcall _wr_com
009A .dbline 74
009A 0BC0 rjmp L13
009C L11:
009C .dbline 75
009C ; case 4: wr_com(0x98);break;
009C 08E9 ldi R16,152
009E B0DF rcall _wr_com
00A0 .dbline 75
00A0 08C0 rjmp L13
00A2 L12:
00A2 .dbline 77
00A2 ; }//end switch
00A2 ; while(k<=sum){ //显示数据个数
00A2 .dbline 78
00A2 ; wr_date(&(*(datas+k))); //写入数据
00A2 0A2D mov R16,R10
00A4 1127 clr R17
00A6 0884 ldd R0,y+8
00A8 1984 ldd R1,y+9
00AA 000D add R16,R0
00AC 111D adc R17,R1
00AE B4DF rcall _wr_date
00B0 .dbline 79
00B0 ; k++;
00B0 A394 inc R10
00B2 .dbline 80
00B2 ; }//end while
00B2 L13:
00B2 .dbline 77
00B2 2C2C mov R2,R12
00B4 3324 clr R3
00B6 4A2C mov R4,R10
00B8 5524 clr R5
00BA 2414 cp R2,R4
00BC 3504 cpc R3,R5
00BE 8CF7 brge L12
00C0 X4:
00C0 .dbline -2
00C0 L4:
00C0 .dbline 0 ; func end
00C0 00C0 rjmp pop_xgset30FC
00C2 .dbsym r k 10 c
00C2 .dbsym l datas 8 pc
00C2 .dbsym r sum 12 c
00C2 .dbsym r h 14 c
00C2 .dbend
00C2 .dbfunc e lcd_dis _lcd_dis fV
00C2 ; datac -> R20,R21
00C2 ; y -> R22
00C2 ; x -> R10
.even
00C2 _lcd_dis::
00C2 00D0 rcall push_xgsetF00C
00C4 622F mov R22,R18
00C6 A02E mov R10,R16
00C8 4E81 ldd R20,y+6
00CA 5F81 ldd R21,y+7
00CC .dbline -1
00CC .dbline 89
00CC ; }
00CC ; /***********************定点显示数据*********************
00CC ; *LCD显示子程序(一次写入两个字节)
00CC ; * x代表行数可取:1,2,3,4(十进制)
00CC ; * y代表列数可取:0X0,0X1————0X7(十六进制)
00CC ; * *data代表显示数据
00CC ; ********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -