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

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

?? 12864.h

?? 單片機12864貪吃蛇程序
?? H
字號:

/*-----------------------------------------------------------*/
#define LCD_OFF 0x3E
#define LCD_ON  0x3F
#define Add_X 0xB8     //the start address of the page 0 ;(0~7)
#define Add_Y 0x40     //the start address of the Y counter ; (0~64)
#define Add_Z 0xC0     //the start address of the DDRAM ; (0~64)
/*-----------------------------------------------------------*/
#define  LCD12864_DATA_PORT  P1

sbit  LCD12864_EN         =P2^0;
sbit  LCD12864_RW         =P2^1;       //0:write ; 1:read 
sbit  LCD12864_RS         =P2^2;	      //0:the command .1:the data
sbit  LCD12864_CS_L       =P2^3;       //select the left of the lcd when 1
sbit  LCD12864_CS_R       =P2^4;  

/*--------------------------函數列表--------------------*/
//--------片選 0全選 1左 2右
void LCDSel(unsigned char sel);
//--------忙等待
void WaitLCD();
//--------寫數據
void WriteDatToLCD12864(unsigned char dat);
//--------寫命令
void WriteCmdToLCD12864(unsigned char cmd);
//--------讀數據
unsigned char ReadDatFromLCD12864(void);
//--------設置頁地址0-7
void SetX(unsigned char x);
//--------設置列地址0-127
void SetY(unsigned char y);
//--------設置首地址0-63
void SetZ(unsigned char z);
//--------清屏
void ClearLCD();
//--------x:0~63~127    y:0~63    flag :0:擦除某個點 1:顯示某個點 
void Dot(char x,char y,bit flag);
//--------(x1,y1) (x2,y2)作直線   flag :0:擦除線 1:顯示線
void Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag);
//--------(x1,y1) (x2,y2)作矩形框  flag :0:擦除框 1:顯示框
void Rect(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag);
//--------(x1,y1) (x2,y2)填充矩形  flag :0:擦除矩形 1:顯示矩形
void RectArea(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag);
//--------x:行0~7  y:列0~127  顯示n個漢字 flag:0 反白  16*16
void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag);
//--------x:行0~7  y:列0~127  asc:指向標準交換碼  string:指向要顯示的字符串  flag:0 反白顯示
void en_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code *asc,unsigned char *string,bit flag);
//--------(x,y)要顯示圖片的左上角的坐標  x 0~7 y 0~127
//--------l:要顯示圖片的長度
//--------w:要顯示圖片的寬度
//--------img:指向圖片的數據
void img_disp(unsigned char x,unsigned char y,unsigned char l,unsigned char w,unsigned char code *img);
//--------顯示128*64圖片
void img12864_disp(unsigned char code *img);

/*--------------------------select the LCD--------------------*/
void LCDSel(unsigned char sel)
{
    switch(sel)
	{
	   case 0: LCD12864_CS_L=0;LCD12864_CS_R=0;break;	  
	   case 1: LCD12864_CS_L=1;LCD12864_CS_R=0;break;       //left 
	   case 2: LCD12864_CS_L=0;LCD12864_CS_R=1;break;		//right
	   default:;
	};
}
/*------------------------------------------------------------*/
void WaitLCD()
{
   unsigned char flag;
      LCD12864_DATA_PORT=0xFF;
      LCD12864_RW=1;
      LCD12864_RS=0;
      LCD12864_EN=1;
      LCD12864_EN=1;
         LCD12864_EN=0;
      LCD12864_DATA_PORT=0xFF;
      LCD12864_RW=1;
      LCD12864_RS=0;

      LCD12864_EN=1;

	do
   {
      flag=LCD12864_DATA_PORT;
   }while(!((flag&0x80)==0x80));
   LCD12864_EN=0;
}				
/*-------------------------------------------------------------*/
void WriteDatToLCD12864(unsigned char dat)
{
   WaitLCD();
   LCD12864_RS=1;
   LCD12864_RW=0;
   LCD12864_DATA_PORT=dat;
   LCD12864_EN=1;
   ;
   LCD12864_EN=0;
}
/*-------------------------------------------------------------*/
void WriteCmdToLCD12864(unsigned char cmd)
{
   WaitLCD();
   LCD12864_RS=0;
   LCD12864_RW=0;
   LCD12864_DATA_PORT=cmd;
   LCD12864_EN=1;
   ;
   LCD12864_EN=0;
}
/*-------------------------------------------------------------*/
unsigned char ReadDatFromLCD12864(void)
{
   unsigned char dat;
   WaitLCD();
   LCD12864_DATA_PORT=0xFF;			  
   LCD12864_RS=1;
   LCD12864_RW=1;
   LCD12864_EN=1;
	LCD12864_EN=1;
	LCD12864_EN=0;
	LCD12864_DATA_PORT=0xFF;
	LCD12864_RS=1;
   LCD12864_RW=1;
   LCD12864_EN=1;
	LCD12864_EN=1;
   dat=LCD12864_DATA_PORT;
   LCD12864_EN=0;
   return dat;
}	
/*--------------------------------------------------------------*/
//x:0~7
void SetX(unsigned char x)
{
    WriteCmdToLCD12864(Add_X+x);
}
/*------------------------------------------------------------*/
//y:0~127
void SetY(unsigned char y)
{
    WriteCmdToLCD12864(Add_Y+y);
}
/*------------------------------------------------------------*/
//z:0~63
void SetZ(unsigned char z)
{
    WriteCmdToLCD12864(Add_Z+z);
}
/*------------------------------------------------------------*/
void LCD12864_init(void)
{
	LCDSel(0);       //left and right
	WriteCmdToLCD12864(0x3E);
	WriteCmdToLCD12864(0X3F);
}
/*------------------------------------------------------------*/
void ClearLCD()
{
    int i,j;
    LCDSel(0);
	for(j=0;j<8;j++)
	{
	   WriteCmdToLCD12864(LCD_ON);
       SetX(j);  
       WriteCmdToLCD12864(Add_Y);
	   SetZ(0);
	   for (i=0;i<64;i++)
	   {
	      WriteDatToLCD12864(0x00);
	   }
	}	
}
/*------------------------------------------------------------*/
//左上角第一個點為原點,向下Y為軸,向右為X軸
//x:0~63~127    y:0~63
//flag :  0:擦除某個點
//        1:顯示某個點 
unsigned char code Tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Dot(char x,char y,bit flag)
{
    unsigned char dat;
//	y=63-y;	                              //坐標軸的移動和反轉
    if(x<64)
	{
	    LCDSel(1);
		SetX(y/8);   //set the page address
		SetY(x);         //set the Y adress
		dat=ReadDatFromLCD12864();
		if(flag)
		  dat=dat|(Tab[y%8]);
		else
		  dat=dat&(~(Tab[y%8]));
        SetX(y/8);
		SetY(x);         //set the Y adress
		WriteDatToLCD12864(dat);
	}
	else if(x<128)
	{
	    LCDSel(2);
		SetX(y/8);
		SetY(x-64);

		dat=ReadDatFromLCD12864();

		if(flag)
		  dat=dat|(Tab[y%8]);
		else
		  dat=dat&(~(Tab[y%8]));

		SetY(x-64);
		WriteDatToLCD12864(dat);
	}     
}
/*------------------------------------------------------------*/
//draw a line between point(x1,y1) and point(x2,y2)
//flag   0:erase the line    1:draw a line
void Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag)
{
   unsigned char i;
	unsigned char temp;
	float k;
	if(x1==x2)
	{
	   if(y1>y2)
	   {   temp=x1;x1=x2;x2=temp;
    	   temp=y1;y1=y2;y2=temp;
		}
	   for(i=y1;i<=y2;i++)
	   {
	       Dot(x1,i,flag);
	   }
	}else
	{
    	if(x1>x2)
    	{
    	   temp=x1;x1=x2;x2=temp;
    	   temp=y1;y1=y2;y2=temp;
     	 }

         k=(float)(y2-y1)/(float)(x2-x1);

         for(i=0;i<x2-x1;i++)
        {
           Dot(x1+i,(unsigned char)(y1+k*i),flag);
         }
	}
}	   
/*-------------------------------------------------------------*/
void Rect(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag)
{
   Line(x1,y1,x2,y1,flag);
	Line(x2,y1,x2,y2,flag);
	Line(x2,y2,x1,y2,flag);
	Line(x1,y2,x1,y1,flag);
} 
/*-------------------------------------------------------------*/
void RectArea(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag)
{
   unsigned char temp;
	unsigned char i;
    if(x1>x2)
	{
	    temp=x1;x1=x2;x2=temp; 
		temp=y1;y1=y2;y2=temp;
     }

	 for(i=0;i<=x2-x1;i++)
	 {
	    Line(x1+i,y1,x1+i,y2,flag);
	 }

}			  
/*-------------------------------------------------------------*/
//16*16
//x行  0~7      y列 0~127
//flag 0:漢字反白顯示
void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag)
{
    unsigned char i,j;
	for (j=0;j<n;j++)
	{
	    //顯示上半個漢字
	    for(i=0;i<16;i++)
		{
		    //點的位置是在左還是右
			if(y+16*j+i<64)
			{
			    LCDSel(1);
				WriteCmdToLCD12864(LCD_ON);
				SetX(x);
				SetZ(0);
				SetY(y+16*j+i);
				if(flag)
				    WriteDatToLCD12864(hz[32*j+i]);
			    else
				    WriteDatToLCD12864(~hz[32*j+i]);
			}
			else if(y+16*j+i<128)
			{
			    LCDSel(2);
				WriteCmdToLCD12864(LCD_ON);
				SetX(x);
				SetZ(0);
				SetY(y+16*j+i-64);
				if(flag)
				    WriteDatToLCD12864(hz[32*j+i]);
			    else
				    WriteDatToLCD12864(~hz[32*j+i]);
			}
		}
		//顯示下半個漢字
		for(i=16;i<32;i++)
		{
		    //先判斷點是在左還是在右
			if(y+16*j+i-16<64)
			{	if(x+1<8)	       //最后一行顯示上半個字
			    {
			        LCDSel(1);
			    	WriteCmdToLCD12864(LCD_ON);
				    SetX(x+1);
				    SetZ(0);
				    SetY(y+16*j+i-16);
				    if(flag)
				        WriteDatToLCD12864(hz[32*j+i]);
			        else
				        WriteDatToLCD12864(~hz[32*j+i]);
				}
			}else if(y+16*j+i-16<127)
			{
			    if(x+1<8) 	      //最后一行
				{
			        LCDSel(2);
				    WriteCmdToLCD12864(LCD_ON);
				    SetX(x+1);
				    SetZ(0);
				    SetY(y+16*j+i-16-64);
				if(flag)
				    WriteDatToLCD12864(hz[32*j+i]);
			    else
				    WriteDatToLCD12864(~hz[32*j+i]);
				}
			}
		}
	}
}
/*-------------------------------------------------------------*/
//x:行0~7
//y:列0~127
//asc: 指向標準交換碼
//string: 指向要顯示的字符串
//flag:  0 反白顯示
void en_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code *asc,unsigned char *string,bit flag)
{
    unsigned char i,j,loc;
	for (j=0;j<n;j++)
	{
	    loc=string[j]-0x20;	    //確定要顯示的字符在asc表中的位置(乘上16)
	    //顯示上半個字母
	    for(i=0;i<8;i++)
		{
		    //點的位置是在左還是右
			if(y+8*j+i<64)
			{
			    LCDSel(1);
				WriteCmdToLCD12864(LCD_ON);
				SetX(x);
				SetZ(0);
				SetY(y+8*j+i);
				if(flag)
				    WriteDatToLCD12864(asc[16*loc+i]);
			    else
				    WriteDatToLCD12864(~asc[16*loc+i]);
			}
			else if(y+8*j+i<128)
			{
			    LCDSel(2);
				WriteCmdToLCD12864(LCD_ON);
				SetX(x);
				SetZ(0);
				SetY(y+8*j+i-64);
				if(flag)
				    WriteDatToLCD12864(asc[16*loc+i]);
			    else
				    WriteDatToLCD12864(~asc[16*loc+i]);
			}
		}
		//顯示下半個字母
		for(i=8;i<16;i++)
		{
		    //先判斷點是在左還是在右
			if(y+8*j+i-8<64)
			{  
			    if(x+1<8)	//最后一行
				{
			       LCDSel(1);
				   WriteCmdToLCD12864(LCD_ON);
				   SetX(x+1);
				   SetZ(0);
				   SetY(y+8*j+i-8);
				   if(flag)
				      WriteDatToLCD12864(asc[16*loc+i]);
			       else
				      WriteDatToLCD12864(~asc[16*loc+i]);
				}
			}else if(y+8*j+i-8<128)
			{
			    if(x+1<8) 	      //最后一行
				{
			        LCDSel(2);
				    WriteCmdToLCD12864(LCD_ON);
				    SetX(x+1);
				    SetZ(0);
				    SetY(y+8*j+i-8-64);
				if(flag)
				    WriteDatToLCD12864(asc[16*loc+i]);
			    else
				    WriteDatToLCD12864(~asc[16*loc+i]);
				}
			}
		}
	}  
}
/*-------------------------------------------------------------*/
//(x,y)要顯示圖片的左上角的坐標
//x  0~7   y  0~127
//l:要顯示圖片的長度
//w:要顯示圖片的寬度
//img:指向圖片的數據
//執行有點慢
void img_disp(unsigned char x,unsigned char y,unsigned char l,unsigned char w,unsigned char code *img)
{
    unsigned char i,j;
	for(j=0;j<w/8;j++)
	{
	    if(j+x<8)       //保證不越下面的界限 
	    {
	   	    for(i=0;i<l;i++)
	    	{	
		       //先判斷點的位置是在右半屏還是左半屏
		        if(y+i<64)
		    	{
			        LCDSel(1);
			        WriteCmdToLCD12864(LCD_ON);
			        SetX(x+j);
			        SetZ(0);
			        SetY(y+i);
		            WriteDatToLCD12864(img[j*l+i]);
		    	 }
			    else if(y+i<127)
		        {
			        LCDSel(2);
			        WriteCmdToLCD12864(LCD_ON);
			        SetX(x+j);
			        SetZ(0);
			        SetY(y+i-64);
			        WriteDatToLCD12864(img[j*l+i]);
			     }
			}
		}
	}
}
/*-------------------------------------------------------------*/
//顯示128*64圖片
//執行效率高
void img12864_disp(unsigned char code *img)
{
    unsigned char i,j;
	for(j=0;j<8;j++)
	{
	    LCDSel(1);
		WriteCmdToLCD12864(LCD_ON);
		SetX(j);
		SetZ(0);
		SetY(0);
		for(i=0;i<64;i++)
		   WriteDatToLCD12864(img[j*128+i]);
		LCDSel(2);
		WriteCmdToLCD12864(LCD_ON);
		SetX(j);
		SetZ(0);
		SetY(0);
		for(i=64;i<128;i++)
		   WriteDatToLCD12864(img[j*128+i]);
	}
}	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本韩国欧美国产| 国产精品亚洲午夜一区二区三区| 色88888久久久久久影院按摩| 中文字幕一区二区三区蜜月| 91色.com| 午夜欧美电影在线观看| 欧美成人综合网站| 国产乱人伦偷精品视频不卡| 国产人成亚洲第一网站在线播放| www.亚洲精品| 亚洲免费色视频| 制服丝袜中文字幕亚洲| 国内精品视频666| 亚洲国产精品ⅴa在线观看| 色综合一区二区三区| 亚洲国产综合色| 精品福利av导航| 色综合久久久久综合| 日韩高清一区在线| 欧美高清在线精品一区| 欧美中文字幕一区| 久草热8精品视频在线观看| 国产欧美综合在线观看第十页| 91免费视频网| 伦理电影国产精品| 亚洲同性同志一二三专区| 91麻豆精品国产91久久久久久久久 | 亚洲欧美在线高清| 欧美久久久久久久久久| 国产成人免费视频网站高清观看视频| 亚洲欧洲日韩综合一区二区| 欧美久久久久久久久久| 99久久精品免费精品国产| 天堂va蜜桃一区二区三区| 国产日韩欧美精品综合| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美在线不卡一区| 国产精品456露脸| 亚洲v日本v欧美v久久精品| 国产无一区二区| 在线成人免费观看| gogo大胆日本视频一区| 九九**精品视频免费播放| 亚洲美女精品一区| 欧美国产精品劲爆| 日韩美女在线视频 | 欧美放荡的少妇| 99视频超级精品| 国产精品亚洲一区二区三区在线| 亚洲国产一区二区在线播放| 综合久久久久久| 久久精品免费在线观看| 日韩免费性生活视频播放| 欧美少妇一区二区| 91尤物视频在线观看| 国产精品一区在线| 蜜桃av一区二区在线观看| 亚洲成人av一区二区| 洋洋成人永久网站入口| 中文字幕免费一区| 国产日韩欧美在线一区| xfplay精品久久| 精品国产乱码久久久久久影片| 制服丝袜av成人在线看| 欧美日韩免费视频| 欧美中文字幕不卡| 欧美自拍偷拍一区| 日本丶国产丶欧美色综合| 91丨国产丨九色丨pron| 99热精品国产| 91视频免费播放| 91网站在线观看视频| 97se亚洲国产综合自在线不卡| av亚洲精华国产精华精| 成人国产亚洲欧美成人综合网| 国产成人av在线影院| 国产成人亚洲精品青草天美| 国产乱对白刺激视频不卡| 国产精品自在在线| 成人午夜激情片| 91在线精品秘密一区二区| 91美女在线视频| 在线国产亚洲欧美| 欧美三片在线视频观看| 欧美日韩视频专区在线播放| 欧美日韩成人一区| 7777精品伊人久久久大香线蕉完整版 | 欧美日免费三级在线| 欧美日韩久久一区| 欧美一级久久久久久久大片| 精品美女在线播放| 国产日产欧美一区二区视频| 综合自拍亚洲综合图不卡区| 亚洲综合免费观看高清完整版在线| 亚洲黄色在线视频| 午夜伦欧美伦电影理论片| 精品夜夜嗨av一区二区三区| 国产经典欧美精品| 色偷偷88欧美精品久久久| 欧美日韩综合色| 精品国产一二三区| 国产精品久久久久7777按摩| 亚洲综合另类小说| 美女视频免费一区| 成人午夜精品在线| 欧美亚洲精品一区| 日韩精品专区在线影院观看 | 成人精品视频一区| 欧美制服丝袜第一页| 日韩免费性生活视频播放| 国产喷白浆一区二区三区| 亚洲午夜在线电影| 国内精品久久久久影院色| bt7086福利一区国产| 欧美一区二区三区不卡| 中文字幕欧美激情| 调教+趴+乳夹+国产+精品| 国产91丝袜在线播放0| 欧美性高清videossexo| 久久久久久久久久美女| 亚洲国产成人精品视频| 国产酒店精品激情| 欧美日韩日日骚| 国产精品另类一区| 美女一区二区在线观看| 99久久国产免费看| 精品日韩一区二区三区| 亚洲一区二区在线观看视频| 国产成人自拍高清视频在线免费播放| 色94色欧美sute亚洲13| 国产欧美日韩卡一| 日本中文字幕一区二区视频 | 久久婷婷久久一区二区三区| 亚洲精品乱码久久久久久久久| 精品一区二区三区欧美| 在线观看日韩毛片| 欧美国产日韩精品免费观看| 麻豆久久久久久久| 欧美午夜精品一区| 中文字幕亚洲视频| 国产一区二区三区黄视频| 56国语精品自产拍在线观看| 樱桃视频在线观看一区| 成人精品鲁一区一区二区| 欧美不卡在线视频| 日韩电影网1区2区| 欧美人狂配大交3d怪物一区| 日韩理论片一区二区| 国产99久久久国产精品| 精品国产乱子伦一区| 日本最新不卡在线| 在线不卡的av| 亚洲成av人影院| 欧美视频第二页| 亚洲自拍偷拍麻豆| 一本久久精品一区二区| 国产精品不卡在线观看| 国产不卡在线一区| 国产欧美日韩三区| 福利电影一区二区| 国产精品美女www爽爽爽| 国产高清在线观看免费不卡| 精品999在线播放| 久久91精品久久久久久秒播| 日韩三级视频在线看| 免费成人在线网站| 精品国产人成亚洲区| 久久黄色级2电影| 欧美tickling网站挠脚心| 免费成人在线视频观看| 精品蜜桃在线看| 国产精品一二三四| 国产精品毛片高清在线完整版| 成人精品视频网站| 亚洲精品视频一区二区| 日本精品视频一区二区三区| 亚洲一区欧美一区| 91麻豆精品国产91久久久久久久久 | eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩影院精彩在线| 日韩美女视频在线| 国产精品一区二区三区四区| 国产欧美日韩三级| 色域天天综合网| 婷婷国产在线综合| 久久亚洲一区二区三区四区| 国产黄人亚洲片| 亚洲日本在线看| 欧美日韩国产美女| 久久精品噜噜噜成人av农村| 26uuu精品一区二区| a4yy欧美一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 欧美日韩一级大片网址| 极品少妇一区二区三区精品视频 | 国产综合成人久久大片91| 国产日韩欧美不卡在线| 色综合久久99| 麻豆视频一区二区| 国产精品美女一区二区在线观看|