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

📄 h2test.lst

📁 基于AVR单片机的热电偶测量系统源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0023)       功能:清除lcd指定页内显示的所有数据
(0024)       
(0025)     7.Bmp8x8()
(0026)       功能:显示8个点乘8个点的图像
(0027)       
(0028)     9.Bmp8x16()
(0029)       功能:显示8个点乘16个点的图像
(0030)       
(0031)       
(0032)     10.Bmp8x16_Rev()_
(0033)       功能:反白显示8个点乘16个点的图像
(0034) 
(0035)     11.Draw_NtoArab()
(0036)       功能:将数值显示为阿拉伯数字
(0037)       
(0038)     12.Draw_NtoArab_rev()
(0039)       功能:反白显示
(0040) 
(0041) ***********************************************************/
(0042) #include <iom16v.h>
(0043) #include <macros.h>
(0044) #include "main.h"
(0045) #include "lcd.h"
(0046) 
(0047) void Send_Byte(unsigned char bdata)
(0048) {    
(0049)      set_CS;    		//模拟时序信号
_Send_Byte:
  bdata                --> R16
    04D9 9AA9      SBI	0x15,1
(0050)      set_CS;
    04DA 9AA9      SBI	0x15,1
(0051) 	 set_RS;
    04DB 9AAF      SBI	0x15,7
(0052) 	 set_WR;
    04DC 9A95      SBI	0x12,5
(0053) 	 _nop;      		//开始发送数据
    04DD 0000      NOP
(0054) 	 PORTA = bdata;    	//将显示数据放在端口A 
    04DE BB0B      OUT	0x1B,R16
(0055)      set_RS;
    04DF 9AAF      SBI	0x15,7
(0056)      clr_CS;
    04E0 98A9      CBI	0x15,1
(0057)      clr_WR;
    04E1 9895      CBI	0x12,5
(0058)      _nop;
    04E2 0000      NOP
(0059)      clr_WR;
    04E3 9895      CBI	0x12,5
(0060)      _nop;
    04E4 0000      NOP
(0061)      set_WR;
    04E5 9A95      SBI	0x12,5
(0062)      _nop;
    04E6 0000      NOP
(0063)      set_CS;
    04E7 9AA9      SBI	0x15,1
(0064)      set_RS;
    04E8 9AAF      SBI	0x15,7
    04E9 9508      RET
(0065) }
(0066) 
(0067) 
(0068) void Send_Command(unsigned char cdata)
(0069) {    
(0070)          set_CS;
_Send_Command:
  cdata                --> R16
    04EA 9AA9      SBI	0x15,1
(0071) 	 set_RS;
    04EB 9AAF      SBI	0x15,7
(0072) 	 set_WR;
    04EC 9A95      SBI	0x12,5
(0073) 	 _nop;               //开始发送命令
    04ED 0000      NOP
(0074) 	 PORTA = cdata;     //将命令字放在端口A
    04EE BB0B      OUT	0x1B,R16
(0075) 	 clr_RS;
    04EF 98AF      CBI	0x15,7
(0076) 	 clr_CS;
    04F0 98A9      CBI	0x15,1
(0077) 	 _nop;
    04F1 0000      NOP
(0078) 	 clr_WR;
    04F2 9895      CBI	0x12,5
(0079) 	 _nop;
    04F3 0000      NOP
(0080) 	 set_WR;
    04F4 9A95      SBI	0x12,5
(0081) 	 _nop;
    04F5 0000      NOP
(0082) 	 set_CS;
    04F6 9AA9      SBI	0x15,1
(0083) 	 set_RS;
    04F7 9AAF      SBI	0x15,7
    04F8 9508      RET
_Gen_Column_MSB:
  temp                 --> R20
  column               --> R16
    04F9 940E0ECA  CALL	push_gset1
(0084) }
(0085) 
(0086) 
(0087) 
(0088) unsigned char Gen_Column_MSB(unsigned char column)
(0089) {
(0090)     unsigned char temp; //用于保存列数的高4bit命令字
(0091)     temp = column+0x04 ;	
    04FB 2F40      MOV	R20,R16
    04FC 5F4C      SUBI	R20,0xFC
(0092)     temp = temp >>4;  //右移4位,得到高4位的列数据
    04FD 2F84      MOV	R24,R20
    04FE 9582      SWAP	R24
    04FF 708F      ANDI	R24,0xF
    0500 2F48      MOV	R20,R24
(0093)     temp |=0x10;   //00010000,将列地址的DB4置1
    0501 6140      ORI	R20,0x10
(0094)     return temp;
    0502 2F04      MOV	R16,R20
    0503 940E0ECD  CALL	pop_gset1
    0505 9508      RET
_Gen_Column_LSB:
  temp                 --> R20
  column               --> R16
    0506 940E0ECA  CALL	push_gset1
(0095) }
(0096) 
(0097) 
(0098) 
(0099) 
(0100) unsigned char Gen_Column_LSB(unsigned char column)
(0101) {
(0102)     unsigned char temp = column;
    0508 2F40      MOV	R20,R16
(0103)     temp = column+0x04 ;	
    0509 5F4C      SUBI	R20,0xFC
(0104)     temp &= 0x0f;	//取出column的低四位
    050A 704F      ANDI	R20,0xF
(0105)     return temp;
    050B 2F04      MOV	R16,R20
    050C 940E0ECD  CALL	pop_gset1
    050E 9508      RET
_Gen_Page:
  temp                 --> R20
  page                 --> R16
    050F 940E0ECA  CALL	push_gset1
(0106) }
(0107) 
(0108) 
(0109) 
(0110) 
(0111) unsigned char Gen_Page(unsigned char page)
(0112) {
(0113)     unsigned char temp;
(0114)     temp = page & 0x0f;
    0511 2F40      MOV	R20,R16
    0512 704F      ANDI	R20,0xF
(0115)     temp |= 0xb0;   //得到显示数据页的控制字
    0513 6B40      ORI	R20,0xB0
(0116)     return temp;
    0514 2F04      MOV	R16,R20
    0515 940E0ECD  CALL	pop_gset1
    0517 9508      RET
(0117) }
(0118) 
(0119) 
(0120) 
(0121) 
(0122) void Initial_LCD(void)
(0123) {
(0124) 	  Send_Command(0xe2);	//初始化内部功能(RESET),初始化初始显示线,列地址,页地址和普通
_Initial_LCD:
    0518 EE02      LDI	R16,0xE2
    0519 DFD0      RCALL	_Send_Command
(0125) 	  			//输出地址状态到初始状态,但是不能影响显示数据RAM的内容
(0126)           wait;                 //等待2个时钟周期
    051A 0000      NOP
    051B 0000      NOP
(0127) 	  Send_Command(0xaf);	//Display on
    051C EA0F      LDI	R16,0xAF
    051D DFCC      RCALL	_Send_Command
(0128) 	  Send_Command(0x23);	//internal voltage regulator resistor ratio,(4.5)0x23
    051E E203      LDI	R16,0x23
    051F DFCA      RCALL	_Send_Command
(0129) 	  Send_Command(0x2f);	//内部供电VC=VR=VF:111,使内部VC,VR,VF的电压控制电路工作
    0520 E20F      LDI	R16,0x2F
    0521 DFC8      RCALL	_Send_Command
(0130) 	  Send_Command(0x40);	//初始化显示线在line address 0
    0522 E400      LDI	R16,0x40
    0523 DFC6      RCALL	_Send_Command
(0131) 	  Send_Command(0x81);	//设置参考电压模式对比度共64级	
    0524 E801      LDI	R16,0x81
    0525 DFC4      RCALL	_Send_Command
(0132) 	  Send_Command(0xa1);	
    0526 EA01      LDI	R16,0xA1
    0527 DFC2      RCALL	_Send_Command
(0133) 	  Send_Command(0xa1);	
    0528 EA01      LDI	R16,0xA1
    0529 DFC0      RCALL	_Send_Command
(0134) 	  Send_Command(0xa3);	//选择LCD偏置电压比率以驱动LCD,bias=1
    052A EA03      LDI	R16,0xA3
    052B DFBE      RCALL	_Send_Command
(0135) 	  Send_Command(0xa4);	//全亮显示,EON=0,normal display(不管显示RAM中有何数据)
    052C EA04      LDI	R16,0xA4
    052D DFBC      RCALL	_Send_Command
(0136) 	  Send_Command(0xb0);	//设置页地址为0
    052E EB00      LDI	R16,0xB0
    052F DFBA      RCALL	_Send_Command
(0137) 	  Send_Command(0x0c);   //选择COM(行地址)输出扫描方向,决定LCD驱动器的输出状态。SHL=0,normal direction(COM0-COM63)
    0530 E00C      LDI	R16,0xC
    0531 DFB8      RCALL	_Send_Command
(0138) 	  Send_Command(0xad);	//设置STATIC INDICATOR STATUS(SM=1,STATIC INDICATOR ON)
    0532 EA0D      LDI	R16,0xAD
    0533 DFB6      RCALL	_Send_Command
(0139) 	  Send_Command(0x03);	//STATUS OF STATIC INDICATOR OUTPUT ALWAYS ON
    0534 E003      LDI	R16,3
    0535 DFB4      RCALL	_Send_Command
    0536 9508      RET
_Clear_DDRAM:
  c_column_lsb         --> R20
  c_column_msb         --> R20
  start_page           --> R22
  j                    --> R20
  i                    --> R12
  c_page_end           --> R10
  c_page_start         --> R12
    0537 940E0EC4  CALL	push_gset4
    0539 2EA2      MOV	R10,R18
    053A 2EC0      MOV	R12,R16
(0140) }
(0141) 
(0142) 
(0143) 
(0144) void Clear_DDRAM(unsigned char c_page_start,unsigned char c_page_end)
(0145) { 
(0146) 	unsigned char i,j;
(0147) 	unsigned char start_page;   //用于存放清除的起始页数
(0148) 	unsigned char c_column_msb=0x10,c_column_lsb=0x04;  //清除的起始列为第4列
    053B E140      LDI	R20,0x10
    053C E044      LDI	R20,4
(0149) 	
(0150) 	start_page = Gen_Page(c_page_start);    //取得清除的起始页地址
    053D 2D0C      MOV	R16,R12
    053E DFD0      RCALL	_Gen_Page
    053F 2F60      MOV	R22,R16
(0151) 	for(j=c_page_start;j<=c_page_end;j++)
    0540 2D4C      MOV	R20,R12
    0541 C010      RJMP	0x0552
(0152) 	{
(0153)     	Send_Command(0x10);	//从第4列开始清除LCD显示的数据
    0542 E100      LDI	R16,0x10
    0543 DFA6      RCALL	_Send_Command
(0154)         Send_Command(0x04);
    0544 E004      LDI	R16,4
    0545 DFA4      RCALL	_Send_Command
(0155)         Send_Command(start_page);	//清除位置在第start_page页
    0546 2F06      MOV	R16,R22
    0547 DFA2      RCALL	_Send_Command
(0156)         for(i=0;i<=127;i++)
    0548 24CC      CLR	R12
    0549 C003      RJMP	0x054D
(0157)         {
(0158)         	Send_Byte(WHITE);	//清除页内所有列显示的数据
    054A 2700      CLR	R16
    054B DF8D      RCALL	_Send_Byte
    054C 94C3      INC	R12
    054D E78F      LDI	R24,0x7F
    054E 158C      CP	R24,R12
    054F F7D0      BCC	0x054A
(0159)         }
(0160)         start_page++;   //清除下一页数据
    0550 9563      INC	R22
    0551 9543      INC	R20
    0552 16A4      CP	R10,R20
    0553 F770      BCC	0x0542
    0554 940E0EBC  CALL	pop_gset4
    0556 9508      RET
_Bmp8x8:
  i                    --> R20
  pdata                --> R22
  column               --> R20
  page                 --> R10
    0557 940E0EC6  CALL	push_gset3
    0559 2F42      MOV	R20,R18
    055A 2EA0      MOV	R10,R16
    055B 816E      LDD	R22,Y+6
    055C 817F      LDD	R23,Y+7
(0161)     }
(0162) }
(0163) 
(0164) //////////////////////////////////////////////////////////////////////////
(0165) //绘制一个8*8大小的位图
(0166) //////////////////////////////////////////////////////////////////////////
(0167) void Bmp8x8(unsigned char page,unsigned char column,const unsigned char 
(0168) *pdata)
(0169) {
(0170) 	  unsigned char i;
(0171) 	  
(0172) 	  Send_Command(Gen_Page(page));	//送页地址
    055D 2D0A      MOV	R16,R10
    055E DFB0      RCALL	_Gen_Page
    055F DF8A      RCALL	_Send_Command
(0173) 	  Send_Command(Gen_Column_LSB(column));	//送低4位地址
    0560 2F04      MOV	R16,R20
    0561 DFA4      RCALL	_Gen_Column_LSB
    0562 DF87      RCALL	_Send_Command
(0174) 	  Send_Command(Gen_Column_MSB(column));	//送高4位地址
    0563 2F04      MOV	R16,R20
    0564 DF94      RCALL	_Gen_Column_MSB
    0565 DF84      RCALL	_Send_Command
(0175) 	  for(i=0;i<=7;i++)	//水平宽度为8列
    0566 2744      CLR	R20
    0567 C006      RJMP	0x056E
(0176) 	  {
(0177) 	  	  Send_Byte(*pdata);
    0568 01FB      MOVW	R30,R22
    0569 9104      LPM	R16,0(Z)
    056A DF6E      RCALL	_Send_Byte
(0178) 	  	  pdata++;
    056B 5F6F      SUBI	R22,0xFF
    056C 4F7F      SBCI	R23,0xFF
    056D 9543      INC	R20
    056E E087      LDI	R24,7
    056F 1784      CP	R24,R20
    0570 F7B8      BCC	0x0568
    0571 940E0EB9  CALL	pop_gset3
    0573 9508      RET
_Bmp8x16:
  j                    --> R20
  i                    --> R14
  pdata                --> R10
  column               --> R12
  page                 --> R22
    0574 940E0EC2  CALL	push_gset5
    0576 2EC2      MOV	R12,R18
    0577 2F60      MOV	R22,R16
    0578 84AA      LDD	R10,Y+10
    0579 84BB      LDD	R11,Y+11
(0179) 	  }
(0180) }
(0181) //////////////////////////////////////////////////////////////////////////
(0182) //绘制一个8*16大小的位图
(0183) //////////////////////////////////////////////////////////////////////////
(0184) void Bmp8x16(unsigned char page,unsigned char column,const unsigned char 
(0185) *pdata)
(0186) {
(0187) 	   unsigned char i;
(0188) 	   unsigned char j;
(0189) 	   
(0190) 	   for(j=0;j<=1;j++)
    057A 2744      CLR	R20
    057B C017      RJMP	0x0593
(0191) 	   {
(0192) 	   	   Send_Command(Gen_Page(page));
    057C 2F06      MOV	R16,R22
    057D DF91      RCALL	_Gen_Page
    057E DF6B      RCALL	_Send_Command
(0193) 	       Send_Command(Gen_Column_LSB(column));
    057F 2D0C      MOV	R16,R12
    0580 DF85      RCALL	_Gen_Column_LSB
    0581 DF68      RCALL	_Send_Command
(0194) 	       Send_Command(Gen_Column_MSB(column));  
    0582 2D0C      MOV	R16,R12
    0583 DF75      RCALL	_Gen_Column_MSB
    0584 DF65      RCALL	_Send_Command
(0195)      	   for(i=0;i<=7;i++)
    0585 24EE      CLR	R14
    0586 C007      RJMP	0x058E
(0196) 	       {
(0197) 	   	       Send_Byte(*pdata);
    0587 01F5      MOVW	R30,R10
    0588 9104      LPM	R16,0(Z)
    0589 DF4F      RCALL	_Send_Byte
(0198) 	   	       pdata++;
    058A 01C5      MOVW	R24,R10
    058B 9601      ADIW	R24,1
    058C 015C      MOVW	R10,R24
    058D 94E3      INC	R14
    058E E087      LDI	R24,7
    058F 158E      CP	R24,R14
    0590 F7B0      BCC	0x0587
(0199) 	       }
(0200) 	       page++;
    0591 9563      INC	R22
    0592 9543      INC	R20
    0593 E081      LDI	R24,1
    0594 1784      CP	R24,R20
    0595 F730      BCC	0x057C
    0596 940E0EBF  CALL	pop_gset5
    0598 9508      RET
_Bmp8x16_rev:
  j                    --> R20
  i                    --> R14
  pdata                --> R10
  column               --> R12
  page                 --> R22
    0599 940E0EC2  CALL	push_gset5
    059B 2EC2      MOV	R12,R18
    059C 2F60      MOV	R22,R16
    059D 84AA      LDD	R10,Y+10
    059E 84BB      LDD	R11,Y+11
(0201) 	   }
(0202) }
(0203) 
(0204) //////////////////////////////////////////////////////////////////////////
(0205) //绘制一个反白显示8*16大小的位图
(0206) //////////////////////////////////////////////////////////////////////////
(0207) void Bmp8x16_rev(unsigned char page,unsigned char column,const unsigned char 
(0208) *pdata)
(0209) {
(0210) 	   unsigned char i;
(0211) 	   unsigned char j;
(0212) 	   
(0213) 	   for(j=0;j<=1;j++)
    059F 2744      CLR	R20

⌨️ 快捷键说明

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