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

📄 mainok.s

📁 mega8按键数码显示程序
💻 S
字号:
	.module mainok.c
	.area data(ram, con, rel)
_num::
	.blkb 2
	.area idata
	.byte 63,6
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 91,'O
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 'f,'m
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 125,39
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 127,'o
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 255,0
	.area data(ram, con, rel)
	.dbfile D:\教学\2008bishe\avrprog\mainok.c
	.dbsym e num _num A[12:12]c
_temp::
	.blkb 2
	.area idata
	.byte 30,35
	.area data(ram, con, rel)
	.dbfile D:\教学\2008bishe\avrprog\mainok.c
	.blkb 2
	.area idata
	.byte 40,45
	.area data(ram, con, rel)
	.dbfile D:\教学\2008bishe\avrprog\mainok.c
	.dbsym e temp _temp A[4:4]c
	.area text(rom, con, rel)
	.dbfile D:\教学\2008bishe\avrprog\mainok.c
	.dbfunc e delay _delay fV
;             dt -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 50
; /***************************************/
; /*          使用内部震荡,设置4mhz     */
; /****************************************/
;  //2007.12---xieming
;  //  1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
; //  2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
; //     通信波特率为19200(Tools->Environment Options...)。
; //  3、将PC屏幕光标定位于调试窗口中
; #include "iom8v.h"
; #include "macros.h"
; #define osccal 0x7d  
; //内部RC校正常数
; #define Vref   500//参考电压值
; 
; unsigned int adc_rel;//AD转换结果
; unsigned char adc_mux;//AD通道
; 
; #define set_bit(x,y)  (x|=(1<<y))
; #define clr_bit(x,y)  (x&=~(1<<y))
; 
; //PORT B
; #define OUT1 5
; #define OUT2  4
; 
; unsigned int disnm,smode;
; unsigned char dis[4];
; unsigned char num[12]={
; 0x3f,//------------------0
; 0x06,//------------------1
; 0x5b,//------------------2
; 0x4f,//------------------3
; 0x66,//------------------4
; 0x6d,//------------------5
; 0x7d,//------------------6
; 0x27,//------------------7
; 0x7f,//------------------8
; 0x6f,//------------------9
; 0xff,//------------------8.
; 0x00//-------------------none
; };
; 
; 
; unsigned char temp[4]={30,35,40,45};
; 
; unsigned char sd,su,se,sm;
; 
; 
; 
; void delay(int dt) //delay=(0.95dt+1.76)us 
; {while(dt) 
	rjmp L3
L2:
	.dbline 51
	.dbline 51
	subi R16,1
	sbci R17,0
	.dbline 52
	nop
	.dbline 53
	nop
	.dbline 54
	nop
	.dbline 55
L3:
	.dbline 50
	cpi R16,0
	cpc R16,R17
	brne L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r dt 16 I
	.dbend
	.dbfunc e display _display fV
;              i -> R20
	.even
_display::
	rcall push_gset1
	.dbline -1
	.dbline 58
; {dt--; 
; asm("nop"); 
; asm("nop"); 
; asm("nop"); 
; } 
; } 
; void display(void)
; {unsigned char i;
	.dbline 60
;  
;  for(i=0;i<4;i++)
	clr R20
	rjmp L9
L6:
	.dbline 61
	.dbline 61
	ldi R16,1
	mov R17,R20
	rcall lsl8
	mov R2,R16
	com R2
	in R3,0x12
	and R3,R2
	out 0x12,R3
	.dbline 62
	ldi R24,<_dis
	ldi R25,>_dis
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<_num
	ldi R25,>_num
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x18,R2
	.dbline 63
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 64
	ldi R16,1
	mov R17,R20
	rcall lsl8
	in R2,0x12
	or R2,R16
	out 0x12,R2
	.dbline 65
L7:
	.dbline 60
	inc R20
L9:
	.dbline 60
	cpi R20,4
	brlo L6
	.dbline -2
L5:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e keyscan _keyscan fc
;             tp -> R22
;          keyst -> R20
	.even
_keyscan::
	rcall push_gset2
	.dbline -1
	.dbline 70
;   {  clr_bit(PORTD,i);
;     PORTB=num[dis[i]];
;     delay(10);
; 	set_bit(PORTD,i);
;    }
;   
; }
; 
; unsigned char  keyscan(void)
; { unsigned char keyst,tp;
	.dbline 71
;   keyst=PINC;
	in R20,0x13
	.dbline 72
;   delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 73
;   tp=PINC;
	in R22,0x13
	.dbline 74
;   if(tp!=keyst) return 0;
	cp R22,R20
	breq L11
	.dbline 74
	clr R16
	rjmp L10
L11:
	.dbline 75
;   keyst=keyst&0x0f;
	andi R20,15
	.dbline 76
;   if(keyst==0x0f)
	cpi R20,15
	brne L13
	.dbline 77
;    {sd=0;su=0;se=0;sm=0;
	.dbline 77
	clr R2
	sts _sd,R2
	.dbline 77
	sts _su,R2
	.dbline 77
	sts _se,R2
	.dbline 77
	sts _sm,R2
	.dbline 78
;    return 0;//no button
	clr R16
	rjmp L10
L13:
	.dbline 81
	.dbline 81
	lds R2,_sd
	tst R2
	brne L19
	lds R2,_se
	tst R2
	brne L19
	lds R2,_su
	tst R2
	brne L19
	lds R2,_sm
	tst R2
	breq L15
L19:
	.dbline 81
;    }
;    else
;    {if(sd||se||su||sm) return 0;
	clr R16
	rjmp L10
L15:
	.dbline 82
;          if((keyst&1)==0) {sd=1;return 1;} //down
	sbrc R20,0
	rjmp L20
	.dbline 82
	.dbline 82
	ldi R24,1
	sts _sd,R24
	.dbline 82
	ldi R16,1
	rjmp L10
L20:
	.dbline 83
;     else if((keyst&2)==0) {su=1;return 2;}//up
	sbrc R20,1
	rjmp L22
	.dbline 83
	.dbline 83
	ldi R24,1
	sts _su,R24
	.dbline 83
	ldi R16,2
	rjmp L10
L22:
	.dbline 84
; 	else if((keyst&4)==0) {se=1;return 3;}//enter
	sbrc R20,2
	rjmp L24
	.dbline 84
	.dbline 84
	ldi R24,1
	sts _se,R24
	.dbline 84
	ldi R16,3
	rjmp L10
L24:
	.dbline 85
;     else if((keyst&8)==0) {sm=1;return 4;}//mode
	sbrc R20,3
	rjmp L26
	.dbline 85
	.dbline 85
	ldi R24,1
	sts _sm,R24
	.dbline 85
	ldi R16,4
L26:
	.dbline 86
; 	}
	.dbline -2
L10:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r tp 22 c
	.dbsym r keyst 20 c
	.dbend
	.dbfunc e main _main fV
;              j -> <dead>
;              i -> R20,R21
;          keynm -> R22,R23
	.even
_main::
	.dbline -1
	.dbline 90
; }
; 
; void main(void) 
; {
	.dbline 91
; unsigned int j,keynm,i=0;
	clr R20
	clr R21
	.dbline 94
; 
; 
;     DDRB=0xff;/*PORTb is outPUT PORT*/
	ldi R24,255
	out 0x17,R24
	.dbline 95
; 	PORTB=0xfF;//
	out 0x18,R24
	.dbline 96
; 	DDRD=0xff;	//
	out 0x11,R24
	.dbline 97
; 	PORTD=0x3f;	//
	ldi R24,63
	out 0x12,R24
	.dbline 99
; 	
;     DDRC=0x00;/* input */
	clr R2
	out 0x14,R2
	.dbline 100
; 	PORTC=0x0f;/* pullup enable */
	ldi R24,15
	out 0x15,R24
	rjmp L30
L29:
	.dbline 104
; 
; 
; while(1) 
;   {
	.dbline 111
; 
;   
;   //dis[0]=11;dis[1]=11;dis[2]=11;dis[3]=11;
;  
;  
;  
;   keynm=keyscan();
	rcall _keyscan
	mov R22,R16
	clr R23
	.dbline 112
;   if(keynm==4)//set mode
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	brne L32
	.dbline 113
;     {smode=smode+1;
	.dbline 113
	lds R24,_smode
	lds R25,_smode+1
	adiw R24,1
	sts _smode+1,R25
	sts _smode,R24
	.dbline 114
; 	if(smode==5) smode=1;
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brne L34
	.dbline 114
	ldi R24,1
	ldi R25,0
	sts _smode+1,R25
	sts _smode,R24
L34:
	.dbline 115
; 	 dis[3]=4;
	ldi R24,4
	sts _dis+3,R24
	.dbline 116
; 	 display();
	rcall _display
	.dbline 117
; 	}
	rjmp L33
L32:
	.dbline 118
;   else if(keynm==3)//enter
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	brne L37
	.dbline 119
;     {smode=0;
	.dbline 119
	clr R2
	clr R3
	sts _smode+1,R3
	sts _smode,R2
	.dbline 121
; //save set value
; 	}
L37:
L33:
	.dbline 123
; 	
;   if(smode)
	lds R2,_smode
	lds R3,_smode+1
	tst R2
	brne X1
	tst R3
	brne X4
	rjmp L39
X4:
X1:
	.dbline 124
; 	{i=smode-1;
	.dbline 124
	lds R20,_smode
	lds R21,_smode+1
	subi R20,1
	sbci R21,0
	.dbline 125
; 	 switch(keynm)
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	brne X5
	rjmp L64
X5:
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L43
	rjmp L42
X2:
	.dbline 126
; 	   {case 2:
L43:
	.dbline 127
; 	    temp[i]++;
	ldi R24,<_temp
	ldi R25,>_temp
	movw R2,R20
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,255    ; addi 1
	std z+0,R24
	.dbline 128
; 		if(temp[0]==temp[1])temp[0]=temp[1]-1;
	lds R2,_temp+1
	lds R3,_temp
	cp R3,R2
	brne L44
	.dbline 128
	mov R24,R2
	subi R24,1
	sts _temp,R24
L44:
	.dbline 129
; 		if(temp[1]==temp[2])temp[1]=temp[2]-1;
	lds R2,_temp+2
	lds R3,_temp+1
	cp R3,R2
	brne L48
	.dbline 129
	mov R24,R2
	subi R24,1
	sts _temp+1,R24
L48:
	.dbline 130
; 		if(temp[2]==temp[3])temp[2]=temp[3]-1;
	lds R2,_temp+3
	lds R3,_temp+2
	cp R3,R2
	brne L54
	.dbline 130
	mov R24,R2
	subi R24,1
	sts _temp+2,R24
L54:
	.dbline 131
; 		if(temp[3]==99)temp[3]=98;
	lds R24,_temp+3
	cpi R24,99
	breq X6
	rjmp L42
X6:
	.dbline 131
	ldi R24,98
	sts _temp+3,R24
	.dbline 132
; 	    break;
	rjmp L42
L64:
	.dbline 135
; 		
; 		case 1:
; 		temp[i]--;
	ldi R24,<_temp
	ldi R25,>_temp
	movw R2,R20
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,1
	std z+0,R24
	.dbline 136
; 		if(temp[0]==0)temp[0]=1;
	lds R2,_temp
	tst R2
	brne L65
	.dbline 136
	ldi R24,1
	sts _temp,R24
L65:
	.dbline 137
; 		if(temp[1]==temp[0])temp[1]=temp[0]+1;
	lds R2,_temp
	lds R3,_temp+1
	cp R3,R2
	brne L67
	.dbline 137
	mov R24,R2
	subi R24,255    ; addi 1
	sts _temp+1,R24
L67:
	.dbline 138
; 		if(temp[2]==temp[1])temp[2]=temp[1]+1;
	lds R2,_temp+1
	lds R3,_temp+2
	cp R3,R2
	brne L71
	.dbline 138
	mov R24,R2
	subi R24,255    ; addi 1
	sts _temp+2,R24
L71:
	.dbline 139
; 		if(temp[3]==temp[2])temp[3]=temp[2]+1;
	lds R2,_temp+2
	lds R3,_temp+3
	cp R3,R2
	brne L42
	.dbline 139
	mov R24,R2
	subi R24,255    ; addi 1
	sts _temp+3,R24
	.dbline 140
; 		break;
	.dbline 141
; 		default:break;
L42:
	.dbline 143
; 	   }
; 	dis[0]=smode;dis[1]=11;
	lds R2,_smode
	lds R3,_smode+1
	sts _dis,R2
	.dbline 143
	ldi R24,11
	sts _dis+1,R24
	.dbline 144
; 	dis[2]=temp[i]/10;
	ldi R24,<_temp
	ldi R25,>_temp
	movw R30,R20
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldi R17,10
	rcall div8u
	sts _dis+2,R16
	.dbline 145
;     dis[3]=temp[i]%10;
	ldi R24,<_temp
	ldi R25,>_temp
	movw R30,R20
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	ldi R17,10
	rcall mod8u
	sts _dis+3,R16
	.dbline 146
; 	display();
	rcall _display
	.dbline 147
; 	}
	rjmp L40
L39:
	.dbline 149
;   else
;   {
	.dbline 152
;   //disnm=ADC;
;     //disnm=ADC;
;    dis[0]=disnm/1000;
	ldi R18,1000
	ldi R19,3
	lds R16,_disnm
	lds R17,_disnm+1
	rcall div16u
	sts _dis,R16
	.dbline 153
;    dis[1]=disnm/100;dis[1]=dis[1]%10;
	ldi R18,100
	ldi R19,0
	lds R16,_disnm
	lds R17,_disnm+1
	rcall div16u
	sts _dis+1,R16
	.dbline 153
	ldi R17,10
	rcall mod8u
	sts _dis+1,R16
	.dbline 154
;    dis[2]=disnm/10;dis[2]=dis[2]%10;
	ldi R18,10
	ldi R19,0
	lds R16,_disnm
	lds R17,_disnm+1
	rcall div16u
	sts _dis+2,R16
	.dbline 154
	ldi R17,10
	rcall mod8u
	sts _dis+2,R16
	.dbline 155
;    dis[3]=disnm%10;
	ldi R18,10
	ldi R19,0
	lds R16,_disnm
	lds R17,_disnm+1
	rcall mod16u
	sts _dis+3,R16
	.dbline 157
;    
;    display();
	rcall _display
	.dbline 158
;    }
L40:
	.dbline 159
L30:
	.dbline 103
	rjmp L29
X3:
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbsym l j 1 i
	.dbsym r i 20 i
	.dbsym r keynm 22 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\教学\2008bishe\avrprog\mainok.c
_sm::
	.blkb 1
	.dbsym e sm _sm c
_se::
	.blkb 1
	.dbsym e se _se c
_su::
	.blkb 1
	.dbsym e su _su c
_sd::
	.blkb 1
	.dbsym e sd _sd c
_dis::
	.blkb 4
	.dbsym e dis _dis A[4:4]c
_smode::
	.blkb 2
	.dbsym e smode _smode i
_disnm::
	.blkb 2
	.dbsym e disnm _disnm i
_adc_mux::
	.blkb 1
	.dbsym e adc_mux _adc_mux c
_adc_rel::
	.blkb 2
	.dbsym e adc_rel _adc_rel i

⌨️ 快捷键说明

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