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

📄 yj12864.lst

📁 12864菜单
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0471 E021      LDI	R18,1
    0472 2700      CLR	R16
    0473 DFD7      RCALL	_LCD12864_sendbyte
(0146) 	Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
    0474 E002      LDI	R16,2
    0475 E010      LDI	R17,0
    0476 DEC8      RCALL	_Delayms
    0477 9508      RET
_LCD12864_readBF:
  busy                 --> R20
    0478 940E0A80  CALL	push_gset1
(0147) }
(0148) /*******************************************
(0149) 函数名称: LCD12864_readBF
(0150) 功    能: 12864液晶清屏
(0151) 参    数: 无
(0152) 返回值  : busy--为1时忙,为0时可以接收指令
(0153) /********************************************/
(0154) uchar LCD12864_readBF(void)
(0155) {	  
(0156) 	uchar busy;
(0157) 	busy=LCD12864_readbyte(iCmd);		//读回BF标志和地址
    047A 2700      CLR	R16
    047B DFB7      RCALL	_LCD12864_readbyte
    047C 2F40      MOV	R20,R16
(0158) 	if(busy&0x80)						//如果忙,返回忙状态
    047D FF07      SBRS	R16,7
    047E C002      RJMP	0x0481
(0159) 		busy=1;
    047F E041      LDI	R20,1
    0480 C001      RJMP	0x0482
(0160) 	else	   							//不忙,可以写入
(0161) 		busy=0;
    0481 2744      CLR	R20
(0162) 	return busy;
    0482 2F04      MOV	R16,R20
    0483 940E0A83  CALL	pop_gset1
    0485 9508      RET
_LCD12864_gotoXY:
  Col                  --> R20
  Row                  --> R22
    0486 940E0A7E  CALL	push_gset2
    0488 2F42      MOV	R20,R18
    0489 2F60      MOV	R22,R16
(0163) }
(0164) /*******************************************
(0165) 函数名称: LCD12864_gotoXY
(0166) 功    能: 移动到指定位置
(0167) 参    数: Row--指定的行
(0168) 	  	  Col--指定的列
(0169) 返回值  : 无
(0170) /********************************************/
(0171) void LCD12864_gotoXY(uchar Row, uchar Col)
(0172) {	
(0173) 	switch (Row)		  //选择行
    048A 2777      CLR	R23
    048B 3062      CPI	R22,2
    048C E0E0      LDI	R30,0
    048D 077E      CPC	R23,R30
    048E F049      BEQ	0x0498
    048F 3063      CPI	R22,3
    0490 E0E0      LDI	R30,0
    0491 077E      CPC	R23,R30
    0492 F051      BEQ	0x049D
    0493 3064      CPI	R22,4
    0494 E0E0      LDI	R30,0
    0495 077E      CPC	R23,R30
    0496 F059      BEQ	0x04A2
    0497 C00F      RJMP	0x04A7
(0174) 	{
(0175) 		case 2:
(0176) 			LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break;	//写入第2行的指定列
    0498 2F24      MOV	R18,R20
    0499 5720      SUBI	R18,0x70
    049A 2700      CLR	R16
    049B DFAF      RCALL	_LCD12864_sendbyte
    049C C00E      RJMP	0x04AB
(0177) 		case 3:
(0178) 			LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break;	//写入第3行的指定列
    049D 2F24      MOV	R18,R20
    049E 5728      SUBI	R18,0x78
    049F 2700      CLR	R16
    04A0 DFAA      RCALL	_LCD12864_sendbyte
    04A1 C009      RJMP	0x04AB
(0179) 		case 4:
(0180) 			LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break;	//写入第4行的指定列	
    04A2 2F24      MOV	R18,R20
    04A3 5628      SUBI	R18,0x68
    04A4 2700      CLR	R16
    04A5 DFA5      RCALL	_LCD12864_sendbyte
    04A6 C004      RJMP	0x04AB
(0181) 		default:
(0182) 			LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break;	//写入第1行的指定列	
    04A7 2F24      MOV	R18,R20
    04A8 5820      SUBI	R18,0x80
    04A9 2700      CLR	R16
    04AA DFA0      RCALL	_LCD12864_sendbyte
    04AB 940E0A6F  CALL	pop_gset2
    04AD 9508      RET
(0183) 	}
(0184) }
(0185) /*******************************************
(0186) 函数名称: LCD12864_initial
(0187) 功    能: 12864液晶初始化
(0188) 参    数: 无
(0189) 返回值  : 无
(0190) /********************************************/
(0191) void LCD12864_initial(void)
(0192) {
(0193) 	Delayms(100);				// 等待内部复位
_LCD12864_initial:
    04AE E604      LDI	R16,0x64
    04AF E010      LDI	R17,0
    04B0 DE8E      RCALL	_Delayms
(0194) 	LCD12864_portini();			//端口初始化
    04B1 DF79      RCALL	_LCD12864_portini
(0195) 	
(0196) 	LCD12864_sendbyte(iCmd, LCDb_FUNCTION);	//功能、模式设定
    04B2 E328      LDI	R18,0x38
    04B3 2700      CLR	R16
    04B4 DF96      RCALL	_LCD12864_sendbyte
(0197) 	while(LCD12864_readBF());
    04B5 DFC2      RCALL	_LCD12864_readBF
    04B6 2300      TST	R16
    04B7 F7E9      BNE	0x04B5
(0198) 	LCD12864_sendbyte(iCmd, LCDb_ON);		//打开显示
    04B8 E02C      LDI	R18,0xC
    04B9 2700      CLR	R16
    04BA DF90      RCALL	_LCD12864_sendbyte
(0199) 	while(LCD12864_readBF());
    04BB DFBC      RCALL	_LCD12864_readBF
    04BC 2300      TST	R16
    04BD F7E9      BNE	0x04BB
(0200) 	LCD12864_clear();						//清屏
    04BE DFB2      RCALL	_LCD12864_clear
(0201) 	while(LCD12864_readBF());
    04BF DFB8      RCALL	_LCD12864_readBF
    04C0 2300      TST	R16
    04C1 F7E9      BNE	0x04BF
(0202) 	LCD12864_sendbyte(iCmd, LCDb_ENTRY);	// 输入模式设定		
    04C2 E026      LDI	R18,6
    04C3 2700      CLR	R16
    04C4 DF86      RCALL	_LCD12864_sendbyte
    04C5 9508      RET
_LCD12864_opGDRAM:
  i                    --> R20
  x                    --> R22
  j                    --> R10
  ptGDRAM              --> R12
    04C6 940E0A7A  CALL	push_gset4
    04C8 0168      MOVW	R12,R16
(0203) }
(0204) /*******************************************
(0205) 函数名称: LCD12864_opGDRAM
(0206) 功    能: 向GDRAM写入数据,并显示(完成绘图功能)
(0207) 参    数: ptGDRAM--GDRAM数据指针
(0208) 返回值  : 无
(0209) /********************************************/
(0210) void LCD12864_opGDRAM(const uchar *ptGDRAM)
(0211) {
(0212) 	uchar i,j;
(0213) 	uint x=0;
    04C9 2766      CLR	R22
    04CA 2777      CLR	R23
(0214) 	while(LCD12864_readBF());	  //读忙标志
    04CB DFAC      RCALL	_LCD12864_readBF
    04CC 2300      TST	R16
    04CD F7E9      BNE	0x04CB
(0215) 	LCD12864_sendbyte(iCmd,LCDb_EXTCMD1);		//扩充指令集,并关闭绘图显示	
    04CE E324      LDI	R18,0x34
    04CF 2700      CLR	R16
    04D0 DF7A      RCALL	_LCD12864_sendbyte
(0216) 	//写入并显示上半屏幕
(0217) 	for(i=0;i<32;i++)            				//行地址计数
    04D1 2744      CLR	R20
    04D2 C02D      RJMP	0x0500
(0218)      {	  	   	   
(0219)            for(j=0;j<8;j++)      				//列地址计数
    04D3 24AA      CLR	R10
    04D4 C027      RJMP	0x04FC
(0220)            {            		   		 
(0221) 		   		 LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
    04D5 2F24      MOV	R18,R20
    04D6 6820      ORI	R18,0x80
    04D7 2700      CLR	R16
    04D8 DF72      RCALL	_LCD12864_sendbyte
(0222) 				 Delayus(10);
    04D9 E00A      LDI	R16,0xA
    04DA E010      LDI	R17,0
    04DB DE4B      RCALL	_Delayus
(0223) 		   		 LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
    04DC 2D2A      MOV	R18,R10
    04DD 6820      ORI	R18,0x80
    04DE 2700      CLR	R16
    04DF DF6B      RCALL	_LCD12864_sendbyte
(0224) 				 Delayus(10);
    04E0 E00A      LDI	R16,0xA
    04E1 E010      LDI	R17,0
    04E2 DE44      RCALL	_Delayus
(0225)                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据 
    04E3 011B      MOVW	R2,R22
    04E4 5F6F      SUBI	R22,0xFF
    04E5 4F7F      SBCI	R23,0xFF
    04E6 01F1      MOVW	R30,R2
    04E7 0DEC      ADD	R30,R12
    04E8 1DFD      ADC	R31,R13
    04E9 9124      LPM	R18,0(Z)
    04EA E001      LDI	R16,1
    04EB DF5F      RCALL	_LCD12864_sendbyte
(0226) 				 Delayus(10);                
    04EC E00A      LDI	R16,0xA
    04ED E010      LDI	R17,0
    04EE DE38      RCALL	_Delayus
(0227) 				 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
    04EF 011B      MOVW	R2,R22
    04F0 5F6F      SUBI	R22,0xFF
    04F1 4F7F      SBCI	R23,0xFF
    04F2 01F1      MOVW	R30,R2
    04F3 0DEC      ADD	R30,R12
    04F4 1DFD      ADC	R31,R13
    04F5 9124      LPM	R18,0(Z)
    04F6 E001      LDI	R16,1
    04F7 DF53      RCALL	_LCD12864_sendbyte
(0228) 				 Delayus(10); 
    04F8 E00A      LDI	R16,0xA
    04F9 E010      LDI	R17,0
    04FA DE2C      RCALL	_Delayus
    04FB 94A3      INC	R10
    04FC 2D8A      MOV	R24,R10
    04FD 3088      CPI	R24,0x8
    04FE F2B0      BCS	0x04D5
    04FF 9543      INC	R20
    0500 3240      CPI	R20,0x20
    0501 F408      BCC	0x0503
    0502 CFD0      RJMP	0x04D3
(0229)            }
(0230)      }
(0231) 	 //写入并显示下半屏幕
(0232) 	 for(i=0;i<32;i++)            
    0503 2744      CLR	R20
    0504 C02E      RJMP	0x0533
(0233)      {	  	   	   
(0234)            for(j=8;j<16;j++)      
    0505 E088      LDI	R24,0x8
    0506 2EA8      MOV	R10,R24
    0507 C027      RJMP	0x052F
(0235)            {            
(0236) 		   		 LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
    0508 2F24      MOV	R18,R20
    0509 6820      ORI	R18,0x80
    050A 2700      CLR	R16
    050B DF3F      RCALL	_LCD12864_sendbyte
(0237) 				 Delayus(10);
    050C E00A      LDI	R16,0xA
    050D E010      LDI	R17,0
    050E DE18      RCALL	_Delayus
(0238) 		   		 LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
    050F 2D2A      MOV	R18,R10
    0510 6820      ORI	R18,0x80
    0511 2700      CLR	R16
    0512 DF38      RCALL	_LCD12864_sendbyte
(0239) 				 Delayus(10);
    0513 E00A      LDI	R16,0xA
    0514 E010      LDI	R17,0
    0515 DE11      RCALL	_Delayus
(0240)                  LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据      
    0516 011B      MOVW	R2,R22
    0517 5F6F      SUBI	R22,0xFF
    0518 4F7F      SBCI	R23,0xFF
    0519 01F1      MOVW	R30,R2
    051A 0DEC      ADD	R30,R12
    051B 1DFD      ADC	R31,R13
    051C 9124      LPM	R18,0(Z)
    051D E001      LDI	R16,1
    051E DF2C      RCALL	_LCD12864_sendbyte
(0241) 				 Delayus(10);
    051F E00A      LDI	R16,0xA
    0520 E010      LDI	R17,0
    0521 DE05      RCALL	_Delayus
(0242) 				 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
    0522 011B      MOVW	R2,R22
    0523 5F6F      SUBI	R22,0xFF
    0524 4F7F      SBCI	R23,0xFF
    0525 01F1      MOVW	R30,R2
    0526 0DEC      ADD	R30,R12
    0527 1DFD      ADC	R31,R13
    0528 9124      LPM	R18,0(Z)
    0529 E001      LDI	R16,1
    052A DF20      RCALL	_LCD12864_sendbyte
(0243) 				 Delayus(10); 
    052B E00A      LDI	R16,0xA
    052C E010      LDI	R17,0
    052D DDF9      RCALL	_Delayus
    052E 94A3      INC	R10
    052F 2D8A      MOV	R24,R10
    0530 3180      CPI	R24,0x10
    0531 F2B0      BCS	0x0508
    0532 9543      INC	R20
    0533 3240      CPI	R20,0x20
    0534 F408      BCC	0x0536
    0535 CFCF      RJMP	0x0505
(0244)            }
(0245)      }
(0246) 	 Delayus(10);
    0536 E00A      LDI	R16,0xA
    0537 E010      LDI	R17,0
    0538 DDEE      RCALL	_Delayus
(0247) 	 LCD12864_sendbyte(iCmd,LCDb_EXTCMD2);			   //打开绘图显示
    0539 E326      LDI	R18,0x36
    053A 2700      CLR	R16
    053B DF0F      RCALL	_LCD12864_sendbyte
(0248) 	 LCD12864_sendbyte(iCmd,LCDb_BASCMD);			   //还原回基本指令集模式
    053C E320      LDI	R18,0x30
    053D 2700      CLR	R16
    053E DF0C      RCALL	_LCD12864_sendbyte
    053F 940E0A75  CALL	pop_gset4
    0541 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\12864液晶菜单显示时钟不过不能调2\RTC.C
(0001) /*******************************************
(0002)   文件:RTC.C
(0003)   环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
(0004)   硬件:ATMEGA16芯片
(0005)   日期:2006年12月10日 
(0006)   功能:驱动开发板上的DS1302时钟芯片
(0007)   备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
(0008) /******************************************/
(0009) //#include <iom16v.h>			//包含型号头文件
(0010) //#include <macros.h>			//包含"位"操作头文件
(0011) //#include <stdio.h>			//标准输入输出头文件
(0012) 
(0013) //#include <AVR_PQ1A.h>		//包含自定义常量头文件
(0014) //#include "YJ12864.C"
(0015) //#include "YJ1602.C"			//包含1602液晶函数文件
(0016) //#include "MKEY.C"			//包含矩阵键盘函数文件
(0017) 
(0018) 
(0019) /*******************************************
(0020) 函数名称: DS1302_init
(0021) 功    能: 初始化DS1302的数据接口
(0022) 参    数: 无
(0023) 返回值  : 无
(0024) /********************************************/
(0025) void DS1302_portinit(void)		  
(0026) {
(0027)  DDRB|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);//将时钟端(RTC_CLK)数据端(RTC_DATA)片选端(RTC_CS)设置为输出
_DS1302_portinit:
    0542 B387      IN	R24,0x17
    0543 6A80      ORI	R24,0xA0
    0544 BB87      OUT	0x17,R24
    0545 9508      RET
_DS1302_writeB:
  i                    --> R20
  byte                 --> R22
    0546 940E0A7E  CALL	push_gset2
    0548 2F60      MOV	R22,R16
(0028) }

⌨️ 快捷键说明

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