📄 2.s
字号:
.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 + -