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

📄 ds12887.lst

📁 12C887 的驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0213 01B8      MOVW	R22,R16
(0140) }
(0141) 
(0142) /****************************** LCD汉字显示函数(8*16)****************************************/
(0143) 
(0144) void displayL(uchar*array,uchar x,uchar y)            //array是点阵字模指针,x是指屏竖方向的坐标,y是指屏横方向上的坐标
(0145) {     
(0146)    uchar i;
(0147)    lcdcommand(0,0xb8+x);                              //设置显示本字符的初始地址                    
    0214 2F24      MOV	R18,R20
    0215 5428      SUBI	R18,0x48
    0216 2700      CLR	R16
    0217 DF1F      RCALL	_lcdcommand
(0148)    lcdcommand(0,0x40+y);
    0218 812C      LDD	R18,Y+4
    0219 5C20      SUBI	R18,0xC0
    021A 2700      CLR	R16
    021B DF1B      RCALL	_lcdcommand
(0149)    for(i=0;i<16;i++)                                  //每半个字代码为16元素的数组
    021C 2744      CLR	R20
    021D C008      RJMP	0x0226
(0150)      {	
(0151)       lcddatas(0,*(array+i));
    021E 2FE4      MOV	R30,R20
    021F 27FF      CLR	R31
    0220 0FE6      ADD	R30,R22
    0221 1FF7      ADC	R31,R23
    0222 8120      LDD	R18,Z+0
    0223 2700      CLR	R16
    0224 DF24      RCALL	_lcddatas
    0225 9543      INC	R20
    0226 3140      CPI	R20,0x10
    0227 F3B0      BCS	0x021E
    0228 940E047E  CALL	pop_gset2
    022A 9508      RET
_displayR:
  i                    --> R20
  y                    --> Y+4
  x                    --> R20
  array                --> R22
    022B 940E048D  CALL	push_gset2
    022D 2F42      MOV	R20,R18
    022E 01B8      MOVW	R22,R16
(0152) 	 						
(0153)      }
(0154) 
(0155) }
(0156) 
(0157) 
(0158) void displayR(uchar*array,uchar x,uchar y)            //array是点阵字模指针,x是指屏竖方向的坐标,y是指屏横方向上的坐标
(0159) {     
(0160)    uchar i;
(0161) 
(0162)    lcdcommand(1,0xb8+x);                             
    022F 2F24      MOV	R18,R20
    0230 5428      SUBI	R18,0x48
    0231 E001      LDI	R16,1
    0232 DF04      RCALL	_lcdcommand
(0163)    lcdcommand(1,0x40+y);
    0233 812C      LDD	R18,Y+4
    0234 5C20      SUBI	R18,0xC0
    0235 E001      LDI	R16,1
    0236 DF00      RCALL	_lcdcommand
(0164) 
(0165)    for(i=0;i<16;i++)                                  //每半个字代码为16元素的数组
    0237 2744      CLR	R20
    0238 C008      RJMP	0x0241
(0166)      {	
(0167)       lcddatas(1,*(array+i));		 						
    0239 2FE4      MOV	R30,R20
    023A 27FF      CLR	R31
    023B 0FE6      ADD	R30,R22
    023C 1FF7      ADC	R31,R23
    023D 8120      LDD	R18,Z+0
    023E E001      LDI	R16,1
    023F DF09      RCALL	_lcddatas
    0240 9543      INC	R20
    0241 3140      CPI	R20,0x10
    0242 F3B0      BCS	0x0239
    0243 940E047E  CALL	pop_gset2
    0245 9508      RET
_display_chinese:
  heng                 --> R10
  zong                 --> R22
  array2               --> R20
  array1               --> R12
    0246 940E0489  CALL	push_gset4
    0248 01A9      MOVW	R20,R18
    0249 0168      MOVW	R12,R16
    024A 9721      SBIW	R28,1
    024B 8569      LDD	R22,Y+9
    024C 84AB      LDD	R10,Y+11
(0168)      }
(0169) 
(0170) }	
(0171) 
(0172) void display_chinese(uchar*array1,uchar*array2,uchar zong,uchar heng)
(0173) {
(0174)   if((heng>=0)&&(heng<=3))         //左半屏显示
    024D 2D8A      MOV	R24,R10
    024E 3080      CPI	R24,0
    024F F0A0      BCS	0x0264
    0250 E083      LDI	R24,3
    0251 158A      CP	R24,R10
    0252 F088      BCS	0x0264
(0175)    {
(0176)     displayL(array1,zong*2,heng*16);	displayL(array2,zong*2+1,heng*16);
    0253 E180      LDI	R24,0x10
    0254 9D8A      MUL	R24,R10
    0255 8208      STD	Y+0,R0
    0256 E082      LDI	R24,2
    0257 9F86      MUL	R24,R22
    0258 2D20      MOV	R18,R0
    0259 0186      MOVW	R16,R12
    025A DFB5      RCALL	_displayL
    025B E180      LDI	R24,0x10
    025C 9D8A      MUL	R24,R10
    025D 8208      STD	Y+0,R0
    025E E082      LDI	R24,2
    025F 9F86      MUL	R24,R22
    0260 2D20      MOV	R18,R0
    0261 5F2F      SUBI	R18,0xFF
    0262 018A      MOVW	R16,R20
    0263 DFAC      RCALL	_displayL
(0177)    }
(0178)   if((heng>=4)&&(heng<=7))         //右半屏显示
    0264 2D8A      MOV	R24,R10
    0265 3084      CPI	R24,4
    0266 F0C0      BCS	0x027F
    0267 E087      LDI	R24,7
    0268 158A      CP	R24,R10
    0269 F0A8      BCS	0x027F
(0179)    {
(0180)     displayR(array1,zong*2,(heng-4)*16);	displayR(array2,zong*2+1,(heng-4)*16);
    026A E180      LDI	R24,0x10
    026B 9D8A      MUL	R24,R10
    026C 2D80      MOV	R24,R0
    026D 5480      SUBI	R24,0x40
    026E 8388      STD	Y+0,R24
    026F E082      LDI	R24,2
    0270 9F86      MUL	R24,R22
    0271 2D20      MOV	R18,R0
    0272 0186      MOVW	R16,R12
    0273 DFB7      RCALL	_displayR
    0274 E180      LDI	R24,0x10
    0275 9D8A      MUL	R24,R10
    0276 2D80      MOV	R24,R0
    0277 5480      SUBI	R24,0x40
    0278 8388      STD	Y+0,R24
    0279 E082      LDI	R24,2
    027A 9F86      MUL	R24,R22
    027B 2D20      MOV	R18,R0
    027C 5F2F      SUBI	R18,0xFF
    027D 018A      MOVW	R16,R20
    027E DFAC      RCALL	_displayR
(0181)    }
    027F 9621      ADIW	R28,1
    0280 940E0484  CALL	pop_gset4
    0282 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\USING07-07\Mega128\12c887\DS12C887.C
(0001) 
(0002) #include <iom128v.h>
(0003) #include <macros.h>
(0004) #include"DS12C887.H"
(0005) #include"char.h"
(0006) #include"lcd.h"
(0007) #include"chinese.h"
(0008) 
(0009) #define uchar unsigned char
(0010) uchar second,second10,second01,minute,minute10,minute01,hour,hour10,hour01;
(0011) uchar weekday,weekday10,weekday01,monthday,monthday10,monthday01,month,month10,month01,year,year10,year01;
(0012) //**********************************延时函数**************************************/
(0013) 
(0014) void delayds12887(uchar i)
(0015) {
(0016)  while(--i)                
_delayds12887:
  i                    --> R16
    0283 2F80      MOV	R24,R16
    0284 5081      SUBI	R24,1
    0285 2F08      MOV	R16,R24
    0286 2388      TST	R24
    0287 F7D9      BNE	0x0283
    0288 9508      RET
(0017) 	{;}
(0018) }
(0019) 
(0020) //*****************************写DS12887时间寄存器函数****************************/
(0021) 
(0022) void Write_Regtime(uchar Second,uchar Minute,uchar Hour,uchar Weekday,uchar Monthday,uchar Month,uchar Year)
(0023) {		
(0024)  SECOND=Second;        		//写秒初值
_Write_Regtime:
  Year                 --> Y+8
  Month                --> Y+6
  Monthday             --> Y+4
  Weekday              --> Y+2
  Hour                 --> Y+0
  Minute               --> R18
  Second               --> R16
    0289 9300A000  STS	0xA000,R16
(0025)  MINUTE=Minute;				//写分初值
    028B 9320A002  STS	0xA002,R18
(0026)  HOUR=Hour;					//写小时初值
    028D 8008      LDD	R0,Y+0
    028E 9200A004  STS	0xA004,R0
(0027)  WEEKDAY=Weekday;			//写星期天数初值
    0290 800A      LDD	R0,Y+2
    0291 9200A006  STS	0xA006,R0
(0028)  MONTHDAY=Monthday;			//写月天数初值
    0293 800C      LDD	R0,Y+4
    0294 9200A007  STS	0xA007,R0
(0029)  MONTH=Month;				//写月初值
    0296 800E      LDD	R0,Y+6
    0297 9200A008  STS	0xA008,R0
(0030)  YEAR=Year;					//写年初值
    0299 8408      LDD	R0,Y+8
    029A 9200A009  STS	0xA009,R0
    029C 9508      RET
(0031) }
(0032) 
(0033) 
(0034) //*************************写DS12887特殊寄存器A,B,C,D函数**********************/
(0035) 
(0036) void Write_Regspecial(uchar regA,uchar regB,uchar regC,uchar regD)
(0037) {		
(0038)  REG_A=regA; 
_Write_Regspecial:
  regD                 --> Y+2
  regC                 --> Y+0
  regB                 --> R18
  regA                 --> R16
    029D 9300A00A  STS	0xA00A,R16
(0039)  REG_B=regB;
    029F 9320A00B  STS	0xA00B,R18
(0040)  REG_C=regC;
    02A1 8008      LDD	R0,Y+0
    02A2 9200A00C  STS	0xA00C,R0
(0041)  REG_C=regD; 
    02A4 800A      LDD	R0,Y+2
    02A5 9200A00C  STS	0xA00C,R0
    02A7 9508      RET
(0042) }
(0043) 
(0044) //******************************读DS12887时间寄存器函数*****************************/
(0045) 
(0046) Read_RegSec(void)   
(0047) {		
(0048)  return SECOND;
_Read_RegSec:
    02A8 9100A000  LDS	R16,0xA000
    02AA 2711      CLR	R17
    02AB 9508      RET
(0049) }
(0050) 
(0051) Read_RegMin(void)
(0052) {   
(0053)  return MINUTE;
_Read_RegMin:
    02AC 9100A002  LDS	R16,0xA002
    02AE 2711      CLR	R17
    02AF 9508      RET
(0054) }
(0055) 
(0056) Read_RegHour(void)
(0057) {  
(0058)  return HOUR;
_Read_RegHour:
    02B0 9100A004  LDS	R16,0xA004
    02B2 2711      CLR	R17
    02B3 9508      RET
(0059) }
(0060) 
(0061) Read_RegWeekday(void)
(0062) {  
(0063)  return WEEKDAY;
_Read_RegWeekday:
    02B4 9100A006  LDS	R16,0xA006
    02B6 2711      CLR	R17
    02B7 9508      RET
(0064) }
(0065) 
(0066) Read_RegMonthday(void)
(0067) {  
(0068)  return MONTHDAY;
_Read_RegMonthday:
    02B8 9100A007  LDS	R16,0xA007
    02BA 2711      CLR	R17
    02BB 9508      RET
(0069) }
(0070) 
(0071) Read_RegMonth(void)
(0072) {  
(0073)  return MONTH;
_Read_RegMonth:
    02BC 9100A008  LDS	R16,0xA008
    02BE 2711      CLR	R17
    02BF 9508      RET
(0074) }
(0075) 
(0076) Read_RegYear(void)
(0077) {  
(0078)  return YEAR;
_Read_RegYear:
    02C0 9100A009  LDS	R16,0xA009
    02C2 2711      CLR	R17
    02C3 9508      RET
_juddisplay:
  x                    --> R22
  y                    --> R20
  number               --> R10
    02C4 940E048B  CALL	push_gset3
    02C6 2F42      MOV	R20,R18
    02C7 2EA0      MOV	R10,R16
    02C8 9723      SBIW	R28,3
    02C9 8569      LDD	R22,Y+9
(0079) }
(0080) 
(0081) /*********************************显示处理函数************************************/
(0082) 
(0083) void juddisplay(uchar number,uchar y,uchar x)             //(要显示的字符,X位置,Y位置)
(0084) {					
(0085)   switch(number)                                          //判断数字是几,并显示在指定位置上          
    02CA 24BB      CLR	R11
    02CB 20AA      TST	R10
    02CC F419      BNE	0x02D0
    02CD 20BB      TST	R11
    02CE F409      BNE	0x02D0
    02CF C02F      RJMP	0x02FF
    02D0 01C5      MOVW	R24,R10
    02D1 3081      CPI	R24,1
    02D2 E0E0      LDI	R30,0
    02D3 079E      CPC	R25,R30
    02D4 F409      BNE	0x02D6
    02D5 C032      RJMP	0x0308
    02D6 3082      CPI	R24,2
    02D7 E0E0      LDI	R30,0
    02D8 079E      CPC	R25,R30
    02D9 F409      BNE	0x02DB
    02DA C036      RJMP	0x0311
    02DB 3083      CPI	R24,3
    02DC E0E0      LDI	R30,0
    02DD 079E      CPC	R25,R30
    02DE F409      BNE	0x02E0
    02DF C03A      RJMP	0x031A
    02E0 3084      CPI	R24,4
    02E1 E0E0      LDI	R30,0
    02E2 079E      CPC	R25,R30
    02E3 F409      BNE	0x02E5
    02E4 C03E      RJMP	0x0323
    02E5 3085      CPI	R24,5
    02E6 E0E0      LDI	R30,0
    02E7 079E      CPC	R25,R30
    02E8 F409      BNE	0x02EA
    02E9 C042      RJMP	0x032C
    02EA 3086      CPI	R24,6
    02EB E0E0      LDI	R30,0
    02EC 079E      CPC	R25,R30
    02ED F409      BNE	0x02EF
    02EE C046      RJMP	0x0335
    02EF 3087      CPI	R24,7
    02F0 E0E0      LDI	R30,0
    02F1 079E      CPC	R25,R30
    02F2 F409      BNE	0x02F4
    02F3 C04A      RJMP	0x033E
    02F4 3088      CPI	R24,0x8
    02F5 E0E0      LDI	R30,0
    02F6 079E      CPC	R25,R30
    02F7 F409      BNE	0x02F9
    02F8 C04E      RJMP	0x0347
    02F9 3089      CPI	R24,0x9
    02FA E0E0      LDI	R30,0
    02FB 079E      CPC	R25,R30
    02FC F409      BNE	0x02FE
    02FD C052      RJMP	0x0350
    02FE C059      RJMP	0x0358
(0086) 		{
(0087) 		  case 0x00:display_char(n01,n02,y,x);break;
    02FF 836A      STD	Y+2,R22
    0300 8348      STD	Y+0,R20
    0301 E028      LDI	R18,0x8
    0302 E031      LDI	R19,1
    0303 E000      LDI	R16,0
    0304 E011      LDI	R17,1
    0305 940E01DB  CALL	_display_char
    0307 C050      RJMP	0x0358
(0088) 		  case 0x01:display_char(n11,n12,y,x);break;
    0308 836A      STD	Y+2,R22
    0309 8348      STD	Y+0,R20
    030A E128      LDI	R18,0x18
    030B E031      LDI	R19,1
    030C E100      LDI	R16,0x10
    030D E011      LDI	R17,1
    030E 940E01DB  CALL	_display_char
    0310 C047      RJMP	0x0358
(0089) 		  case 0x02:display_char(n21,n22,y,x);break;
    0311 836A      STD	Y+2,R22
    0312 8348      STD	Y+0,R20
    0313 E228      LDI	R18,0x28
    0314 E031      LDI	R19,1
    0315 E200      LDI	R16,0x20
    0316 E011      LDI	R17,1
    0317 940E01DB  CALL	_display_char
    0319 C03E      RJMP	0x0358
(0090) 		  case 0x03:display_char(n31,n32,y,x);break;
    031A 836A      STD	Y+2,R22
    031B 8348      STD	Y+0,R20
    031C E328      LDI	R18,0x38
    031D E031      LDI	R19,1
    031E E300      LDI	R16,0x30
    031F E011      LDI	R17,1
    0320 940E01DB  CALL	_display_char
    0322 C035      RJMP	0x0358
(0091) 	      case 0x04:display_char(n41,n42,y,x);break;
    0323 836A      STD	Y+2,R22
    0324 8348      STD	Y+0,R20
    0325 E428      LDI	R18,0x48
    0326 E031      LDI	R19,1
    0327 E400      LDI	R16,0x40
    0328 E011      LDI	R17,1
    0329 940E01DB  CALL	_display_char
    032B C02C      RJMP	0x0358
(0092) 	      case 0x05:display_char(n51,n52,y,x);break;
    032C 836A      STD	Y+2,R22
    032D 8348      STD	Y+0,R20

⌨️ 快捷键说明

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