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

📄 rtc.lst

📁 在AVR开发板驱动时钟芯片DS1302
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0116 CF7C      RJMP	_Delayms
_LCD1602_readBF:
  busy                 --> R20
    0117 940E06E8  CALL	push_gset1
(0091) /*******************************************
(0092) 函数名称: LCD1602_readBF
(0093) 功    能: 1602液晶清屏
(0094) 参    数: 无
(0095) 返回值  : busy--为1时忙,为0时可以接收指令
(0096) /********************************************/
(0097) uchar LCD1602_readBF(void)
(0098) {	  
(0099) 	uchar busy;
(0100) 	busy=LCD1602_readbyte(iCmd);		//读回BF标志和地址
    0119 2700      CLR	R16
    011A DFBB      RCALL	_LCD1602_readbyte
    011B 2F40      MOV	R20,R16
(0101) 	if(busy&0x80)						//忙
    011C FF07      SBRS	R16,7
    011D C002      RJMP	0x0120
(0102) 		busy=1;
    011E E041      LDI	R20,1
    011F C001      RJMP	0x0121
(0103) 	else	   							//不忙,可以写入
(0104) 		busy=0;
    0120 2744      CLR	R20
(0105) 	return busy;
    0121 2F04      MOV	R16,R20
    0122 940E06EB  CALL	pop_gset1
    0124 9508      RET
_LCD1602_gotoXY:
  Col                  --> R20
  Row                  --> R22
    0125 940E06FF  CALL	push_gset2
    0127 2F42      MOV	R20,R18
    0128 2F60      MOV	R22,R16
(0106) }
(0107) /*******************************************
(0108) 函数名称: LCD1602_gotoXY
(0109) 功    能: 移动到指定位置
(0110) 参    数: Row--指定的行
(0111) 	  	  Col--指定的列
(0112) 返回值  : 无
(0113) /********************************************/
(0114) void LCD1602_gotoXY(uchar Row, uchar Col)
(0115) {	
(0116) 	switch (Row)		  //选择行
    0129 2777      CLR	R23
    012A 3062      CPI	R22,2
    012B E0E0      LDI	R30,0
    012C 077E      CPC	R23,R30
    012D F009      BEQ	0x012F
    012E C005      RJMP	0x0134
(0117) 	{
(0118) 		case 2:
(0119) 			LCD1602_sendbyte(iCmd, LCDa_L2 + Col); break;	//写入第2行的指定列	
    012F 2F24      MOV	R18,R20
    0130 5420      SUBI	R18,0x40
    0131 2700      CLR	R16
    0132 DFBB      RCALL	_LCD1602_sendbyte
    0133 C004      RJMP	0x0138
(0120) 		default:
(0121) 			LCD1602_sendbyte(iCmd, LCDa_L1 + Col); break;	//写入第1行的指定列	
    0134 2F24      MOV	R18,R20
    0135 5820      SUBI	R18,0x80
    0136 2700      CLR	R16
    0137 DFB6      RCALL	_LCD1602_sendbyte
(0122) 	}
(0123) }
    0138 940E0707  CALL	pop_gset2
    013A 9508      RET
(0124) /*******************************************
(0125) 函数名称: LCD1602_initial
(0126) 功    能: 1602液晶初始化
(0127) 参    数: 无
(0128) 返回值  : 无
(0129) /********************************************/
(0130) void LCD1602_initial(void)
(0131) {
(0132) 	Delayms(100);				// 等待内部复位
_LCD1602_initial:
    013B E604      LDI	R16,0x64
    013C E010      LDI	R17,0
    013D DF55      RCALL	_Delayms
(0133) 	LCD1602_portini();			//端口初始化
    013E DF90      RCALL	_LCD1602_portini
(0134) 	
(0135) 	LCD1602_sendbyte(iCmd, LCDa_FUNCTION);	// 功能、模式设定
    013F E328      LDI	R18,0x38
    0140 2700      CLR	R16
    0141 DFAC      RCALL	_LCD1602_sendbyte
(0136) 	while(LCD1602_readBF());
    0142 DFD4      RCALL	_LCD1602_readBF
    0143 2300      TST	R16
    0144 F7E9      BNE	0x0142
(0137) 	LCD1602_sendbyte(iCmd, LCDa_ON);		//打开显示
    0145 E02C      LDI	R18,0xC
    0146 2700      CLR	R16
    0147 DFA6      RCALL	_LCD1602_sendbyte
(0138) 	while(LCD1602_readBF());
    0148 DFCE      RCALL	_LCD1602_readBF
    0149 2300      TST	R16
    014A F7E9      BNE	0x0148
(0139) 	LCD1602_clear();						//清屏
    014B DFC5      RCALL	_LCD1602_clear
(0140) 	while(LCD1602_readBF());
    014C DFCA      RCALL	_LCD1602_readBF
    014D 2300      TST	R16
    014E F7E9      BNE	0x014C
(0141) 	LCD1602_sendbyte(iCmd, LCDa_ENTRY);	// 输入模式设定		
    014F E026      LDI	R18,6
    0150 2700      CLR	R16
(0142) }    0151 CF9C      RJMP	_LCD1602_sendbyte
FILE: C:\icc\examples.avr\AVR_PQ1A_DEMO\17_RTC\MKEY.C
(0001) /*******************************************
(0002)   文件:MKEY.C
(0003)   环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
(0004)   硬件:ATMEGA16芯片
(0005)   日期:2006年12月10日 
(0006)   功能:驱动开发板上的矩阵键盘,按不同的键,则数码管显示键码0~F
(0007)   备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
(0008) /******************************************/
(0009) #include <iom16v.h>			//包含型号头文件
(0010) #include <macros.h>			//包含"位"操作头文件
(0011) #include <stdio.h>			//标准输入输出头文件
(0012) 
(0013) /*******************************************
(0014) 函数名称: Key_press
(0015) 功    能: 检测是否有键按下
(0016) 参    数: 无
(0017) 返回值  : pressed--有键按下时为TRUE,否则为FALSE
(0018) /********************************************/
(0019) uchar Mkey_press(void)
(0020) {
(0021)  uchar pressed;		 		
(0022)  KEY_DDR=OUT;			//定义数据端口为输出
_Mkey_press:
  pressed              --> R16
    0152 EF8F      LDI	R24,0xFF
    0153 BB81      OUT	P11,R24
(0023)  KEY_PORTO=0xF0;			//输出数据(输出检测码)
    0154 EF80      LDI	R24,0xF0
    0155 BB82      OUT	P12,R24
(0024)  KEY_DDR=IN;				//定义数据端口为输入
    0156 BB81      OUT	P11,R24
(0025)  if((KEY_PORTI)!=0xF0)		//检测是否有键按下
    0157 B380      IN	R24,P10
    0158 3F80      CPI	R24,0xF0
    0159 F011      BEQ	0x015C
(0026)  	pressed=TRUE;			//有键按下则返回TRUE
    015A E001      LDI	R16,1
    015B C001      RJMP	0x015D
(0027)  else
(0028)  	pressed=FALSE;			//无键按下则返回FALSE
    015C 2700      CLR	R16
(0029)  KEY_DDR=OUT;				//数据端口还原为输出
    015D EF8F      LDI	R24,0xFF
    015E BB81      OUT	P11,R24
(0030)  return pressed;
    015F 9508      RET
_Mkey_scan:
  keycode              --> R20
  i                    --> R10
    0160 940E0703  CALL	push_gset3
(0031) }
(0032) /*******************************************
(0033) 函数名称: Key_scan
(0034) 功    能: 扫描所按的键并返回键值
(0035) 参    数: 无
(0036) 返回值  : keycode--被按下键值
(0037) /********************************************/
(0038) uchar Mkey_scan(void)
(0039) {
(0040)  uchar i=0x7F,keycode=0xFF;		//i为扫描码,
    0162 E78F      LDI	R24,0x7F
    0163 2EA8      MOV	R10,R24
    0164 EF4F      LDI	R20,0xFF
(0041)  Delayms(15);					//延时消抖
    0165 E00F      LDI	R16,0xF
    0166 E010      LDI	R17,0
    0167 DF2B      RCALL	_Delayms
(0042)  if(Mkey_press()==TRUE)			//如果有键按下
    0168 DFE9      RCALL	_Mkey_press
    0169 3001      CPI	R16,1
    016A F009      BEQ	0x016C
    016B C092      RJMP	0x01FE
(0043)  {
(0044)   	do
(0045) 	{
(0046) 	   i=(i<<1|i>>7);		//进行行扫描
    016C 2C2A      MOV	R2,R10
    016D 9426      LSR	R2
    016E 9426      LSR	R2
    016F 9426      LSR	R2
    0170 9426      LSR	R2
    0171 9426      LSR	R2
    0172 9426      LSR	R2
    0173 9426      LSR	R2
    0174 2C3A      MOV	R3,R10
    0175 0C33      LSL	R3
    0176 2832      OR	R3,R2
    0177 2CA3      MOV	R10,R3
(0047) 	   KEY_DDR=0x0F;		//定义数据端口低四位为输出,高四位为输入
    0178 E08F      LDI	R24,0xF
    0179 BB81      OUT	P11,R24
(0048) 	   KEY_PORTO=i;			//输出扫描码	   	   
    017A BA32      OUT	P12,R3
(0049) 	   Delayms(1);			//防止读入出错,加入延时
    017B E001      LDI	R16,1
    017C E010      LDI	R17,0
    017D DF15      RCALL	_Delayms
(0050) 	   keycode=KEY_PORTI;	//读入原始键码
    017E B340      IN	R20,P10
(0051) 	}while((keycode&0xF0)==0xF0);	//是否检测到被按下按键(扫描到就跳出循环,否则继续扫描)
    017F 2F84      MOV	R24,R20
    0180 7F80      ANDI	R24,0xF0
    0181 3F80      CPI	R24,0xF0
    0182 F349      BEQ	0x016C
(0052) 	do
(0053) 	{
(0054) 	}while(Mkey_press()==TRUE);	//等待按键释放(为了防止按一次,执行多次的现象)
    0183 DFCE      RCALL	_Mkey_press
    0184 3001      CPI	R16,1
    0185 F3E9      BEQ	0x0183
(0055) 	Delayms(15);				//延时消抖
    0186 E00F      LDI	R16,0xF
    0187 E010      LDI	R17,0
    0188 DF0A      RCALL	_Delayms
(0056) 	switch(keycode)				//将原始键码翻译成0~F
    0189 2F64      MOV	R22,R20
    018A 2777      CLR	R23
    018B 3B67      CPI	R22,0xB7
    018C E0E0      LDI	R30,0
    018D 077E      CPC	R23,R30
    018E F409      BNE	0x0190
    018F C06B      RJMP	0x01FB
    0190 3B6B      CPI	R22,0xBB
    0191 E0E0      LDI	R30,0
    0192 077E      CPC	R23,R30
    0193 F409      BNE	0x0195
    0194 C05E      RJMP	0x01F3
    0195 3B6D      CPI	R22,0xBD
    0196 E0E0      LDI	R30,0
    0197 077E      CPC	R23,R30
    0198 F409      BNE	0x019A
    0199 C051      RJMP	0x01EB
    019A 3B6E      CPI	R22,0xBE
    019B E0E0      LDI	R30,0
    019C 077E      CPC	R23,R30
    019D F409      BNE	0x019F
    019E C044      RJMP	0x01E3
    019F EB8E      LDI	R24,0xBE
    01A0 E090      LDI	R25,0
    01A1 1786      CP	R24,R22
    01A2 0797      CPC	R25,R23
    01A3 F0A4      BLT	0x01B8
    01A4 3767      CPI	R22,0x77
    01A5 E0E0      LDI	R30,0
    01A6 077E      CPC	R23,R30
    01A7 F409      BNE	0x01A9
    01A8 C054      RJMP	0x01FD
    01A9 376B      CPI	R22,0x7B
    01AA E0E0      LDI	R30,0
    01AB 077E      CPC	R23,R30
    01AC F409      BNE	0x01AE
    01AD C047      RJMP	0x01F5
    01AE 376D      CPI	R22,0x7D
    01AF E0E0      LDI	R30,0
    01B0 077E      CPC	R23,R30
    01B1 F409      BNE	0x01B3
    01B2 C03A      RJMP	0x01ED
    01B3 376E      CPI	R22,0x7E
    01B4 E0E0      LDI	R30,0
    01B5 077E      CPC	R23,R30
    01B6 F171      BEQ	0x01E5
    01B7 C046      RJMP	0x01FE
    01B8 3D67      CPI	R22,0xD7
    01B9 E0E0      LDI	R30,0
    01BA 077E      CPC	R23,R30
    01BB F409      BNE	0x01BD
    01BC C03C      RJMP	0x01F9
    01BD 3D6B      CPI	R22,0xDB
    01BE E0E0      LDI	R30,0
    01BF 077E      CPC	R23,R30
    01C0 F181      BEQ	0x01F1
    01C1 3D6D      CPI	R22,0xDD
    01C2 E0E0      LDI	R30,0
    01C3 077E      CPC	R23,R30
    01C4 F121      BEQ	0x01E9
    01C5 3D6E      CPI	R22,0xDE
    01C6 E0E0      LDI	R30,0
    01C7 077E      CPC	R23,R30
    01C8 F0C1      BEQ	0x01E1
    01C9 3D67      CPI	R22,0xD7
    01CA E0E0      LDI	R30,0
    01CB 077E      CPC	R23,R30
    01CC F40C      BGE	0x01CE
    01CD C030      RJMP	0x01FE
    01CE 3E67      CPI	R22,0xE7
    01CF E0E0      LDI	R30,0
    01D0 077E      CPC	R23,R30
    01D1 F129      BEQ	0x01F7
    01D2 3E6B      CPI	R22,0xEB
    01D3 E0E0      LDI	R30,0
    01D4 077E      CPC	R23,R30
    01D5 F0C9      BEQ	0x01EF
    01D6 3E6D      CPI	R22,0xED
    01D7 E0E0      LDI	R30,0
    01D8 077E      CPC	R23,R30
    01D9 F069      BEQ	0x01E7
    01DA 3E6E      CPI	R22,0xEE
    01DB E0E0      LDI	R30,0
    01DC 077E      CPC	R23,R30
    01DD F009      BEQ	0x01DF
    01DE C01F      RJMP	0x01FE
(0057) 	{
(0058) 	   case 0xEE:
(0059) 	   		keycode=0x0;
    01DF 2744      CLR	R20
(0060) 			break;
    01E0 C01D      RJMP	0x01FE
(0061) 	   case 0xDE:
(0062) 	   		keycode=0x1;
    01E1 E041      LDI	R20,1
(0063) 			break;
    01E2 C01B      RJMP	0x01FE
(0064) 	   case 0xBE:
(0065) 	   		keycode=0x2;
    01E3 E042      LDI	R20,2
(0066) 			break;
    01E4 C019      RJMP	0x01FE
(0067) 	   case 0x7E:
(0068) 	   		keycode=0x3;
    01E5 E043      LDI	R20,3
(0069) 			break;
    01E6 C017      RJMP	0x01FE
(0070) 	   case 0xED:
(0071) 	   		keycode=0x4;
    01E7 E044      LDI	R20,4
(0072) 			break;
    01E8 C015      RJMP	0x01FE
(0073) 	   case 0xDD:
(0074) 	   		keycode=0x5;
    01E9 E045      LDI	R20,5
(0075) 			break;
    01EA C013      RJMP	0x01FE
(0076) 	   case 0xBD:
(0077) 	   		keycode=0x6;
    01EB E046      LDI	R20,6
(0078) 			break;
    01EC C011      RJMP	0x01FE
(0079) 	   case 0x7D:
(0080) 	   		keycode=0x7;
    01ED E047      LDI	R20,7
(0081) 			break;
    01EE C00F      RJMP	0x01FE
(0082) 	   case 0xEB:
(0083) 	   		keycode=0x8;
    01EF E048      LDI	R20,0x8
(0084) 			break;
    01F0 C00D      RJMP	0x01FE
(0085) 	   case 0xDB:
(0086) 	   		keycode=0x9;
    01F1 E049      LDI	R20,0x9
(0087) 			break;
    01F2 C00B      RJMP	0x01FE
(0088) 	   case 0xBB:
(0089) 	   		keycode=0xA;
    01F3 E04A      LDI	R20,0xA
(0090) 			break;
    01F4 C009      RJMP	0x01FE
(0091) 	   case 0x7B:
(0092) 	   		keycode=0xB;

⌨️ 快捷键说明

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