亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lcm_drive.c

?? 字符型 及圖形 液晶顯示程序
?? C
字號:
/***********************************************************************
* 文件名:LCM_DRIVE.C
* 功能:圖形液晶TG12864B-2驅動程序。
* 說明:在LCM_DRIVE.H文件中定義了LCM操作地址,左半屏的寫命令操作地址為2004H,寫
*      數據操作地址為2005H,右半屏的寫命令操作地址為2000H,寫數據操作地址為2001H;
*      由于GRAPHICS.C中使用了disp_buf作為作圖緩沖區,所以LCM_WriteByte()、LCM_
*      DispFill()均要更新disp_buf。
***********************************************************************/
#include  "CONFIG.H"

/* LCM復位控制腳定義 */
sbit	LCM_RST		= P1^0;			

/***********************************************************************
* 名稱:LCM_Wr1Command()
* 功能:寫命令子程序,所選屏為左半屏(CS1)。
* 入口參數:command  	要寫入LCM的命令字
***********************************************************************/
#define	LCM_Wr1Command(command)		LCMCS1W_COM = command

/***********************************************************************
* 名稱:LCM_Wr2Command()
* 功能:寫命令子程序,所選屏為右半屏(CS2)。
* 入口參數:command  	要寫入LCM的命令字
***********************************************************************/
#define	LCM_Wr2Command(command)		LCMCS2W_COM = command

/***********************************************************************
* 名稱:LCM_Wr1Data()
* 功能:寫數據子程序,所選屏為左半屏(CS1)。
* 入口參數:wrdata  	要寫入LCM的數據
***********************************************************************/
#define LCM_Wr1Data(wrdata) 		LCMCS1W_DAT = wrdata

/***********************************************************************
* 名稱:LCM_Wr2Data()
* 功能:寫數據子程序,所選屏為右半屏(CS2)。
* 入口參數:wrdata  	要寫入LCM的數據
***********************************************************************/
#define LCM_Wr2Data(wrdata) 		LCMCS2W_DAT = wrdata


/***********************************************************************
* 名稱:LCM_DispIni()
* 功能:LCM顯示初始化。使能顯示,設置顯示起始行為0并清屏。
* 入口參數:無
* 出口參數:無
***********************************************************************/
void  LCM_DispIni(void)
{  uint16  i;

   LCM_RST = 0;				// 復位驅動芯片
   for(i=0; i<500; i++);
   LCM_RST = 1;    

   LCM_Wr1Command(LCM_DISPON);		// 打開顯示
   LCM_Wr1Command(LCM_STARTROW);	// 設置顯示起始行為0
   LCM_Wr2Command(LCM_DISPON);	
   LCM_Wr2Command(LCM_STARTROW);		
   LCM_DispClr();			// 清屏
        
   LCM_Wr1Command(LCM_ADDRSTRY+0);	// 設置頁(行)地址
   LCM_Wr1Command(LCM_ADDRSTRX+0);	// 設置列地址,即列
   LCM_Wr2Command(LCM_ADDRSTRY+0);
   LCM_Wr2Command(LCM_ADDRSTRX+0);
}


/***********************************************************************
* 名稱:LCM_WriteByte()
* 功能:向指定點寫數據(一字節)。
* 入口參數:x 		x坐標值(0-127)
*	   y       	y坐標值(0-63)
*          wrdata	所要寫的數據
* 出口參數:無
* 說明:會更新disp_buf相應存儲單元
***********************************************************************/
void  LCM_WriteByte(uint8 x, uint8 y, uint8 wrdata) 
{  x = x&0x7f;				// 參數過濾
   y = y&0x3f;
   
   y = y>>3;
   disp_buf[y][x] = wrdata;
   if(x<64)				// 選擇液晶控制芯片(即CS1--控制前64個點,CS2--控制后64個點)
   {  LCM_Wr1Command(LCM_ADDRSTRX+x);	// 設置當前列地址,即x坐標
      LCM_Wr1Command(LCM_ADDRSTRY+y);	// 設置當前頁地址,即y坐標
      for(x=0; x<5; x++);		// 短延時
      LCM_Wr1Data(wrdata);
   }
   else
   {  x = x-64;				// 調整x變量值
      LCM_Wr2Command(LCM_ADDRSTRX+x);	
      LCM_Wr2Command(LCM_ADDRSTRY+y);	
      for(x=0; x<5; x++);
      LCM_Wr2Data(wrdata);
   }
}


/***********************************************************************
* 名稱:LCM_DispFill()
* 功能:向顯示屏填充數據
* 入口參數:filldata  	要寫入LCM的填充數據
* 出口參數:無
* 說明:會更新disp_buf相應存儲單元
***********************************************************************/
void  LCM_DispFill(uint8 filldata)
{  uint8  x, y;
	
   LCM_Wr1Command(LCM_STARTROW);	// 設置顯示起始行為0
   LCM_Wr2Command(LCM_STARTROW);	

   for(y=0; y<8; y++)
   {  LCM_Wr1Command(LCM_ADDRSTRY+y);	// 設置頁(行)地址
      LCM_Wr1Command(LCM_ADDRSTRX);	// 設置列地址
      LCM_Wr2Command(LCM_ADDRSTRY+y);
      LCM_Wr2Command(LCM_ADDRSTRX);
   
      for(x=0; x<64; x++)
      {  LCM_Wr1Data(filldata);
         LCM_Wr2Data(filldata);
         disp_buf[y][x] = filldata;
         disp_buf[y][x+64] = filldata;
      }	
   }
}


/* ASCII碼對應的點陣數據表 */
uint8 code  ASCII_TAB20[80] = { 0x00, 0x00, 0x00, 0x00, 0x00,
			 	0x00, 0x00, 0x9e, 0x00, 0x00,
                         	0x00, 0x0e, 0x00, 0x0e, 0x00,
                         	0x28, 0xfe, 0x28, 0xfe, 0x28,
                         	0x48, 0x54, 0xfe, 0x54, 0x24,
                         	0x46, 0x26, 0x10, 0xc8, 0xc4,
                         	0x6c, 0x92, 0xaa, 0x44, 0xa0,
                         	0x00, 0x0a, 0x06, 0x00, 0x00,
			 	0x00, 0x38, 0x44, 0x82, 0x00,
			 	0x00, 0x82, 0x44, 0x38, 0x00,
			 	0x28, 0x10, 0x7c, 0x10, 0x28,
			 	0x10, 0x10, 0x7c, 0x10, 0x10,
			 	0x00, 0xa0, 0x60, 0x00, 0x00,
			 	0x10, 0x10, 0x10, 0x10, 0x10,
			 	0x00, 0xc0, 0xc0, 0x00, 0x00,
			 	0x40, 0x20, 0x10, 0x08, 0x04
		               };

uint8 code  ASCII_TAB30[80] = { 0x7C, 0xA2, 0x92, 0x8A, 0x7C,			
				0x00, 0x84, 0xFE, 0x80, 0x00,
				0x84, 0xC2, 0xA2, 0x92, 0x8C,			
				0x42, 0x82, 0x8A, 0x96, 0x62,			
				0x30, 0x28, 0x24, 0xFE, 0x20,		
				0x4E, 0x8A, 0x8A, 0x8A, 0x72,			
				0x78, 0x94, 0x92, 0x92, 0x60,			
				0x02, 0xE2, 0x12, 0x0A, 0x06,			
				0x6C, 0x92, 0x92, 0x92, 0x6C,			
 				0x0C, 0x92, 0x92, 0x52, 0x3C,			
				0x00, 0x6C, 0x6C, 0x00, 0x00,			
				0x00, 0xAC, 0x6C, 0x00, 0x00,			
				0x10, 0x28, 0x44, 0x82, 0x00,			
				0x28, 0x28, 0x28, 0x28, 0x28,			
				0x00, 0x82, 0x44, 0x28, 0x10,			
				0x04, 0x02, 0xA2, 0x12, 0x0C
		       	       };			

uint8 code  ASCII_TAB40[80] = { 0x64, 0x92, 0xF2, 0x82, 0x7C,			
				0xFC, 0x22, 0x22, 0x22, 0xFC,			
		 		0xFE, 0x92, 0x92, 0x92, 0x6C,			
				0x7C, 0x82, 0x82, 0x82, 0x44,			
				0xFE, 0x82, 0x82, 0x44, 0x38,		
				0xFE, 0x92, 0x92, 0x92, 0x82,		
				0xFE, 0x12, 0x12, 0x12, 0x02,			
				0x7C, 0x82, 0x92, 0x92, 0xF4,			
				0xFE, 0x10, 0x10, 0x10, 0xFE,		
				0x00, 0x82, 0xFE, 0x82, 0x00,		
				0x40, 0x80, 0x82, 0x7E, 0x02,			
				0xFE, 0x10, 0x28, 0x44, 0x82,			
				0xFE, 0x80, 0x80, 0x80, 0x80,		
				0xFE, 0x04, 0x18, 0x04, 0xFE,			
				0xFE, 0x08, 0x10, 0x20, 0xFE,			
				0x7C, 0x82, 0x82, 0x82, 0x7C
		       	       };

uint8 code  ASCII_TAB50[80] = { 0xFE, 0x12, 0x12, 0x12, 0x0C,
				0x7C, 0x82, 0xA2, 0x42, 0xBC,
				0xFE, 0x12, 0x32, 0x52, 0x8C,			
				0x8C, 0x92, 0x92, 0x92, 0x62,			
				0x02, 0x02, 0xFE, 0x02, 0x02,	
				0x7E, 0x80, 0x80, 0x80, 0x7E,
				0x3E, 0x40, 0x80, 0x40, 0x3E,
				0x7E, 0x80, 0x70, 0x80, 0x7E,
				0xC6, 0x28, 0x10, 0x28, 0xC6,
				0x0E, 0x10, 0xE0, 0x10, 0x0E,
				0xC2, 0xA2, 0x92, 0x8A, 0x86,
				0x00, 0xFE, 0x82, 0x82, 0x00,
				0x04, 0x08, 0x10, 0x20, 0x40,
				0x00, 0x82, 0x82, 0xFE, 0x00,
				0x08, 0x04, 0x02, 0x04, 0x08,
				0x80, 0x80, 0x80, 0x80, 0x80
		      	       };

uint8 code  ASCII_TAB60[80] = { 0x00, 0x02, 0x04, 0x08, 0x00,
				0x40, 0xA8, 0xA8, 0xA8, 0xF0,
				0xFE, 0x90, 0x88, 0x88, 0x70,
				0x70, 0x88, 0x88, 0x88, 0x40,
				0x70, 0x88, 0x88, 0x90, 0xFE,
				0x70, 0xA8, 0xA8, 0xA8, 0x30,
				0x10, 0xFC, 0x12, 0x02, 0x04,
				0x18, 0xA4, 0xA4, 0xA4, 0x7C,
				0xFE, 0x10, 0x08, 0x08, 0xF0,
				0x00, 0x88, 0xFA, 0x80, 0x00,
				0x40, 0x80, 0x88, 0x7A, 0x00,
				0xFE, 0x20, 0x50, 0x88, 0x00,
				0x00, 0x82, 0xFE, 0x80, 0x00,
				0xF8, 0x08, 0x30, 0x08, 0xF8,
				0xF8, 0x10, 0x08, 0x08, 0xF0,
				0x70, 0x88, 0x88, 0x88, 0x70
		               };

uint8 code  ASCII_TAB70[80] = { 0xF8, 0x28, 0x28, 0x28, 0x10,
				0x10, 0x28, 0x28, 0x30, 0xF8,
				0xF8, 0x10, 0x08, 0x08, 0x10,
				0x90, 0xA8, 0xA8, 0xA8, 0x40,
				0x08, 0x7E, 0x88, 0x80, 0x40,
				0x78, 0x80, 0x80, 0x40, 0xF8,
				0x38, 0x40, 0x80, 0x40, 0x38,
				0x78, 0x80, 0x60, 0x80, 0x78,
				0x88, 0x50, 0x20, 0x50, 0x88,
				0x18, 0xA0, 0xA0, 0xA0, 0x78,
				0x88, 0xC8, 0xA8, 0x98, 0x88,
				0x00, 0x10, 0x6C, 0x82, 0x00,
				0x00, 0x00, 0xFE, 0x00, 0x00,
				0x00, 0x82, 0x6C, 0x10, 0x00,
				0x10, 0x10, 0x54, 0x38, 0x10,
				0x10, 0x38, 0x54, 0x10, 0x10
		       	       };
		       	       
/***********************************************************************
* 名稱:LCM_DispChar()
* 功能:指定地址顯示字符。
* 入口參數:disp_cy		顯示行值(0-7)	
*	   disp_cx		顯示列值(0-15)
*	   dispdata		所要顯示的字符(ASCII碼)
* 注:支持顯示字符0-9、A-Z、a-z及空格,字符顯示格式為5*7,模為8*8,所以
*     屏幕顯示為8*16(共8行,每行16個字符)。
***********************************************************************/
void LCM_DispChar(uint8 disp_cy, uint8 disp_cx, char dispdata) 
{  uint8  code  *pchardata;
   uint8  i;

   disp_cy = disp_cy&0x07;		// 參數過濾
   disp_cx = disp_cx&0x0f;
   
   /* 先要找出顯示數據的類型,并設置相應的點陣數據表,然后設置指針,以取得對應的點陣數據。 */      			
   switch(dispdata&0xf0)
   {  case 0x20:
  	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB20[dispdata];
           break;

      case 0x30:
  	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB30[dispdata];
           break;

      case 0x40:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB40[dispdata];
           break;

      case 0x50:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB50[dispdata];
           break;

      case 0x60:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB60[dispdata];
           break;

      case 0x70:
	   dispdata = (dispdata&0x0f)*5;
           pchardata = &ASCII_TAB70[dispdata];
           break;
	    
      default:
	   pchardata = &ASCII_TAB20[0];
	   break;
   } // end of switch(dispdata&0xf0)...
   
   
   if( (disp_cx&0x08) == 0 )				// 選擇液晶控制芯片(即CS1--控制前8個字符,CS2--控制后8個字符)
   {  i = disp_cx<<3;
      LCM_Wr1Command(LCM_ADDRSTRX+i);			// 設置當前列地址,即列
      LCM_Wr1Command(LCM_ADDRSTRY+disp_cy);		// 設置當前頁地址,即行
      
      for(i=0; i<5; i++);
      LCM_Wr1Data(0x00);				// 顯示一列空格
      for(i=0; i<5; i++)
      {  LCM_Wr1Data(*pchardata);			// 發送數據									*/
         pchardata++;
      }
      LCM_Wr1Data(0x00);	
      for(i=0; i<5; i++);
      LCM_Wr1Data(0x00);	
   }
   else
   {  i = (disp_cx&0x07)<<3;				// 若Y>7,則選取用CS2并且地址值要先減去8,再乘以8
      LCM_Wr2Command(LCM_ADDRSTRX+i);
      LCM_Wr2Command(LCM_ADDRSTRY+disp_cy);		// 設置當前頁地址,即行
      
      for(i=0; i<5; i++);
      LCM_Wr2Data(0x00);				// 顯示一列空格
      for(i=0; i<5; i++)
      {  LCM_Wr2Data(*pchardata);			// 發送數據									*/
         pchardata++;
      }
      LCM_Wr2Data(0x00);	
      for(i=0; i<5; i++);
      LCM_Wr2Data(0x00);	
   }
}       	       		       	  


/***********************************************************************
* 名稱:LCM_DispStr()
* 功能:字符串顯示輸出。
* 入口參數:disp_cy 	顯示起始行(0-7)
*	   disp_cx      顯示起始列(0-15)
*	   disp_str	字串指針
* 出口參數:無
* 注:支持顯示字符0-9、A-Z、a-z及空格,字符顯示格式為5*7,模為8*8,所以屏幕顯示
*     為8*16(共8行,每行16個字符)。
***********************************************************************/
void  LCM_DispStr(uint8 disp_cy, uint8 disp_cx, char *disp_str) 
{  while( *disp_str != '\0')
   {  disp_cy = disp_cy&0x07;				// 參數過濾
      disp_cx = disp_cx&0x0f;	
      LCM_DispChar(disp_cy, disp_cx, *disp_str); 	// 顯示字符
   	
      disp_str++;					// 指向下一字符數據
      disp_cx++;
      if(disp_cx>15) disp_cy++;				// 指向下一顯示行
   }
}
   




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人手机在线| 九九精品一区二区| 1000精品久久久久久久久| 久久夜色精品国产欧美乱极品| 欧美日本不卡视频| 欧美视频一二三区| 欧美日韩一区二区三区在线| 91久久久免费一区二区| 色婷婷国产精品综合在线观看| 91麻豆国产香蕉久久精品| 成a人片亚洲日本久久| 成人免费黄色在线| av电影天堂一区二区在线观看| 成人午夜视频在线观看| 99精品久久久久久| 一本久久a久久精品亚洲| 在线观看不卡一区| 666欧美在线视频| 日韩欧美一区在线观看| 日韩欧美一区二区免费| 337p粉嫩大胆色噜噜噜噜亚洲 | 精品国产精品网麻豆系列| 日韩美一区二区三区| 久久亚洲综合av| 欧美国产日本韩| 亚洲乱码国产乱码精品精的特点| 一区二区三区中文字幕在线观看| 亚洲国产一区二区视频| 美美哒免费高清在线观看视频一区二区| 久久se这里有精品| 国产**成人网毛片九色 | 成人永久看片免费视频天堂| 99热99精品| 欧美精品视频www在线观看| 日韩一区二区在线观看视频| 久久久99精品免费观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 欧美视频三区在线播放| 欧美一卡二卡在线观看| 国产视频一区二区在线| 亚洲精品高清视频在线观看| 五月天一区二区三区| 激情欧美一区二区| 99精品视频在线免费观看| 欧美日韩国产三级| 久久久久久毛片| 一区二区三区四区乱视频| 男人操女人的视频在线观看欧美| 国产精品中文字幕一区二区三区| 91小视频免费观看| 日韩欧美视频在线| 中文字幕精品一区| 日韩精品免费专区| 成人国产精品免费观看| 欧美精品在线一区二区三区| 国产区在线观看成人精品| 亚洲大片免费看| 国产精品一级黄| 欧美日韩成人在线| 欧美国产日韩一二三区| 色呦呦日韩精品| 精品久久一区二区| 亚洲一区免费视频| 国产成人在线视频播放| 欧美精品久久久久久久多人混战 | 精品1区2区3区| 国产日韩欧美一区二区三区综合| 亚洲一区二区精品久久av| 国产精品一区二区免费不卡| 欧美美女直播网站| 最近中文字幕一区二区三区| 日本女人一区二区三区| 欧美综合欧美视频| 国产精品色一区二区三区| 蜜桃精品视频在线| 在线观看精品一区| 1000精品久久久久久久久| 国产美女主播视频一区| 91精品国产日韩91久久久久久| 亚洲欧美电影一区二区| 粉嫩在线一区二区三区视频| 26uuu欧美日本| 日本欧美久久久久免费播放网| 欧日韩精品视频| 亚洲色图欧洲色图婷婷| 风间由美一区二区三区在线观看| 日韩欧美中文一区| 日韩二区在线观看| 精品视频一区二区不卡| 亚洲精品久久7777| av成人免费在线观看| 欧美国产精品专区| 国产精品一区2区| 日韩欧美专区在线| 蜜乳av一区二区| 3d动漫精品啪啪1区2区免费| 亚洲国产日韩a在线播放性色| 色婷婷综合久久久中文一区二区| 自拍偷拍国产精品| av在线一区二区三区| 国产精品电影院| 成人不卡免费av| 国产欧美一区二区在线| 国产99久久久国产精品免费看| 国产日产欧美一区| 高清不卡在线观看av| 中文字幕国产一区| hitomi一区二区三区精品| 国产精品麻豆99久久久久久| 成人黄色电影在线| 国产精品传媒视频| 99精品桃花视频在线观看| 亚洲欧美一区二区久久 | 国产精品午夜春色av| 成人午夜视频在线观看| 亚洲欧洲av一区二区三区久久| av在线播放一区二区三区| 亚洲色图视频网| 欧美在线观看视频在线| 亚洲成人免费在线| 日韩欧美一区二区免费| 国产精品99久久久| 国产精品国产三级国产有无不卡| 色综合天天在线| 亚洲国产欧美日韩另类综合 | 欧美性欧美巨大黑白大战| 亚洲影视在线观看| 在线不卡中文字幕播放| 蜜臀久久久久久久| 亚洲精品在线电影| 成人永久aaa| 亚洲一区二区三区中文字幕在线| 欧美片在线播放| 国产一区91精品张津瑜| 中文字幕一区二区在线播放| 在线免费不卡视频| 蜜臀av亚洲一区中文字幕| 久久夜色精品国产噜噜av| 99久久综合狠狠综合久久| 亚洲第一电影网| 欧美精品一区二区三区高清aⅴ| 岛国精品一区二区| 亚洲一区二区三区在线播放 | 三级欧美在线一区| 欧美精品一区二区不卡| 99精品欧美一区| 日本三级亚洲精品| 中文字幕乱码久久午夜不卡| 欧美在线你懂得| 国产剧情一区二区| 夜夜精品浪潮av一区二区三区| 日韩欧美视频一区| 色综合久久久久综合体桃花网| 日韩精彩视频在线观看| 精品理论电影在线| 91黄色免费观看| 韩国三级中文字幕hd久久精品| 亚洲美腿欧美偷拍| 337p粉嫩大胆色噜噜噜噜亚洲| 在线观看日韩电影| 粉嫩一区二区三区在线看| 亚洲h动漫在线| 国产精品水嫩水嫩| 欧美福利视频导航| 菠萝蜜视频在线观看一区| 日韩av电影免费观看高清完整版在线观看 | 136国产福利精品导航| 国产精品996| 玉足女爽爽91| 久久人人爽爽爽人久久久| 欧美午夜宅男影院| 成人av电影免费在线播放| 日韩电影免费在线看| 亚洲乱码国产乱码精品精98午夜| 91片黄在线观看| 亚洲免费av在线| 精品久久久久久久一区二区蜜臀| 波多野结衣亚洲| 日本一区二区视频在线| 欧洲精品中文字幕| 久久激情五月婷婷| 亚洲欧美色一区| 日韩视频免费观看高清完整版在线观看| 国产精品一二三在| 亚洲成人av资源| 国产精品久久久久影院| 欧美精品123区| 播五月开心婷婷综合| 奇米亚洲午夜久久精品| 国产精品毛片大码女人| 欧美一区二区三区四区在线观看| 风间由美中文字幕在线看视频国产欧美 | 色综合中文字幕国产| 亚洲狠狠爱一区二区三区| 久久精品视频在线免费观看| 欧美日韩国产综合草草| aa级大片欧美| 国产精品综合久久| 日韩精品亚洲一区二区三区免费| 中文字幕一区二区三区精华液|