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

📄 lcd.s

📁 一个关于AVR单片机的例程
💻 S
字号:
	.module lcd.c
	.area lit(rom, con, rel)
_num::
	.byte 62,'Q
	.byte 'I,'E
	.byte 62,0
	.byte 0,'B
	.byte 127,64
	.byte 0,0
	.byte 'B,'a
	.byte 'Q,'I
	.byte 'F,0
	.byte 33,'A
	.byte 'E,'K
	.byte 49,0
	.byte 24,20
	.byte 18,127
	.byte 16,0
	.byte 39,'E
	.byte 'E,'E
	.byte 57,0
	.byte 60,'J
	.byte 'I,'I
	.byte 48,0
	.byte 1,'q
	.byte 9,5
	.byte 3,0
	.byte 54,'I
	.byte 'I,'I
	.byte 54,0
	.byte 6,'I
	.byte 'I,'I
	.byte 62,0
	.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1/char.h
	.dbsym e num _num A[60:10:6]kc
_big_char::
	.byte 126,17
	.byte 17,17
	.byte 126,0
	.byte 127,'I
	.byte 'I,'I
	.byte 54,0
	.byte 62,'A
	.byte 'A,'A
	.byte 34,0
	.byte 127,'A
	.byte 'A,34
	.byte 28,0
	.byte 127,'I
	.byte 'I,'I
	.byte 'A,0
	.byte 127,9
	.byte 9,9
	.byte 1,0
	.byte 62,'A
	.byte 'I,'I
	.byte 'z,0
	.byte 127,8
	.byte 8,8
	.byte 127,0
	.byte 0,'A
	.byte 127,'A
	.byte 0,0
	.byte 32,64
	.byte 'A,63
	.byte 1,0
	.byte 127,8
	.byte 20,34
	.byte 'A,0
	.byte 127,64
	.byte 64,64
	.byte 64,0
	.byte 127,2
	.byte 12,2
	.byte 127,0
	.byte 127,4
	.byte 8,16
	.byte 127,0
	.byte 62,'A
	.byte 'A,'A
	.byte 62,0
	.byte 127,9
	.byte 9,9
	.byte 6,0
	.byte 62,'A
	.byte 'Q,33
	.byte 94,0
	.byte 127,9
	.byte 25,41
	.byte 'F,0
	.byte 'F,'I
	.byte 'I,'I
	.byte 49,0
	.byte 1,1
	.byte 127,1
	.byte 1,0
	.byte 63,64
	.byte 64,64
	.byte 63,0
	.byte 31,32
	.byte 64,32
	.byte 31,0
	.byte 63,64
	.byte 56,64
	.byte 63,0
	.byte 'c,20
	.byte 8,20
	.byte 'c,0
	.byte 7,8
	.byte 'p,8
	.byte 7,0
	.byte 'a,'Q
	.byte 'I,'E
	.byte 'C,0
	.dbsym e big_char _big_char A[156:26:6]kc
_small_char::
	.byte 32,'T
	.byte 'T,'T
	.byte 'x,0
	.byte 127,'H
	.byte 'D,'D
	.byte 56,0
	.byte 56,'D
	.byte 'D,'D
	.byte 32,0
	.byte 56,'D
	.byte 'D,'H
	.byte 127,0
	.byte 56,'T
	.byte 'T,'T
	.byte 24,0
	.byte 8,126
	.byte 9,1
	.byte 2,0
	.byte 12,'R
	.byte 'R,'R
	.byte 62,0
	.byte 127,8
	.byte 4,4
	.byte 'x,0
	.byte 0,'D
	.byte 125,64
	.byte 0,0
	.byte 0,32
	.byte 64,'D
	.byte 61,0
	.byte 127,16
	.byte 40,'D
	.byte 0,0
	.byte 0,'A
	.byte 127,64
	.byte 0,0
	.byte 124,4
	.byte 24,4
	.byte 'x,0
	.byte 124,8
	.byte 4,4
	.byte 'x,0
	.byte 56,'D
	.byte 'D,'D
	.byte 56,0
	.byte 124,20
	.byte 20,20
	.byte 8,0
	.byte 8,20
	.byte 20,24
	.byte 124,0
	.byte 124,8
	.byte 4,4
	.byte 8,0
	.byte 'H,'T
	.byte 'T,'T
	.byte 32,0
	.byte 4,63
	.byte 'D,64
	.byte 32,0
	.byte 60,64
	.byte 64,32
	.byte 124,0
	.byte 28,32
	.byte 64,32
	.byte 28,0
	.byte 60,64
	.byte 48,64
	.byte 60,0
	.byte 'D,40
	.byte 16,40
	.byte 'D,0
	.byte 12,'P
	.byte 'P,'P
	.byte 60,0
	.byte 'D,'d
	.byte 'T,'L
	.byte 'D,0
	.dbsym e small_char _small_char A[156:26:6]kc
	.area text(rom, con, rel)
	.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1/char.h
	.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 18
; // Project :12864 LCD Display
; // Writer : you hu
; // ICC-AVR application builder :2005-7-12 
; // Target : M128
; // Crystal: 8.0000Mhz
; // Description : display char
; 
; #include <iom128v.h>
; #include <macros.h>
; #include "char.h"
; #include "lcd.h"
; typedef unsigned char uchar;
; typedef unsigned int uint;
; 
; unsigned char flag;
; 
; void port_init(void)
; {
	.dbline 20
;  //访问外部ram的总线端口
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 21
;  DDRA  = 0x00; 
	out 0x1a,R2
	.dbline 22
;  PORTC = 0x00; 
	out 0x15,R2
	.dbline 23
;  DDRC  = 0xFF;
	ldi R24,255
	out 0x14,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e check_busy _check_busy fV
;           temp -> R20
;             cs -> R16
	.even
_check_busy::
	xcall push_gset1
	.dbline -1
	.dbline 27
; }
; 	  
; void check_busy(uchar cs)               
; { 
	xjmp L4
L3:
	.dbline 30
;   uchar temp;
;   while(temp)          
;    { 
	.dbline 31
;      if(cs)
	tst R16
	breq L6
	.dbline 32
;         temp=R_staus&0X80;               //将忙状态读到temp中进行确定
	lds R20,8197
	andi R20,128
	xjmp L7
L6:
	.dbline 34
; 	 else
; 	    temp=L_staus&0X80;
	lds R20,8201
	andi R20,128
L7:
	.dbline 35
L4:
	.dbline 29
	tst R20
	brne L3
	.dbline -2
L2:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r cs 16 c
	.dbend
	.dbfunc e LCD_Clean _LCD_Clean fV
;           page -> R20
;              y -> R22
	.even
_LCD_Clean::
	xcall push_gset2
	.dbline -1
	.dbline 39
; 	}
; }
; 
; void LCD_Clean(void)
; {
	.dbline 40
;   unsigned char page=0,y;                //定义表示页和列的局部变量
	clr R20
	.dbline 42
;   
;   for(page=0;page<8;page++)
	xjmp L12
L9:
	.dbline 43
;      {
	.dbline 45
; 	                                     //LCD左半屏的操作
; 	   check_busy(0);
	clr R16
	xcall _check_busy
	.dbline 46
; 	   L_command=LCD_PAGE+page;          //设置LCD左半屏页地址
	mov R24,R20
	subi R24,72    ; addi 184
	sts 8200,R24
	.dbline 47
; 	   check_busy(0);
	clr R16
	xcall _check_busy
	.dbline 48
; 	   L_command=LCD_Y; 
	ldi R24,64
	sts 8200,R24
	.dbline 50
; 	                                     //LCD右半屏的操作
; 	  check_busy(1);
	ldi R16,1
	xcall _check_busy
	.dbline 51
; 	   R_command=LCD_PAGE+page;          //设置LCD右半屏页地址
	mov R24,R20
	subi R24,72    ; addi 184
	sts 8196,R24
	.dbline 52
; 	  check_busy(1);
	ldi R16,1
	xcall _check_busy
	.dbline 53
; 	   R_command=LCD_Y;
	ldi R24,64
	sts 8196,R24
	.dbline 55
; 	   
; 	   for(y=0;y<64;y++)
	clr R22
	xjmp L16
L13:
	.dbline 56
	.dbline 57
	clr R2
	sts 8202,R2
	.dbline 58
	sts 8198,R2
	.dbline 59
L14:
	.dbline 55
	inc R22
L16:
	.dbline 55
	cpi R22,64
	brlo L13
	.dbline 60
L10:
	.dbline 42
	inc R20
L12:
	.dbline 42
	cpi R20,8
	brlo L9
	.dbline -2
L8:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r page 20 c
	.dbsym r y 22 c
	.dbend
	.dbfunc e LCD_Init _LCD_Init fV
	.even
_LCD_Init::
	.dbline -1
	.dbline 64
; 	      {
;             L_data=0x00;
; 			R_data=0x00;
; 		  }  
; 	 }
; }
;                                          
; void LCD_Init(void)                     //LCD初始化子函数
; {
	.dbline 66
;   /*首先关闭12864的显示*/
;   check_busy(0);                        //LCD左半屏正在工作,等待......
	clr R16
	xcall _check_busy
	.dbline 67
;   L_command=LCD_OFF;                    //先关闭LCD左半屏的显示
	ldi R24,62
	sts 8200,R24
	.dbline 68
;   check_busy(1);                        //LCD右半屏正在工作,等待......
	ldi R16,1
	xcall _check_busy
	.dbline 69
;   R_command=LCD_OFF;                    //先关闭LCD右半屏的显示
	ldi R24,62
	sts 8196,R24
	.dbline 72
;   
;   /*开启12864的显示*/
;   check_busy(0);
	clr R16
	xcall _check_busy
	.dbline 73
;   L_command=LCD_ON;                     //打开LCD左半屏的显示
	ldi R24,63
	sts 8200,R24
	.dbline 74
;   check_busy(1);
	ldi R16,1
	xcall _check_busy
	.dbline 75
;   R_command=LCD_ON;                     //打开LCD右半屏的显示
	ldi R24,63
	sts 8196,R24
	.dbline 78
;   
;   /*设置LCD显示的起始行*/
;   check_busy(0);
	clr R16
	xcall _check_busy
	.dbline 79
;   L_command=LCD_X;                      //LCD左半屏起始行为0
	ldi R24,192
	sts 8200,R24
	.dbline 80
;   check_busy(1);
	ldi R16,1
	xcall _check_busy
	.dbline 81
;   R_command=LCD_X;                      //LCD右半屏起始行为0
	ldi R24,192
	sts 8196,R24
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 85
; }
; 
; void init_devices(void)
; {
	.dbline 86
;  XMCRA = 0x00;                          //外部存储器控制
	clr R2
	sts 109,R2
	.dbline 87
;  XMCRB = (1<<XMM2)|(1<<XMM1)|(1<<XMM0); //外存储高位地址屏蔽,释放端口C
	ldi R24,7
	sts 108,R24
	.dbline 89
; // mapping_init();
;  port_init();
	xcall _port_init
	.dbline 90
;  MCUCR = 0x80;                          //外部SRAM使能
	ldi R24,128
	out 0x35,R24
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e write_Bchar _write_Bchar fV
;              i -> R20
;              n -> R18
;             cs -> R16
	.even
_write_Bchar::
	xcall push_gset1
	.dbline -1
	.dbline 94
; }
; 
; void write_Bchar(unsigned char cs,unsigned char n)   // 大写字母显示函数
; {
	.dbline 96
;   unsigned char i;
;   for(i=0;i<6;i++)
	clr R20
	xjmp L23
L20:
	.dbline 97
;    {
	.dbline 98
;     if(cs) R_data=big_char[n][i];             //右半屏显示
	tst R16
	breq L24
	.dbline 98
	ldi R24,6
	mul R24,R18
	movw R2,R0
	ldi R24,<_big_char
	ldi R25,>_big_char
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R30,Z
	sts 8198,R30
	xjmp L25
L24:
	.dbline 99
; 	else   L_data=big_char[n][i];             //左半屏显示
	ldi R24,6
	mul R24,R18
	movw R2,R0
	ldi R24,<_big_char
	ldi R25,>_big_char
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R30,Z
	sts 8202,R30
L25:
	.dbline 100
L21:
	.dbline 96
	inc R20
L23:
	.dbline 96
	cpi R20,6
	brlo L20
	.dbline -2
L19:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r n 18 c
	.dbsym r cs 16 c
	.dbend
	.dbfunc e write_Schar _write_Schar fV
;              i -> R20
;              n -> R18
;             cs -> R16
	.even
_write_Schar::
	xcall push_gset1
	.dbline -1
	.dbline 104
;    }  
;  }  	
;  
;  void write_Schar(unsigned char cs,unsigned char n)  // 小写字母显示函数
; {
	.dbline 106
;   unsigned char i;
;   for(i=0;i<6;i++)
	clr R20
	xjmp L30
L27:
	.dbline 107
;    {
	.dbline 108
;     if(cs) R_data=small_char[n][i];            //右半屏显示
	tst R16
	breq L31
	.dbline 108
	ldi R24,6
	mul R24,R18
	movw R2,R0
	ldi R24,<_small_char
	ldi R25,>_small_char
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R30,Z
	sts 8198,R30
	xjmp L32
L31:
	.dbline 109
; 	else   L_data=small_char[n][i];            //左半屏显示
	ldi R24,6
	mul R24,R18
	movw R2,R0
	ldi R24,<_small_char
	ldi R25,>_small_char
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R30,Z
	sts 8202,R30
L32:
	.dbline 110
L28:
	.dbline 106
	inc R20
L30:
	.dbline 106
	cpi R20,6
	brlo L27
	.dbline -2
L26:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r n 18 c
	.dbsym r cs 16 c
	.dbend
	.dbfunc e write_Nchar _write_Nchar fV
;              i -> R20
;              n -> R18
;             cs -> R16
	.even
_write_Nchar::
	xcall push_gset1
	.dbline -1
	.dbline 114
;    }  
;  }
;  
;  void write_Nchar(unsigned char cs,unsigned char n)  //数字显示函数
; {
	.dbline 116
;   unsigned char i;
;   for(i=0;i<6;i++)
	clr R20
	xjmp L37
L34:
	.dbline 117
;    {
	.dbline 118
;     if(cs) R_data=num[n][i];                  //右半屏显示
	tst R16
	breq L38
	.dbline 118
	ldi R24,6
	mul R24,R18
	movw R2,R0
	ldi R24,<_num
	ldi R25,>_num
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R30,Z
	sts 8198,R30
	xjmp L39
L38:
	.dbline 119
; 	else   L_data=num[n][i];                  //左半屏显示
	ldi R24,6
	mul R24,R18
	movw R2,R0
	ldi R24,<_num
	ldi R25,>_num
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R30,Z
	sts 8202,R30
L39:
	.dbline 120
L35:
	.dbline 116
	inc R20
L37:
	.dbline 116
	cpi R20,6
	brlo L34
	.dbline -2
L33:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r n 18 c
	.dbsym r cs 16 c
	.dbend
	.area data(ram, con, rel)
	.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
L41:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
	.area text(rom, con, rel)
	.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
	.dbfunc e display_char _display_char fV
	.dbsym s adder L41 c
;              i -> R20
	.even
_display_char::
	xcall push_gset1
	.dbline -1
	.dbline 124
;    }  
;  }
;      
;  void display_char(void)                    //字符显示函数
; {  
	.dbline 127
;   unsigned char i;
;   static unsigned char adder=0;
;   write_Bchar(0, 24);
	ldi R18,24
	clr R16
	xcall _write_Bchar
	.dbline 128
;   write_Schar(0, 14);
	ldi R18,14
	clr R16
	xcall _write_Schar
	.dbline 129
;   write_Schar(0, 20);
	ldi R18,20
	clr R16
	xcall _write_Schar
	.dbline 130
	clr R20
	xjmp L45
L42:
	.dbline 130
	.dbline 130
	clr R2
	sts 8202,R2
	.dbline 130
L43:
	.dbline 130
	inc R20
L45:
	.dbline 130
	cpi R20,4
	brlo L42
	.dbline 131
	ldi R18,7
	clr R16
	xcall _write_Bchar
	.dbline 132
	ldi R18,20
	clr R16
	xcall _write_Schar
	.dbline 133
	lds R24,L41
	subi R24,255    ; addi 1
	sts L41,R24
	.dbline 134
	ldi R24,15
	lds R2,L41
	cp R24,R2
	brsh L46
	.dbline 134
	.dbline 134
	ldi R24,1
	sts _flag,R24
	.dbline 134
	clr R2
	sts L41,R2
	.dbline 134
L46:
	.dbline -2
L40:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e main _main fV
;              i -> <dead>
	.even
_main::
	.dbline -1
	.dbline 139
;   for(i=0;i<4;i++){L_data=0x00;}
;   write_Bchar(0, 7);
;   write_Schar(0, 20);
;   adder++;
;   if(adder>15){flag=1;adder=0;}
; }
; 
; 
; void main(void)
; {
	.dbline 141
;   unsigned char i;
;   init_devices();
	xcall _init_devices
	.dbline 142
;   LCD_Clean();
	xcall _LCD_Clean
	.dbline 143
;   LCD_Init();
	xcall _LCD_Init
	.dbline 144
;   display_char(); 
	xcall _display_char
	.dbline -2
L48:
	.dbline 0 ; func end
	ret
	.dbsym l i 1 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\单片机源程序\AVR单片机程序\Mega128\LCD128~1\lcd.c
_flag::
	.blkb 1
	.dbsym e flag _flag c

⌨️ 快捷键说明

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