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

📄 2.s

📁 万年历 megal128 iccavr开发平台
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module _2.c
	.area data(ram, con, rel)
_second::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e second _second c
_minute::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e minute _minute c
_hour::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e hour _hour c
_day::
	.blkb 1
	.area idata
	.byte 4
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e day _day c
_days::
	.blkb 1
	.area idata
	.byte 11
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e days _days c
_month::
	.blkb 1
	.area idata
	.byte 8
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e month _month c
_year::
	.blkb 2
	.area idata
	.word 2005
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e year _year i
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e flag _flag c
_lcd_buff::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e lcd_buff _lcd_buff A[4:4]c
_lcd_buff1::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbsym e lcd_buff1 _lcd_buff1 A[9:9]c
	.area lit(rom, con, rel)
_biao1::
	.byte 50,22
	.byte 40,43
	.byte 46,33
	.byte 40,48
	.byte 38,36
	.byte 52,40
	.dbsym e biao1 _biao1 A[12:12]kc
_biao2::
	.byte 27,94
	.byte 93,36
	.byte 'E,'Y
	.byte 53,39
	.byte 58,'J
	.byte 34,53
	.dbsym e biao2 _biao2 A[12:12]kc
_table::
	.byte 48,49
	.byte 50,51
	.byte 52,53
	.byte 54,55
	.byte 56,57
	.byte 'A,'B
	.byte 'C,'D
	.byte 'E,'F
	.dbsym e table _table A[16:16]kc
	.area text(rom, con, rel)
	.dbfile E:\ATMEGA~1\万年历实验\2.c
	.dbfunc e delay _delay fV
;              k -> R20,R21
;              x -> R16,R17
	.even
_delay::
	xcall push_gset1
	.dbline -1
	.dbline 24
; //李伟于9月3号完成
; #include<iom128v.h>
; /*定义OCMJ4X8端口*/
; //DATA_PORT=PORTA
; #define data_port PORTA
; //ASK=PORTE.6
; #define ask (PINE&0x40)
; //ANSWER=PORTE.7
; #define set_answer asm("sbi 0x03,7")
; #define clr_answer asm("cbi 0x03,7")
; //RESTE=PORTC.3
; #define set_reset asm("sbi 0x15,3")
; #define clr_reset asm("cbi 0x15,3")
; #define wait  asm("nop\n nop")
; unsigned char second=0,minute=0,hour=0,day=4,days=11,month=8;
; unsigned int year=2005;
; unsigned char flag=0;
; unsigned char lcd_buff[4]={0,0,0,0};//放小时,分钟
; unsigned char lcd_buff1[9]={0,0,0,0,0,0,0,0,0};//相当与一个地址,存放月,日
; const unsigned char biao1[]={50,22,40,43,46,33,40,48,38,36,52,40};
; const unsigned char biao2[]={27,94,93,36,69,89,53,39,58,74,34,53};
; const unsigned char table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
; void delay(unsigned int x)
; {
	.dbline 26
;   unsigned int k;
;   for(k=0;k<x;k++)
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 27
L3:
	.dbline 26
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 26
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r k 20 i
	.dbsym r x 16 i
	.dbend
	.dbfunc e ocmj_init _ocmj_init fV
	.even
_ocmj_init::
	.dbline -1
	.dbline 30
;   ;
; }
; void ocmj_init(void)
; {
	.dbline 31
;  MCUCR=0;
	clr R2
	out 0x35,R2
	.dbline 32
;  DDRA=0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 33
;  PORTA=0xff;
	out 0x1b,R24
	.dbline 34
;  DDRE=0b10000000;
	ldi R24,128
	out 0x2,R24
	.dbline 35
;  PORTE=0xff;
	ldi R24,255
	out 0x3,R24
	.dbline 36
;  clr_reset;//LCD复位
	cbi 0x15,3
	.dbline 37
;  delay(10);
	ldi R16,10
	ldi R17,0
	xcall _delay
	.dbline 38
;  set_reset;
	sbi 0x15,3
	.dbline 39
;  clr_answer;
	cbi 0x03,7
	.dbline 40
;  delay(2);
	ldi R16,2
	ldi R17,0
	xcall _delay
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ocmj_write _ocmj_write fV
;           data -> R16
	.even
_ocmj_write::
	.dbline -1
	.dbline 46
; }
; /**********************************************/
; 	 /* 写数据到LCD  */
; /**********************************************/
; void ocmj_write(unsigned char data)
; {
L8:
	.dbline 48
L9:
	.dbline 47
;  while(ask!=0)
	sbic 0x1,6
	rjmp L8
	.dbline 49
;   ;
;  data_port=data;
	out 0x1b,R16
	.dbline 50
;  wait;
	nop
	 nop
	.dbline 51
;  set_answer;
	sbi 0x03,7
	.dbline 52
;  wait;
	nop
	 nop
L11:
	.dbline 54
L12:
	.dbline 53
;  while(ask==0)
	sbis 0x1,6
	rjmp L11
	.dbline 55
;   ;		
;  clr_answer;
	cbi 0x03,7
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e write_ASCII _write_ASCII fV
;           data -> y+6
;             yy -> y+4
;             xx -> R20,R21
;           type -> R22,R23
	.even
_write_ASCII::
	xcall push_gset2
	movw R20,R18
	movw R22,R16
	.dbline -1
	.dbline 61
; }
; /**********************************************/
; 	 /* 写ASCII码初始化  */
; /**********************************************/
; void write_ASCII(unsigned type,unsigned xx,unsigned yy,unsigned data)
; {
	.dbline 62
;     ocmj_write(type);
	mov R16,R22
	xcall _ocmj_write
	.dbline 63
;     ocmj_write(xx);
	mov R16,R20
	xcall _ocmj_write
	.dbline 64
;     ocmj_write(yy);
	ldd R16,y+4
	ldd R17,y+5
	xcall _ocmj_write
	.dbline 65
;     ocmj_write(data);
	ldd R16,y+6
	ldd R17,y+7
	xcall _ocmj_write
	.dbline -2
L14:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data 6 i
	.dbsym l yy 4 i
	.dbsym r xx 20 i
	.dbsym r type 22 i
	.dbend
	.dbfunc e write_hazi _write_hazi fV
;          data2 -> y+6
;          data1 -> y+4
;             yy -> R20,R21
;             xx -> R22,R23
	.even
_write_hazi::
	xcall push_gset2
	movw R20,R18
	movw R22,R16
	.dbline -1
	.dbline 71
; }
; /**********************************************/
; 	 /* 写汉字初始化  */
; /**********************************************/
; void write_hazi(unsigned xx,unsigned yy,unsigned data1,unsigned data2)
; {
	.dbline 72
;     ocmj_write(0xf0);
	ldi R16,240
	xcall _ocmj_write
	.dbline 73
;     ocmj_write(xx);
	mov R16,R22
	xcall _ocmj_write
	.dbline 74
;     ocmj_write(yy);
	mov R16,R20
	xcall _ocmj_write
	.dbline 75
;     ocmj_write(data1);
	ldd R16,y+4
	ldd R17,y+5
	xcall _ocmj_write
	.dbline 76
; 	ocmj_write(data2);
	ldd R16,y+6
	ldd R17,y+7
	xcall _ocmj_write
	.dbline -2
L15:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data2 6 i
	.dbsym l data1 4 i
	.dbsym r yy 20 i
	.dbsym r xx 22 i
	.dbend
	.dbfunc e scan_key _scan_key fc
;              i -> R22
;           temp -> R10
	.even
_scan_key::
	xcall push_gset3
	.dbline -1
	.dbline 82
; }
; /**********************************************/
; 	 /* 键盘子程序  */
; /**********************************************/
; unsigned char scan_key(void)
; {
	.dbline 84
;  unsigned char i,temp;
;  DDRB=0x0f;	
	ldi R24,15
	out 0x17,R24
	.dbline 85
;  PORTB=0xff;	
	ldi R24,255
	out 0x18,R24
	.dbline 86
;  for(i=0;i<4;i++)
	clr R22
	xjmp L20
L17:
	.dbline 87
;   {
	.dbline 88
;    PORTB=~(1<<i); //键盘线扫描
	ldi R16,1
	mov R17,R22
	xcall lsl8
	mov R2,R16
	com R2
	out 0x18,R2
	.dbline 89
;    delay(30);   //等待低电平稳定
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 90
;    temp=PINB&0xf0;//读取键盘扫描信号,屏蔽低四位
	in R24,0x16
	andi R24,240
	mov R10,R24
	.dbline 91
;    if (temp!=0xf0)//如果有键按下,延时10ms消抖
	cpi R24,240
	brne X1
	xjmp L21
X1:
	.dbline 92
;     {              //本程序用display代替10ms延时,
	.dbline 93
;      delay(3000); //可消除显示抖动
	ldi R16,3000
	ldi R17,11
	xcall _delay
	.dbline 94
;      temp=PINB&0xf0;//再读键盘
	in R24,0x16
	andi R24,240
	mov R10,R24
	.dbline 95
;      if (temp!=0xf0)
	cpi R24,240
	brne X2
	xjmp L23
X2:
	.dbline 96
;       {
	.dbline 97
;         temp&=0xf0;
	andi R24,240
	mov R10,R24
	.dbline 98
;         switch(temp) //计算键值
	mov R20,R24
	clr R21
	cpi R20,176
	ldi R30,0
	cpc R21,R30
	breq L29
	ldi R24,176
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L33
L32:
	cpi R20,112
	ldi R30,0
	cpc R21,R30
	breq L28
	xjmp L26
L33:
	cpi R20,208
	ldi R30,0
	cpc R21,R30
	breq L30
	cpi R20,208
	ldi R30,0
	cpc R21,R30
	brlt L26
L34:
	cpi R20,224
	ldi R30,0
	cpc R21,R30
	breq L31
	xjmp L26
X0:
	.dbline 99
;          {
L28:
	.dbline 100
; 		  case 0x70:temp=15-(3-i)*4;break;
	ldi R17,3
	sub R17,R22
	ldi R16,4
	muls R16,R17
	ldi R24,15
	mov R10,R24
	sub R10,R0
	.dbline 100
	xjmp L26
L29:
	.dbline 101
;           case 0xb0:temp=14-(3-i)*4;break;
	ldi R17,3
	sub R17,R22
	ldi R16,4
	muls R16,R17
	ldi R24,14
	mov R10,R24
	sub R10,R0
	.dbline 101
	xjmp L26
L30:
	.dbline 102
;           case 0xd0:temp=13-(3-i)*4;break;
	ldi R17,3
	sub R17,R22
	ldi R16,4
	muls R16,R17
	ldi R24,13
	mov R10,R24
	sub R10,R0
	.dbline 102
	xjmp L26
L31:
	.dbline 103
;           case 0xe0:temp=12-(3-i)*4;break;
	ldi R17,3
	sub R17,R22
	ldi R16,4
	muls R16,R17
	ldi R24,12
	mov R10,R24
	sub R10,R0
	.dbline 103
	.dbline 104
;           default:break;				
L26:
	.dbline 106
;           }
; 		 return temp;
	mov R16,R10
	xjmp L16
L23:
	.dbline 108
; 		}
; 	  }
L21:
	.dbline 109
L18:
	.dbline 86
	inc R22
L20:
	.dbline 86
	cpi R22,4
	brsh X3
	xjmp L17
X3:
	.dbline 110
;     }
;    return 0x00;//无键按下
	clr R16
	.dbline -2
L16:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 22 c
	.dbsym r temp 10 c
	.dbend
	.dbfunc e time_display _time_display fV
	.even
_time_display::
	sbiw R28,4
	.dbline -1
	.dbline 116
; }	
; /**********************************************/
; 	 /* LCD显示小时分钟秒*/
; /**********************************************/
; void time_display(void)
; {
	.dbline 117
; write_ASCII(0xf9,4,0,table[hour/10]);//小时高位
	ldi R18,10
	ldi R19,0
	lds R16,_hour
	clr R17
	xcall div16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	std y+3,R3
	std y+2,R2
	clr R2
	std y+1,R3
	std y+0,R2
	ldi R18,4
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 118
; write_ASCII(0xf9,5,0,table[hour%10]);//小时地位
	ldi R18,10
	ldi R19,0
	lds R16,_hour
	clr R17
	xcall mod16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	std y+3,R3
	std y+2,R2
	clr R2
	std y+1,R3
	std y+0,R2
	ldi R18,5
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 119
; write_ASCII(0xf9,6,0,58); //:
	ldi R24,58
	ldi R25,0
	std y+3,R25
	std y+2,R24
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,6
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 120
; write_ASCII(0xf9,7,0,table[minute/10]);//分钟高位
	ldi R18,10
	ldi R19,0
	lds R16,_minute
	clr R17
	xcall div16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	std y+3,R3
	std y+2,R2
	clr R2
	std y+1,R3
	std y+0,R2
	ldi R18,7
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 121
; write_ASCII(0xf9,8,0,table[minute%10]);//分钟地位
	ldi R18,10
	ldi R19,0
	lds R16,_minute
	clr R17
	xcall mod16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	std y+3,R3
	std y+2,R2
	clr R2
	std y+1,R3
	std y+0,R2
	ldi R18,8
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 122
; write_ASCII(0xf9,9,0,58); //:	
	ldi R24,58
	ldi R25,0
	std y+3,R25
	std y+2,R24
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,9
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 123
; write_ASCII(0xf9,10,0,table[second/10]);//秒钟高位	
	ldi R18,10
	ldi R19,0
	lds R16,_second
	clr R17
	xcall div16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	std y+3,R3
	std y+2,R2
	clr R2
	std y+1,R3
	std y+0,R2
	ldi R18,10
	ldi R19,0
	ldi R16,249
	ldi R17,0
	xcall _write_ASCII
	.dbline 124
; write_ASCII(0xf9,11,0,table[second%10]);//秒钟地位
	ldi R18,10
	ldi R19,0
	lds R16,_second
	clr R17
	xcall mod16s
	movw R30,R16
	ldi R24,<_table
	ldi R25,>_table
	add R30,R24
	adc R31,R25
	lpm R2,Z
	clr R3
	std y+3,R3
	std y+2,R2
	clr R2
	std y+1,R3
	std y+0,R2
	ldi R18,11
	ldi R19,0

⌨️ 快捷键说明

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