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

📄 lcd1602.s

📁 用AVR及1602LCD在PROTEUS环境下仿真
💻 S
📖 第 1 页 / 共 3 页
字号:
	std z+0,R2
	.dbline -2
L30:
	adiw R28,2
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l a 0 A[2:2]c
	.dbsym r i 20 c
	.dbsym r str 22 pc
	.dbsym r t 20 c
	.dbend
	.dbfunc e IntToStr1 _IntToStr1 fV
;              j -> <dead>
;              a -> y+0
;              i -> R20
;            str -> R22,R23
;              t -> R20,R21
	.even
_IntToStr1::
	xcall push_gset2
	movw R22,R18
	movw R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 56
	.dbline 59
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	std y+0,R16
	.dbline 60
	ldi R18,100
	ldi R19,0
	movw R16,R20
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	std y+1,R16
	.dbline 61
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	std y+2,R16
	.dbline 62
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16u
	std y+3,R16
	.dbline 63
	clr R20
	xjmp L47
L44:
	.dbline 64
	movw R24,R28
	mov R2,R20
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,208    ; addi 48
	std z+0,R24
L45:
	.dbline 63
	inc R20
L47:
	.dbline 63
	cpi R20,4
	brlo L44
	.dbline 65
	clr R20
	xjmp L51
L48:
	.dbline 66
	.dbline 67
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R30,R22
	std z+0,R2
	.dbline 68
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 69
L49:
	.dbline 65
	inc R20
L51:
	.dbline 65
	cpi R20,4
	brlo L48
	.dbline 70
	clr R2
	movw R30,R22
	std z+0,R2
	.dbline -2
L40:
	adiw R28,4
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l j 1 c
	.dbsym l a 0 A[4:4]c
	.dbsym r i 20 c
	.dbsym r str 22 pc
	.dbsym r t 20 i
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 75
	.dbline 80
	xcall _init_devices
	.dbline 81
	xcall _lcd_init
	.dbline 82
	clr R18
	clr R16
	xcall _GotoXY
	.dbline 83
	ldi R16,<L53
	ldi R17,>L53
	xcall _Print
	.dbline 84
	ldi R18,1
	clr R16
	xcall _GotoXY
	.dbline 85
	nop
	.dbline 86
	ldi R16,<L54
	ldi R17,>L54
	xcall _Print
	.dbline 88
	clr R18
	ldi R16,13
	xcall _GotoXY
	.dbline 89
	ldi R16,<L55
	ldi R17,>L55
	xcall _Print
	.dbline 90
	clr R18
	ldi R16,10
	xcall _GotoXY
	.dbline 91
	ldi R16,<L55
	ldi R17,>L55
	xcall _Print
	xjmp L57
L56:
	.dbline 94
	.dbline 96
	wdr
	.dbline 97
	ldi R18,<_second
	ldi R19,>_second
	lds R16,_sec
	xcall _IntToStr
	.dbline 98
	ldi R18,1
	ldi R16,12
	xcall _GotoXY
	.dbline 99
	lds R24,_time_set
	cpi R24,1
	breq L59
	.dbline 100
	.dbline 101
	ldi R16,<_second
	ldi R17,>_second
	xcall _Print
	.dbline 102
	xjmp L60
L59:
	.dbline 103
	lds R24,_time_set
	cpi R24,1
	brne L61
	.dbline 104
	.dbline 105
	ldi R17,2
	lds R16,_flash_flag
	xcall mod8u
	tst R16
	brne L63
	.dbline 106
	.dbline 107
	ldi R16,<_second
	ldi R17,>_second
	xcall _Print
	.dbline 108
	xjmp L64
L63:
	.dbline 110
	.dbline 111
	ldi R16,<L65
	ldi R17,>L65
	xcall _Print
	.dbline 112
L64:
	.dbline 113
L61:
L60:
	.dbline 115
	ldi R17,2
	lds R16,_flash_flag
	xcall mod8u
	tst R16
	brne L66
	.dbline 116
	.dbline 117
	ldi R18,1
	ldi R16,11
	xcall _GotoXY
	.dbline 118
	ldi R16,<L55
	ldi R17,>L55
	xcall _Print
	.dbline 119
	ldi R18,1
	ldi R16,8
	xcall _GotoXY
	.dbline 120
	ldi R16,<L55
	ldi R17,>L55
	xcall _Print
	.dbline 121
	xjmp L67
L66:
	.dbline 123
	.dbline 124
	ldi R18,1
	ldi R16,11
	xcall _GotoXY
	.dbline 125
	ldi R16,<L68
	ldi R17,>L68
	xcall _Print
	.dbline 126
	ldi R18,1
	ldi R16,8
	xcall _GotoXY
	.dbline 127
	ldi R16,<L68
	ldi R17,>L68
	xcall _Print
	.dbline 128
L67:
	.dbline 130
	ldi R18,<_minute
	ldi R19,>_minute
	lds R16,_min
	xcall _IntToStr
	.dbline 131
	ldi R18,1
	ldi R16,9
	xcall _GotoXY
	.dbline 132
	lds R24,_time_set
	cpi R24,2
	breq L69
	.dbline 133
	.dbline 134
	ldi R16,<_minute
	ldi R17,>_minute
	xcall _Print
	.dbline 135
	xjmp L70
L69:
	.dbline 136
	lds R24,_time_set
	cpi R24,2
	brne L71
	.dbline 137
	.dbline 138
	ldi R17,2
	lds R16,_flash_flag
	xcall mod8u
	tst R16
	brne L73
	.dbline 139
	.dbline 140
	ldi R16,<_minute
	ldi R17,>_minute
	xcall _Print
	.dbline 141
	xjmp L74
L73:
	.dbline 143
	.dbline 144
	ldi R16,<L65
	ldi R17,>L65
	xcall _Print
	.dbline 145
L74:
	.dbline 146
L71:
L70:
	.dbline 148
	ldi R18,<_hour
	ldi R19,>_hour
	lds R16,_hou
	xcall _IntToStr
	.dbline 149
	ldi R18,1
	ldi R16,6
	xcall _GotoXY
	.dbline 150
	lds R24,_time_set
	cpi R24,3
	breq L75
	.dbline 151
	.dbline 152
	ldi R16,<_hour
	ldi R17,>_hour
	xcall _Print
	.dbline 153
	xjmp L76
L75:
	.dbline 154
	lds R24,_time_set
	cpi R24,3
	brne L77
	.dbline 155
	.dbline 156
	ldi R17,2
	lds R16,_flash_flag
	xcall mod8u
	tst R16
	brne L79
	.dbline 157
	.dbline 158
	ldi R16,<_hour
	ldi R17,>_hour
	xcall _Print
	.dbline 159
	xjmp L80
L79:
	.dbline 161
	.dbline 162
	ldi R16,<L65
	ldi R17,>L65
	xcall _Print
	.dbline 163
L80:
	.dbline 164
L77:
L76:
	.dbline 166
	ldi R18,<_Day
	ldi R19,>_Day
	lds R16,_day
	xcall _IntToStr
	.dbline 167
	clr R18
	ldi R16,14
	xcall _GotoXY
	.dbline 168
	lds R24,_time_set
	cpi R24,4
	breq L81
	.dbline 169
	.dbline 170
	ldi R16,<_Day
	ldi R17,>_Day
	xcall _Print
	.dbline 171
	xjmp L82
L81:
	.dbline 172
	lds R24,_time_set
	cpi R24,4
	brne L83
	.dbline 173
	.dbline 174
	ldi R17,2
	lds R16,_flash_flag
	xcall mod8u
	tst R16
	brne L85
	.dbline 175
	.dbline 176
	ldi R16,<_Day
	ldi R17,>_Day
	xcall _Print
	.dbline 177
	xjmp L86
L85:
	.dbline 179
	.dbline 180
	ldi R16,<L65
	ldi R17,>L65
	xcall _Print
	.dbline 181
L86:
	.dbline 182
L83:
L82:
	.dbline 185
	ldi R18,<_Month
	ldi R19,>_Month
	lds R16,_month
	xcall _IntToStr
	.dbline 186
	clr R18
	ldi R16,11
	xcall _GotoXY
	.dbline 187
	lds R24,_time_set
	cpi R24,5
	breq L87
	.dbline 188
	.dbline 189
	ldi R16,<_Month
	ldi R17,>_Month
	xcall _Print
	.dbline 190
	xjmp L88
L87:
	.dbline 191
	lds R24,_time_set
	cpi R24,5
	brne L89
	.dbline 192
	.dbline 193
	ldi R17,2
	lds R16,_flash_flag
	xcall mod8u
	tst R16
	brne L91
	.dbline 194
	.dbline 195
	ldi R16,<_Month
	ldi R17,>_Month
	xcall _Print
	.dbline 196
	xjmp L92
L91:
	.dbline 198
	.dbline 199
	ldi R16,<L65
	ldi R17,>L65
	xcall _Print
	.dbline 200
L92:
	.dbline 201
L89:
L88:
	.dbline 203
	ldi R18,<_Year
	ldi R19,>_Year
	lds R16,_year
	lds R17,_year+1
	xcall _IntToStr1
	.dbline 204
	clr R18
	ldi R16,6
	xcall _GotoXY
	.dbline 205
	lds R24,_time_set
	cpi R24,6
	breq L93
	.dbline 206
	.dbline 207
	ldi R16,<_Year
	ldi R17,>_Year
	xcall _Print
	.dbline 208
	xjmp L94
L93:
	.dbline 209
	lds R24,_time_set
	cpi R24,6
	brne L95
	.dbline 210
	.dbline 211
	ldi R17,2
	lds R16,_flash_flag
	xcall mod8u
	tst R16
	brne L97
	.dbline 212
	.dbline 213
	ldi R16,<_Year
	ldi R17,>_Year
	xcall _Print
	.dbline 214
	xjmp L98
L97:
	.dbline 216
	.dbline 217
	ldi R16,<L99
	ldi R17,>L99
	xcall _Print
	.dbline 218
L98:
	.dbline 219
;   }  
L95:
L94:
	.dbline 220
	wdr
	.dbline 221
L57:
	.dbline 93
	xjmp L56
X2:
	.dbline -2
L52:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\练习\LCD显示1602\lcd1602.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R2
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 228
;   WDR();
;  }
; }
; 
; //******************************************************************
; //每次延时500MS,经过两次延时后,秒位加1;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
	.dbline 230
;  //TIMER1 has overflowed
;   WDR();
	wdr
	.dbline 231
;   flash_flag++;
	lds R24,_flash_flag
	subi R24,255    ; addi 1
	sts _flash_flag,R24
	.dbline 232
;   if((flash_flag%2)==0)//判断是否是一秒
	ldi R17,2
	mov R16,R24
	xcall mod8u
	tst R16
	breq X6
	xjmp L101
X6:
	.dbline 233
;   {
	.dbline 235
;    
;    sec++;   
	lds R24,_sec
	subi R24,255    ; addi 1
	sts _sec,R24
	.dbline 236
;    if(sec==60)  //超过60秒,分加1;秒清0
	cpi R24,60
	brne L103
	.dbline 237
;    {
	.dbline 238
;     min++;
	lds R24,_min
	subi R24,255    ; addi 1
	sts _min,R24
	.dbline 239
;     sec=0;   
	clr R2
	sts _sec,R2
	.dbline 240
;    }
L103:
	.dbline 241
;    if(min==60)            //超过60分,小时位进1,
	lds R24,_min
	cpi R24,60
	brne L105
	.dbline 242
;    {
	.dbline 243
;     hou++;
	lds R24,_hou
	subi R24,255    ; addi 1
	sts _hou,R24
	.dbline 244
;     min=0;   
	clr R2
	sts _min,R2
	.dbline 245
;    }
L105:
	.dbline 246
;    if(hou==24)  	  		 //小时位超过24,则清0         
	lds R24,_hou
	cpi R24,24
	brne L107
	.dbline 247
;    {
	.dbline 248
;     hou=0;
	clr R2
	sts _hou,R2
	.dbline 249
; 	day++;
	lds R24,_day
	subi R24,255    ; addi 1
	sts _day,R24
	.dbline 250
;    }
L107:
	.dbline 251
;    if(((year%4==0)&&(year%100!=0))||(year%400==0))  	 //判断是否为闰年 1为闰年        
	lds R24,_year
	lds R25,_year+1
	andi R24,3
	andi R25,0
	cpi R24,0
	cpc R24,R25
	brne L112
X3:
	ldi R18,100
	ldi R19,0
	lds R16,_year
	lds R17,_year+1
	xcall mod16u
	cpi R16,0
	cpc R16,R17
	brne L111
X4:
L112:
	ldi R18,400
	ldi R19,1
	lds R16,_year
	lds R17,_year+1
	xcall mod16u
	cpi R16,0
	cpc R16,R17
	breq X7
	xjmp L109
X7:
X5:
L111:
	.dbline 252
;    {
	.dbline 253
;     if((month==2)&&(day==30))//闰年2月份是29天
	lds R24,_month
	cpi R24,2
	brne L113
	lds R24,_day
	cpi R24,30
	brne L113
	.dbline 254
; 	{
	.dbline 255
; 	 month++;
	lds R24,_month
	subi R24,255    ; addi 1
	sts _month,R24
	.dbline 256
; 	 day=0;	 	 
	clr R2
	sts _day,R2
	.dbline 257
; 	}
	xjmp L110
L113:
	.dbline 258
; 	else if((month<=7)&&(month%2==0)&&(day==31))//其他月份小于等于7月份的偶数月份是30天
	ldi R24,7
	lds R2,_month
	cp R24,R2
	brlo L115
	ldi R17,2
	mov R16,R2
	xcall mod8u
	tst R16
	brne L115
	lds R24,_day
	cpi R24,31
	brne L115
	.dbline 259
; 	{
	.dbline 260
; 	 month++;
	lds R24,_month
	subi R24,255    ; addi 1
	sts _month,R24
	.dbline 261
; 	 day=0;	  
	clr R2
	sts _day,R2
	.dbline 262
; 	}
	xjmp L110
L115:
	.dbline 263
; 	else if((month<=7)&&(month%2!=0)&&(day==32))//奇数是31天;
	ldi R24,7
	lds R2,_month
	cp R24,R2
	brlo L117
	ldi R17,2
	mov R16,R2
	xcall mod8u
	tst R16
	breq L117
	lds R24,_day
	cpi R24,32
	brne L117
	.dbline 264
; 	{
	.dbline 265
; 	 month++;
	lds R24,_month
	subi R24,255    ; addi 1
	sts _month,R24
	.dbline 266
; 	 day=0;
	clr R2
	sts _day,R2
	.dbline 267
; 	}
	xjmp L110
L117:
	.dbline 268
; 	else if((month>7)&&(month%2==0)&&(day==32))//大于7月份的偶数月份是31天
	ldi R24,7
	lds R2,_month
	cp R24,R2
	brsh L119
	ldi R17,2
	mov R16,R2
	xcall mod8u
	tst R16
	brne L119
	lds R24,_day
	cpi R24,32
	brne L119
	.dbline 269
; 	{
	.dbline 270
; 	 month++;
	lds R24,_month
	subi R24,255    ; addi 1
	sts _month,R24
	.dbline 271
; 	 day=0;	  
	clr R2
	sts _day,R2
	.dbline 272
; 	}
	xjmp L110
L119:
	.dbline 273
; 	else if((month>7)&&(month%2!=0)&&(day==31))//奇数是30天;
	ldi R24,7
	lds R2,_month
	cp R24,R2
	brlo X8
	xjmp L110
X8:
	ldi R17,2
	mov R16,R2
	xcall mod8u
	tst R16
	brne X9
	xjmp L110
X9:
	lds R24,_day
	cpi R24,31
	breq X10
	xjmp L110
X10:
	.dbline 274
; 	{
	.dbline 275
; 	 month++;
	lds R24,_month
	subi R24,255    ; addi 1
	sts _month,R24
	.dbline 276
; 	 day=0;
	clr R2
	sts _day,R2
	.dbline 277
; 	}	
	.dbline 278
;    }
	xjmp L110
L109:
	.dbline 279
;    else if((month==2)&&(day==29))//不是闰年二月份是28天;
	lds R24,_month
	cpi R24,2
	brne L123
	lds R24,_day
	cpi R24,29
	brne L123
	.dbline 280
;    {
	.dbline 281
;     month++;
	lds R24,_month

⌨️ 快捷键说明

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