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

📄 pro.lst

📁 数字频率计数字频率计数字频率计数字频率计
💻 LST
📖 第 1 页 / 共 5 页
字号:
    012D E328      LDI	R18,0x38
    012E 2700      CLR	R16
    012F DF99      RCALL	_LCD12864_sendbyte
(0152) 	while(LCD12864_readBF());
    0130 DFC2      RCALL	_LCD12864_readBF
    0131 2300      TST	R16
    0132 F7E9      BNE	0x0130
(0153) 	LCD12864_sendbyte(iCmd, LCDb_ON);		//打开显示
    0133 E02C      LDI	R18,0xC
    0134 2700      CLR	R16
    0135 DF93      RCALL	_LCD12864_sendbyte
(0154) 	while(LCD12864_readBF());
    0136 DFBC      RCALL	_LCD12864_readBF
    0137 2300      TST	R16
    0138 F7E9      BNE	0x0136
(0155) 	LCD12864_clear();						//清屏
    0139 DFB2      RCALL	_LCD12864_clear
(0156) 	while(LCD12864_readBF());
    013A DFB8      RCALL	_LCD12864_readBF
    013B 2300      TST	R16
    013C F7E9      BNE	0x013A
(0157) 	LCD12864_sendbyte(iCmd, LCDb_ENTRY);	// 输入模式设定		
    013D E026      LDI	R18,6
    013E 2700      CLR	R16
    013F DF89      RCALL	_LCD12864_sendbyte
    0140 9508      RET
_LCD12864_opGDRAM:
  i                    --> R20
  x                    --> R22
  j                    --> R10
  ptGDRAM              --> R12
    0141 940E0648  CALL	push_gset4
    0143 0168      MOVW	R12,R16
(0158) }
(0159) /*******************************************
(0160) 函数名称: LCD12864_opGDRAM
(0161) 功    能: 向GDRAM写入数据,并显示(完成绘图功能)
(0162) 参    数: ptGDRAM--GDRAM数据指针
(0163) 返回值  : 无
(0164) /********************************************/
(0165) void LCD12864_opGDRAM(const uchar *ptGDRAM)
(0166) {
(0167) 	uchar i,j;
(0168) 	uint x=0;
    0144 2766      CLR	R22
    0145 2777      CLR	R23
(0169) 	while(LCD12864_readBF());	  //读忙标志
    0146 DFAC      RCALL	_LCD12864_readBF
    0147 2300      TST	R16
    0148 F7E9      BNE	0x0146
(0170) 	LCD12864_sendbyte(iCmd,LCDb_EXTCMD1);		//扩充指令集,并关闭绘图显示	
    0149 E324      LDI	R18,0x34
    014A 2700      CLR	R16
    014B DF7D      RCALL	_LCD12864_sendbyte
(0171) 	//写入并显示上半屏幕
(0172) 	for(i=0;i<32;i++)            				//行地址计数
    014C 2744      CLR	R20
    014D C02D      RJMP	0x017B
(0173)      {	  	   	   
(0174)            for(j=0;j<8;j++)      				//列地址计数
    014E 24AA      CLR	R10
    014F C027      RJMP	0x0177
(0175)            {            		   		 
(0176) 		   		 LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
    0150 2F24      MOV	R18,R20
    0151 6820      ORI	R18,0x80
    0152 2700      CLR	R16
    0153 DF75      RCALL	_LCD12864_sendbyte
(0177) 				 Delayus(10);
    0154 E00A      LDI	R16,0xA
    0155 E010      LDI	R17,0
    0156 DF24      RCALL	_Delayus
(0178) 		   		 LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
    0157 2D2A      MOV	R18,R10
    0158 6820      ORI	R18,0x80
    0159 2700      CLR	R16
    015A DF6E      RCALL	_LCD12864_sendbyte
(0179) 				 Delayus(10);
    015B E00A      LDI	R16,0xA
    015C E010      LDI	R17,0
    015D DF1D      RCALL	_Delayus
(0180)                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据 
    015E 011B      MOVW	R2,R22
    015F 5F6F      SUBI	R22,0xFF
    0160 4F7F      SBCI	R23,0xFF
    0161 01F1      MOVW	R30,R2
    0162 0DEC      ADD	R30,R12
    0163 1DFD      ADC	R31,R13
    0164 9124      LPM	R18,0(Z)
    0165 E001      LDI	R16,1
    0166 DF62      RCALL	_LCD12864_sendbyte
(0181) 				 Delayus(10);                
    0167 E00A      LDI	R16,0xA
    0168 E010      LDI	R17,0
    0169 DF11      RCALL	_Delayus
(0182) 				 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
    016A 011B      MOVW	R2,R22
    016B 5F6F      SUBI	R22,0xFF
    016C 4F7F      SBCI	R23,0xFF
    016D 01F1      MOVW	R30,R2
    016E 0DEC      ADD	R30,R12
    016F 1DFD      ADC	R31,R13
    0170 9124      LPM	R18,0(Z)
    0171 E001      LDI	R16,1
    0172 DF56      RCALL	_LCD12864_sendbyte
(0183) 				 Delayus(10); 
    0173 E00A      LDI	R16,0xA
    0174 E010      LDI	R17,0
    0175 DF05      RCALL	_Delayus
    0176 94A3      INC	R10
    0177 2D8A      MOV	R24,R10
    0178 3088      CPI	R24,0x8
    0179 F2B0      BCS	0x0150
    017A 9543      INC	R20
    017B 3240      CPI	R20,0x20
    017C F408      BCC	0x017E
    017D CFD0      RJMP	0x014E
(0184)            }
(0185)      }
(0186) 	 //写入并显示下半屏幕
(0187) 	 for(i=0;i<32;i++)            
    017E 2744      CLR	R20
    017F C02E      RJMP	0x01AE
(0188)      {	  	   	   
(0189)            for(j=8;j<16;j++)      
    0180 E088      LDI	R24,0x8
    0181 2EA8      MOV	R10,R24
    0182 C027      RJMP	0x01AA
(0190)            {            
(0191) 		   		 LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
    0183 2F24      MOV	R18,R20
    0184 6820      ORI	R18,0x80
    0185 2700      CLR	R16
    0186 DF42      RCALL	_LCD12864_sendbyte
(0192) 				 Delayus(10);
    0187 E00A      LDI	R16,0xA
    0188 E010      LDI	R17,0
    0189 DEF1      RCALL	_Delayus
(0193) 		   		 LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
    018A 2D2A      MOV	R18,R10
    018B 6820      ORI	R18,0x80
    018C 2700      CLR	R16
    018D DF3B      RCALL	_LCD12864_sendbyte
(0194) 				 Delayus(10);
    018E E00A      LDI	R16,0xA
    018F E010      LDI	R17,0
    0190 DEEA      RCALL	_Delayus
(0195)                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据      
    0191 011B      MOVW	R2,R22
    0192 5F6F      SUBI	R22,0xFF
    0193 4F7F      SBCI	R23,0xFF
    0194 01F1      MOVW	R30,R2
    0195 0DEC      ADD	R30,R12
    0196 1DFD      ADC	R31,R13
    0197 9124      LPM	R18,0(Z)
    0198 E001      LDI	R16,1
    0199 DF2F      RCALL	_LCD12864_sendbyte
(0196) 				 Delayus(10);
    019A E00A      LDI	R16,0xA
    019B E010      LDI	R17,0
    019C DEDE      RCALL	_Delayus
(0197) 				 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
    019D 011B      MOVW	R2,R22
    019E 5F6F      SUBI	R22,0xFF
    019F 4F7F      SBCI	R23,0xFF
    01A0 01F1      MOVW	R30,R2
    01A1 0DEC      ADD	R30,R12
    01A2 1DFD      ADC	R31,R13
    01A3 9124      LPM	R18,0(Z)
    01A4 E001      LDI	R16,1
    01A5 DF23      RCALL	_LCD12864_sendbyte
(0198) 				 Delayus(10); 
    01A6 E00A      LDI	R16,0xA
    01A7 E010      LDI	R17,0
    01A8 DED2      RCALL	_Delayus
    01A9 94A3      INC	R10
    01AA 2D8A      MOV	R24,R10
    01AB 3180      CPI	R24,0x10
    01AC F2B0      BCS	0x0183
    01AD 9543      INC	R20
    01AE 3240      CPI	R20,0x20
    01AF F408      BCC	0x01B1
    01B0 CFCF      RJMP	0x0180
(0199)            }
(0200)      }
(0201) 	 Delayus(10);
    01B1 E00A      LDI	R16,0xA
    01B2 E010      LDI	R17,0
    01B3 DEC7      RCALL	_Delayus
(0202) 	 LCD12864_sendbyte(iCmd,LCDb_EXTCMD2);			   //打开绘图显示
    01B4 E326      LDI	R18,0x36
    01B5 2700      CLR	R16
    01B6 DF12      RCALL	_LCD12864_sendbyte
(0203) 	 LCD12864_sendbyte(iCmd,LCDb_BASCMD);			   //还原回基本指令集模式
    01B7 E320      LDI	R18,0x30
    01B8 2700      CLR	R16
    01B9 DF0F      RCALL	_LCD12864_sendbyte
    01BA 940E0643  CALL	pop_gset4
    01BC 9508      RET
FILE: E:\张秋伟\我的实验\数字频率计\pro.c
(0001) //包含所需头文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include "12864.h"
(0005) #include "delay.h"
(0006) /*------宏定义------*/
(0007) #define uchar	unsigned char
(0008) #define uint	unsigned int
(0009) 
(0010) uchar Second=0,Minute=0,Hour=0;
(0011) uchar Second_H,Second_L,Minute_H,Minute_L,Hour_H,Hour_L;
(0012) uchar time_buffer[8]={0,0,0,0,0,0,0,0};
(0013) unsigned char Timer1_Counter_H=0;
(0014) unsigned char Timer1_Counter_L=0;
(0015) unsigned long value=0;
(0016) long Freq=0,Freq_H16=0,Freq_L8=0,counter=0;
(0017) uchar T1_OV_Times=0; //T1溢出次数
(0018) uchar temp[8];
(0019) 
(0020) void time(void)
(0021) {
(0022)  Second++;
_time:
    01BD 91800060  LDS	R24,Second
    01BF 5F8F      SUBI	R24,0xFF
    01C0 93800060  STS	Second,R24
(0023)  if(Second >= 60)
    01C2 338C      CPI	R24,0x3C
    01C3 F098      BCS	0x01D7
(0024)  {
(0025)    Second=0;
    01C4 2422      CLR	R2
    01C5 92200060  STS	Second,R2
(0026)    Minute++;
    01C7 91800061  LDS	R24,Minute
    01C9 5F8F      SUBI	R24,0xFF
    01CA 93800061  STS	Minute,R24
(0027)    if(Minute >=60)
    01CC 338C      CPI	R24,0x3C
    01CD F048      BCS	0x01D7
(0028)    {
(0029) 	  Hour++;
    01CE 91800062  LDS	R24,Hour
    01D0 5F8F      SUBI	R24,0xFF
    01D1 93800062  STS	Hour,R24
(0030) 	  if(Hour >=24)
    01D3 3188      CPI	R24,0x18
    01D4 F010      BCS	0x01D7
(0031) 	   Hour=0;
    01D5 92200062  STS	Hour,R2
(0032) 	}
(0033)  }
    01D7 9508      RET
(0034) }
(0035) 
(0036) void display_time(void)
(0037) {
(0038)   time_buffer[0]=Hour/10+0x30;
_display_time:
    01D8 E01A      LDI	R17,0xA
    01D9 91000062  LDS	R16,Hour
    01DB 940E05EA  CALL	div8u
    01DD 2F80      MOV	R24,R16
    01DE 5D80      SUBI	R24,0xD0
    01DF 93800063  STS	time_buffer,R24
(0039)   time_buffer[1]=Hour%10+0x30;
    01E1 E01A      LDI	R17,0xA
    01E2 91000062  LDS	R16,Hour
    01E4 940E05E8  CALL	mod8u
    01E6 2F80      MOV	R24,R16
    01E7 5D80      SUBI	R24,0xD0
    01E8 93800064  STS	time_buffer+1,R24
(0040)   time_buffer[2]=':';
    01EA E38A      LDI	R24,0x3A
    01EB 93800065  STS	time_buffer+2,R24
(0041)   time_buffer[3]=Minute/10+0x30;
    01ED E01A      LDI	R17,0xA
    01EE 91000061  LDS	R16,Minute
    01F0 940E05EA  CALL	div8u
    01F2 2F80      MOV	R24,R16
    01F3 5D80      SUBI	R24,0xD0
    01F4 93800066  STS	time_buffer+3,R24
(0042)   time_buffer[4]=Minute%10+0x30;
    01F6 E01A      LDI	R17,0xA
    01F7 91000061  LDS	R16,Minute
    01F9 940E05E8  CALL	mod8u
    01FB 2F80      MOV	R24,R16
    01FC 5D80      SUBI	R24,0xD0
    01FD 93800067  STS	0x67,R24
(0043)   time_buffer[5]=':';
    01FF E38A      LDI	R24,0x3A
    0200 93800068  STS	0x68,R24
(0044)   time_buffer[6]=Second/10+0x30;
    0202 E01A      LDI	R17,0xA
    0203 91000060  LDS	R16,Second
    0205 940E05EA  CALL	div8u
    0207 2F80      MOV	R24,R16
    0208 5D80      SUBI	R24,0xD0
    0209 93800069  STS	0x69,R24
(0045)   time_buffer[7]=Second%10+0X30;
    020B E01A      LDI	R17,0xA
    020C 91000060  LDS	R16,Second
    020E 940E05E8  CALL	mod8u
    0210 2F80      MOV	R24,R16
    0211 5D80      SUBI	R24,0xD0
    0212 9380006A  STS	0x6A,R24
(0046)  
(0047)   LCD12864_gotoXY(2,2);
    0214 E022      LDI	R18,2
    0215 E002      LDI	R16,2
    0216 940E0101  CALL	_LCD12864_gotoXY
(0048)   LCD12864_sendstr(time_buffer);
    0218 E603      LDI	R16,0x63
    0219 E010      LDI	R17,0
    021A 940E00DC  CALL	_LCD12864_sendstr
    021C 9508      RET
(0049)   /*LCD12864_sendbyte(1,Hour_H);
(0050)   LCD12864_sendbyte(1,Hour_L);
(0051)   LCD12864_sendbyte(1,':');
(0052)   
(0053)   LCD12864_sendbyte(1,Minute_H);
(0054)   LCD12864_sendbyte(1,Minute_L);
(0055)   LCD12864_sendbyte(1,':');
(0056) 
(0057)   LCD12864_sendbyte(1,Second_H);
(0058)   LCD12864_sendbyte(1,Second_L);*/
(0059) }
(0060) //端口初始化
(0061) void port_init(void)
(0062) {
(0063)  PORTA = 0xFF;
_port_init:
    021D EF8F      LDI	R24,0xFF
    021E BB8B      OUT	0x1B,R24
(0064)  DDRA  = 0xFF;
    021F BB8A      OUT	0x1A,R24
(0065)  PORTB = 0xf3;
    0220 EF83      LDI	R24,0xF3
    0221 BB88      OUT	0x18,R24
(0066)  DDRB  = 0xf1;
    0222 EF81      LDI	R24,0xF1
    0223 BB87      OUT	0x17,R24
(0067)  PORTC = 0x00;
    0224 2422      CLR	R2
    0225 BA25      OUT	0x15,R2
(0068)  DDRC  = 0x00;
    0226 BA24      OUT	0x14,R2
(0069)  PORTD = 0x00;
    0227 BA22      OUT	0x12,R2
(0070)  DDRD  = 0x00;
    0228 BA21      OUT	0x11,R2
    0229 9508      RET
(0071) }
(0072) 
(0073) //定时器T0初始化
(0074) void timer0_init(void)
(0075) {
(0076)  TCCR0  = 0x00;//停止定时器
_timer0_init:
    022A 2422      CLR	R2
    022B BE23      OUT	0x33,R2
(0077)  TCNT0  = 0x83;//初始值
    022C E883      LDI	R24,0x83
    022D BF82      OUT	0x32,R24
(0078)  OCR0   = 0x82;//匹配值
    022E E882      LDI	R24,0x82
    022F BF8C      OUT	0x3C,R24
(0079)  TIMSK |= 0x02;//中断允许
    0230 B789      IN	R24,0x39
    0231 6082      ORI	R24,2
    0232 BF89      OUT	0x39,R24
(0080)  TCCR0  = 0x04;//启动定时器
    0233 E084      LDI	R24,4
    0234 BF83      OUT	0x33,R24
    0235 9508      RET
_timer0_comp_isr:
    0236 922A      ST	R2,-Y
    0237 938A      ST	R24,-Y
    0238 939A      ST	R25,-Y
    0239 B62F      IN	R2,0x3F
    023A 922A      ST	R2,-Y
(0081) }
(0082) 
(0083) uchar display_is_ok=0;
(0084) uchar count=0;
(0085) //T0比较中断服务程序
(0086) #pragma interrupt_handler timer0_comp_isr:20
(0087) void timer0_comp_isr(void)
(0088) {
(0089)  //中断发生时刻在TCNT0=OCR0]
(0090)  if(++count >=5)
    023B 91800083  LDS	R24,count
    023D 5F8F      SUBI	R24,0xFF
    023E 2E28      MOV	R2,R24
    023F 92200083  STS	count,R2
    0241 3085      CPI	R24,5
    0242 F030      BCS	0x0249
(0091)   {
(0092)    display_is_ok=1;
    0243 E081      LDI	R24,1
    0244 93800082  STS	display_is_ok,R24
(0093)    count=0;
    0246 2422      CLR	R2
    0247 92200083  STS	count,R2

⌨️ 快捷键说明

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