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

📄 mega8bj.lst

📁 mega8按键数码显示程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    001B E5CF      LDI	R28,0x5F
    001C E0D4      LDI	R29,4
    001D BFCD      OUT	0x3D,R28
    001E BFDE      OUT	0x3E,R29
    001F 51C0      SUBI	R28,0x10
    0020 40D0      SBCI	R29,0
    0021 EA0A      LDI	R16,0xAA
    0022 8308      STD	Y+0,R16
    0023 2400      CLR	R0
    0024 E7E0      LDI	R30,0x70
    0025 E0F0      LDI	R31,0
    0026 E010      LDI	R17,0
    0027 37EF      CPI	R30,0x7F
    0028 07F1      CPC	R31,R17
    0029 F011      BEQ	0x002C
    002A 9201      ST	R0,Z+
    002B CFFB      RJMP	0x0027
    002C 8300      STD	Z+0,R16
    002D E2E6      LDI	R30,0x26
    002E E0F0      LDI	R31,0
    002F E6A0      LDI	R26,0x60
    0030 E0B0      LDI	R27,0
    0031 E010      LDI	R17,0
    0032 33E6      CPI	R30,0x36
    0033 07F1      CPC	R31,R17
    0034 F021      BEQ	0x0039
    0035 95C8      LPM
    0036 9631      ADIW	R30,1
    0037 920D      ST	R0,X+
    0038 CFF9      RJMP	0x0032
    0039 D079      RCALL	_main
_exit:
    003A CFFF      RJMP	_exit
FILE: D:\教学\2008bishe\avrprog\mainok.c
(0001) /***************************************/
(0002) /*          使用内部震荡,设置4mhz     */
(0003) /****************************************/
(0004)  //2007.12---xieming
(0005)  //  1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
(0006) //  2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
(0007) //     通信波特率为19200(Tools->Environment Options...)。
(0008) //  3、将PC屏幕光标定位于调试窗口中
(0009) #include "iom8v.h"
(0010) #include "macros.h"
(0011) #define osccal 0x7d  
(0012) //内部RC校正常数
(0013) #define Vref   500//参考电压值
(0014) 
(0015) unsigned int adc_rel;//AD转换结果
(0016) unsigned char adc_mux;//AD通道
(0017) 
(0018) #define set_bit(x,y)  (x|=(1<<y))
(0019) #define clr_bit(x,y)  (x&=~(1<<y))
(0020) 
(0021) //PORT B
(0022) #define OUT1 5
(0023) #define OUT2  4
(0024) 
(0025) unsigned int disnm,smode;
(0026) unsigned char dis[4];
(0027) unsigned char num[12]={
(0028) 0x3f,//------------------0
(0029) 0x06,//------------------1
(0030) 0x5b,//------------------2
(0031) 0x4f,//------------------3
(0032) 0x66,//------------------4
(0033) 0x6d,//------------------5
(0034) 0x7d,//------------------6
(0035) 0x27,//------------------7
(0036) 0x7f,//------------------8
(0037) 0x6f,//------------------9
(0038) 0xff,//------------------8.
(0039) 0x00//-------------------none
(0040) };
(0041) 
(0042) 
(0043) unsigned char temp[4]={30,35,40,45};
(0044) 
(0045) unsigned char sd,su,se,sm;
(0046) 
(0047) 
(0048) 
(0049) void delay(int dt) //delay=(0.95dt+1.76)us 
(0050) {while(dt) 
_delay:
  dt                   --> R16
    003B C005      RJMP	0x0041
(0051) {dt--; 
    003C 5001      SUBI	R16,1
    003D 4010      SBCI	R17,0
(0052) asm("nop"); 
    003E 0000      NOP
(0053) asm("nop"); 
    003F 0000      NOP
(0054) asm("nop"); 
    0040 0000      NOP
    0041 3000      CPI	R16,0
    0042 0701      CPC	R16,R17
    0043 F7C1      BNE	0x003C
    0044 9508      RET
_display:
  i                    --> R20
    0045 D1A6      RCALL	push_gset1
(0055) } 
(0056) } 
(0057) void display(void)
(0058) {unsigned char i;
(0059)  
(0060)  for(i=0;i<4;i++)
    0046 2744      CLR	R20
    0047 C020      RJMP	0x0068
(0061)   {  clr_bit(PORTD,i);
    0048 E001      LDI	R16,1
    0049 2F14      MOV	R17,R20
    004A D1B8      RCALL	lsl8
    004B 2E20      MOV	R2,R16
    004C 9420      COM	R2
    004D B232      IN	R3,0x12
    004E 2032      AND	R3,R2
    004F BA32      OUT	0x12,R3
(0062)     PORTB=num[dis[i]];
    0050 E784      LDI	R24,0x74
    0051 E090      LDI	R25,0
    0052 2FE4      MOV	R30,R20
    0053 27FF      CLR	R31
    0054 0FE8      ADD	R30,R24
    0055 1FF9      ADC	R31,R25
    0056 81E0      LDD	R30,Z+0
    0057 27FF      CLR	R31
    0058 E680      LDI	R24,0x60
    0059 E090      LDI	R25,0
    005A 0FE8      ADD	R30,R24
    005B 1FF9      ADC	R31,R25
    005C 8020      LDD	R2,Z+0
    005D BA28      OUT	0x18,R2
(0063)     delay(10);
    005E E00A      LDI	R16,0xA
    005F E010      LDI	R17,0
    0060 DFDA      RCALL	_delay
(0064) 	set_bit(PORTD,i);
    0061 E001      LDI	R16,1
    0062 2F14      MOV	R17,R20
    0063 D19F      RCALL	lsl8
    0064 B222      IN	R2,0x12
    0065 2A20      OR	R2,R16
    0066 BA22      OUT	0x12,R2
    0067 9543      INC	R20
    0068 3044      CPI	R20,4
    0069 F2F0      BCS	0x0048
    006A D184      RCALL	pop_gset1
    006B 9508      RET
_keyscan:
  tp                   --> R22
  keyst                --> R20
    006C D17D      RCALL	push_gset2
(0065)    }
(0066)   
(0067) }
(0068) 
(0069) unsigned char  keyscan(void)
(0070) { unsigned char keyst,tp;
(0071)   keyst=PINC;
    006D B343      IN	R20,0x13
(0072)   delay(10);
    006E E00A      LDI	R16,0xA
    006F E010      LDI	R17,0
    0070 DFCA      RCALL	_delay
(0073)   tp=PINC;
    0071 B363      IN	R22,0x13
(0074)   if(tp!=keyst) return 0;
    0072 1764      CP	R22,R20
    0073 F011      BEQ	0x0076
    0074 2700      CLR	R16
    0075 C03B      RJMP	0x00B1
(0075)   keyst=keyst&0x0f;
    0076 704F      ANDI	R20,0xF
(0076)   if(keyst==0x0f)
    0077 304F      CPI	R20,0xF
    0078 F459      BNE	0x0084
(0077)    {sd=0;su=0;se=0;sm=0;
    0079 2422      CLR	R2
    007A 92200073  STS	sd,R2
    007C 92200072  STS	su,R2
    007E 92200071  STS	se,R2
    0080 92200070  STS	sm,R2
(0078)    return 0;//no button
    0082 2700      CLR	R16
    0083 C02D      RJMP	0x00B1
(0079)    }
(0080)    else
(0081)    {if(sd||se||su||sm) return 0;
    0084 90200073  LDS	R2,sd
    0086 2022      TST	R2
    0087 F461      BNE	0x0094
    0088 90200071  LDS	R2,se
    008A 2022      TST	R2
    008B F441      BNE	0x0094
    008C 90200072  LDS	R2,su
    008E 2022      TST	R2
    008F F421      BNE	0x0094
    0090 90200070  LDS	R2,sm
    0092 2022      TST	R2
    0093 F011      BEQ	0x0096
    0094 2700      CLR	R16
    0095 C01B      RJMP	0x00B1
(0082)          if((keyst&1)==0) {sd=1;return 1;} //down
    0096 FD40      SBRC	R20,0
    0097 C005      RJMP	0x009D
    0098 E081      LDI	R24,1
    0099 93800073  STS	sd,R24
    009B E001      LDI	R16,1
    009C C014      RJMP	0x00B1
(0083)     else if((keyst&2)==0) {su=1;return 2;}//up
    009D FD41      SBRC	R20,1
    009E C005      RJMP	0x00A4
    009F E081      LDI	R24,1
    00A0 93800072  STS	su,R24
    00A2 E002      LDI	R16,2
    00A3 C00D      RJMP	0x00B1
(0084) 	else if((keyst&4)==0) {se=1;return 3;}//enter
    00A4 FD42      SBRC	R20,2
    00A5 C005      RJMP	0x00AB
    00A6 E081      LDI	R24,1
    00A7 93800071  STS	se,R24
    00A9 E003      LDI	R16,3
    00AA C006      RJMP	0x00B1
(0085)     else if((keyst&8)==0) {sm=1;return 4;}//mode
    00AB FD43      SBRC	R20,3
    00AC C004      RJMP	0x00B1
    00AD E081      LDI	R24,1
    00AE 93800070  STS	sm,R24
    00B0 E004      LDI	R16,4
(0086) 	}
    00B1 D130      RCALL	pop_gset2
    00B2 9508      RET
(0087) }
(0088) 
(0089) void main(void) 
(0090) {
(0091) unsigned int j,keynm,i=0;
_main:
  j                    --> Y+1
  i                    --> R20
  keynm                --> R22
    00B3 2744      CLR	R20
    00B4 2755      CLR	R21
(0092) 
(0093) 
(0094)     DDRB=0xff;/*PORTb is outPUT PORT*/
    00B5 EF8F      LDI	R24,0xFF
    00B6 BB87      OUT	0x17,R24
(0095) 	PORTB=0xfF;//
    00B7 BB88      OUT	0x18,R24
(0096) 	DDRD=0xff;	//
    00B8 BB81      OUT	0x11,R24
(0097) 	PORTD=0x3f;	//
    00B9 E38F      LDI	R24,0x3F
    00BA BB82      OUT	0x12,R24
(0098) 	
(0099)     DDRC=0x00;/* input */
    00BB 2422      CLR	R2
    00BC BA24      OUT	0x14,R2
(0100) 	PORTC=0x0f;/* pullup enable */
    00BD E08F      LDI	R24,0xF
    00BE BB85      OUT	0x15,R24
    00BF C0EC      RJMP	0x01AC
(0101) 
(0102) 
(0103) while(1) 
(0104)   {
(0105) 
(0106)   
(0107)   //dis[0]=11;dis[1]=11;dis[2]=11;dis[3]=11;
(0108)  
(0109)  
(0110)  
(0111)   keynm=keyscan();
    00C0 DFAB      RCALL	_keyscan
    00C1 2F60      MOV	R22,R16
    00C2 2777      CLR	R23
(0112)   if(keynm==4)//set mode
    00C3 3064      CPI	R22,4
    00C4 E0E0      LDI	R30,0
    00C5 077E      CPC	R23,R30
    00C6 F4C1      BNE	0x00DF
(0113)     {smode=smode+1;
    00C7 91800078  LDS	R24,smode
    00C9 91900079  LDS	R25,smode+1
    00CB 9601      ADIW	R24,1
    00CC 93900079  STS	smode+1,R25
    00CE 93800078  STS	smode,R24
(0114) 	if(smode==5) smode=1;
    00D0 3085      CPI	R24,5
    00D1 E0E0      LDI	R30,0
    00D2 079E      CPC	R25,R30
    00D3 F431      BNE	0x00DA
    00D4 E081      LDI	R24,1
    00D5 E090      LDI	R25,0
    00D6 93900079  STS	smode+1,R25
    00D8 93800078  STS	smode,R24
(0115) 	 dis[3]=4;
    00DA E084      LDI	R24,4
    00DB 93800077  STS	dis+3,R24
(0116) 	 display();
    00DD DF67      RCALL	_display
(0117) 	}

⌨️ 快捷键说明

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