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

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

?? tftlcd.c

?? 基于stm32的MP3播放器
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "COMM.H"	 
#include "font.h"      
//液晶顯示 淘寶超值27元的液晶
//加入了GRAM 讀寫的函數,可以讀取指定GRAM的內容了				 	    
//正點原子@SCUT
//2008/12/15 
//V1.2
//修改了數字顯示函數TFT_ShowNum,可以支持自動識別數字范圍.
//擴充顯示范圍到u32類型
    
//-----------------TFT端口定義---------------- 
#define	TFT_RS	(1<<0)  //數據/命令選擇端口	PB0
#define	TFT_WR	(1<<1)  //數據端口			PB1
#define	TFT_CS	(1<<2)  //片選端口  	    PB2
#define	TFT_LED (1<<2)  //TFT背光    		PA2
#define	TFT_RST	(1<<3)  //硬復位			PA3
#define	TFT_RD	(1<<4)  //時鐘端口			PA4
														    
#define TFT_RS_SET(x)   GPIOB->ODR=(GPIOB->ODR&~TFT_RS)|(x ? TFT_RS:0)
#define TFT_WR_SET(x)   GPIOB->ODR=(GPIOB->ODR&~TFT_WR)|(x ? TFT_WR:0)
#define TFT_CS_SET(x)   GPIOB->ODR=(GPIOB->ODR&~TFT_CS)|(x ? TFT_CS:0)
													    
#define TFT_LED_SET(x)  GPIOA->ODR=(GPIOA->ODR&~TFT_LED) |(x ? TFT_LED:0) 
#define TFT_RST_SET(x)  GPIOA->ODR=(GPIOA->ODR&~TFT_RST)|(x ? TFT_RST:0)	
#define TFT_RD_SET(x)   GPIOA->ODR=(GPIOA->ODR&~TFT_RD) |(x ? TFT_RD:0)		  
 
//PC0~7,作為數據線
#define DATAOUT(x) GPIOC->ODR=(GPIOC->ODR&0xffffff00)|(x&0xff);//數據輸出	
#define DATAIN     GPIOC->IDR&0xff;//數據輸入    
//畫筆顏色
u16  POINT_COLOR=RED;//默認紅色    
u16  BACK_COLOR=WHITE;//背景顏色.默認為白色
/*------------------------液晶說明------------------------------
液晶型號位置
大小:320*240
像素:65K色
VCC   3.3V
VCCIO 2.7~3.3V
數據線操作電壓:3.3V
顏色排列:以一個十六位的數存放一個點的顏色 RGB:565 即:最高五位為紅色
灰階.中間六位為綠色灰階.最低五位為藍色灰階.
例如:0XF800 純紅色 
     0X07E0 純綠色
     0X001F 純藍色
----------------------------------------------------------------*/
		 
//寫8位數據函數
//用宏定義,提高速度.
#define TFT_WR_DATA(data){\
TFT_RS_SET(1);\
TFT_CS_SET(0);\
DATAOUT(data);\
TFT_WR_SET(0);\
TFT_WR_SET(1);\
TFT_CS_SET(1);\
TFT_RS_SET(0);\
} 	 			    

//寫寄存器函數
void TFT_WR_REG(u8 data)
{ 
	TFT_RS_SET(0);//寫地址  
 	TFT_CS_SET(0); 
	DATAOUT(data); 
	TFT_WR_SET(0); 
	TFT_WR_SET(1); 
	TFT_CS_SET(1); 
	TFT_RS_SET(1);
}  
//寫寄存器數據函數   
//dbw:數據位數,1為16位,0為8位。
//index:寄存器編號
//val:值
//輸入:dbw 數據位數,1為16位,0為8位。
void TFT_WR_CMD(u8 dbw,u8 index,u16 val)
{
	TFT_WR_REG(index);  
	if(dbw)TFT_WR_DATA(val>>8);	  
	TFT_WR_DATA(val&0xff);
}  		 
//寫16位數據函數
void TFT_WR_Data16(u16 val)
{  
	TFT_WR_DATA(val>>8);  
    TFT_WR_DATA(val&0xff);
} 
//畫點
//x:0~239
//y:0~319
//POINT_COLOR:此點的顏色
void TFT_DrawPoint(u8 x,u16 y)
{
	TFT_WR_CMD(0,0x2,x);//設置到原點
	TFT_WR_CMD(1,0x3,y);						  
	//TFT_WR_CMD(0,0x04,0xEF);  //結束列數(0~239)	
	//TFT_WR_CMD(1,0x05,0x013F);//結束行數(0~319) 
	TFT_WR_REG(0x0E);
	TFT_WR_Data16(POINT_COLOR); 
}  
u16 Screen_Data[756];
//讀取指定點的GRAM
unsigned int TFT_RD_GRAM(u8 x,u16 y) 
{
	u16 t;
	TFT_WR_CMD(0,0x2,x);//設置到原點
	TFT_WR_CMD(1,0x3,y);  
	TFT_WR_REG(0x0F);
	GPIOC->CRL=0X88888888; //PC0-7 上拉輸入
	GPIOC->ODR|=0X00FF;    //全部輸出高

	TFT_RS_SET(1);
	TFT_CS_SET(0); 

	TFT_RD_SET(0);					   
	TFT_RD_SET(1);
	//丟棄第一個不確定的數	 
	TFT_RD_SET(0);	  
	TFT_RD_SET(1);
	t=DATAIN;
	t<<=8;
	TFT_RD_SET(0);	   
	TFT_RD_SET(1);
	t+=DATAIN;	 
	TFT_CS_SET(1);
	TFT_RS_SET(0);
	GPIOC->CRL=0X33333333; //PC0-7 輸出
	GPIOC->ODR|=0X00FF;    //全部輸出高
	return t;
}
//從指定地址開始讀取 42*18大小的方塊 
void READ_GRAM(u8 x,u16 y)
{
	u8 t,i;
	u16 temp;
	for(t=0;t<18;t++)
	{
		for(i=0;i<42;i++)
		{
			temp=(u16)t*42+i;
			Screen_Data[temp]=TFT_RD_GRAM(x+i,y+t);
		}
	}
}
//恢復指定地址的數據
void RECOVER_GRAM(u8 x,u16 y)
{
	u8 t,i;
	u16 temp;   			   
	for(t=0;t<18;t++)
	{
		for(i=0;i<42;i++)
		{
			temp=(u16)t*42+i;
			POINT_COLOR=Screen_Data[temp];
			TFT_DrawPoint(x+i,y+t);
		}
	}						   
}

//清屏函數   
//全屏顯示單色
void TFT_CLEAR(u16 color)
{                    
    u32 n;
	TFT_WR_CMD(0,0x2,0);//設置到原點
	TFT_WR_CMD(1,0x3,0);    
	 
	TFT_WR_CMD(0,0x04,239);	//結束列數(0~239)	
	TFT_WR_CMD(1,0x05,319);//結束行數(0~319)    			 
	TFT_WR_REG(0x0E);	   
	for(n=0;n<76800;n++)TFT_WR_Data16(color);//顯示白色 
	SD_Init();//初始化SD卡,在意外拔出之后可以正常使用
} 
//在指定區域內填充指定顏色
//區域大小:
//  (xend-xsta)*(yend-ysta)
void TFT_Fill(u8 xsta,u16 ysta,u8 xend,u16 yend,u16 color)
{                    
    u32 n;
	TFT_WR_CMD(0,0x2,xsta);//設置到原點
	TFT_WR_CMD(1,0x3,ysta);    
	 
	TFT_WR_CMD(0,0x04,xend);//結束列數(0~239)	
	TFT_WR_CMD(1,0x05,yend);//結束行數(0~319)   
	
	TFT_WR_REG(0x0E);
	n=(u32)(yend-ysta+1)*(xend-xsta+1);    
	while(n--)TFT_WR_Data16(color);//顯示所填充的顏色. 
	//恢復初始狀態
	TFT_WR_CMD(0,0x2,0);//設置到原點
	TFT_WR_CMD(1,0x3,0);
	TFT_WR_CMD(0,0x04,239);//結束列數(0~239)	
	TFT_WR_CMD(1,0x05,319);//結束行數(0~319) 
}   
 
 
//畫線
//x1,y1:起點坐標
//x2,y2:終點坐標  
void TFT_DrawLine(u8 x1, u16 y1, u8 x2, u16 y2)
{
    u16 x, y, t;
	if((x1==x2)&&(y1==y2))TFT_DrawPoint(x1, y1);
	else if(abs(y2-y1)>abs(x2-x1))//斜率大于1 
	{
		if(y1>y2) 
		{
			t=y1;
			y1=y2;
			y2=t; 
			t=x1;
			x1=x2;
			x2=t; 
		}
		for(y=y1;y<y2;y++)//以y軸為基準 
		{
			x=(u32)(y-y1)*(x2-x1)/(y2-y1)+x1;
			TFT_DrawPoint(x, y);  
		}
	}
	else     //斜率小于等于1 
	{
		if(x1>x2)
		{
			t=y1;
			y1=y2;
			y2=t;
			t=x1;
			x1=x2;
			x2=t;
		}   
		for(x=x1;x<=x2;x++)//以x軸為基準 
		{
			y =(u32)(x-x1)*(y2-y1)/(x2-x1)+y1;
			TFT_DrawPoint(x,y); 
		}
	} 
}
//畫矩形
void TFT_DrawRectangle(u8 x1, u16 y1, u8 x2, u16 y2)
{
	TFT_DrawLine(x1,y1,x2,y1);
	TFT_DrawLine(x1,y1,x1,y2);
	TFT_DrawLine(x1,y2,x2,y2);
	TFT_DrawLine(x2,y1,x2,y2);
}
//在指定位置畫一個指定大小的圓
//(x,y):中心點
//r    :半徑
void draw_circle(u8 x0,u16 y0,u8 r)
{
	int a,b;
	int di;
	a=0;
	b=r;
	di=3-2*r;             //判斷下個點位置的標志
	while(a<=b)
	{
		TFT_DrawPoint(x0-b,y0-a);             //3           
		TFT_DrawPoint(x0+b,y0-a);             //0           
		TFT_DrawPoint(x0-a,y0+b);             //1       
		TFT_DrawPoint(x0-b,y0-a);             //7           
		TFT_DrawPoint(x0-a,y0-b);             //2             
		TFT_DrawPoint(x0+b,y0+a);             //4               
		TFT_DrawPoint(x0+a,y0-b);             //5
		TFT_DrawPoint(x0+a,y0+b);             //6 
		TFT_DrawPoint(x0-b,y0+a);             
		a++;
		/***使用Bresenham算法畫圓**/     
		if(di<0)di +=4*a+6;	  
		else
		{
			di+=10+4*(a-b);   
			b--;
		} 
		TFT_DrawPoint(x0+a,y0+b);
	}
} 
//畫一個觸摸點
//用來校準用的
void drow_touch_point(u8 x,u16 y)
{
	TFT_DrawLine(x-12,y,x+13,y);//橫線
	TFT_DrawLine(x,y-12,x,y+13);//豎線
	TFT_DrawPoint(x+1,y+1);
	TFT_DrawPoint(x-1,y+1);
	TFT_DrawPoint(x+1,y-1);
	TFT_DrawPoint(x-1,y-1);
	draw_circle(x,y,6);//畫中心圈
}			  
//在指定位置顯示一個字符
//x:0~234
//y:0~308
//num:要顯示的字符:" "--->"~"
//size:字體大小 12/16
//mode:疊加方式(1)還是非疊加方式(0)
void TFT_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode)
{       
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 304 
    u8 temp;
    u8 pos,t;      
    if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;
    //設定一個字符所占的大小 
    //開辟空間
	TFT_WR_CMD(0,0x00,0x04);
	TFT_WR_CMD(0,0x2,x);//
	TFT_WR_CMD(1,0x3,y); 
	TFT_WR_CMD(0,0x04,x+(size/2-1));	//結束列數(0~239)	
	TFT_WR_CMD(1,0x05,y+size-1);//結束行數(0~319)   
	TFT_WR_REG(0x0E);  
	num=num-' ';//得到偏移后的值
	if(!mode) //非疊加方式
	{
		for(pos=0;pos<size;pos++)
		{
			if(size==12)temp=asc2_1206[num][pos];//調用1206字體
			else temp=asc2_1608[num][pos];		 //調用1608字體
			for(t=0;t<size/2;t++)
		    {                 
		        if(temp&0x01)TFT_WR_Data16(POINT_COLOR);
		        else TFT_WR_Data16(BACK_COLOR);     
		        temp>>=1; 
		    }
		}	
	}else//疊加方式
	{
		for(pos=0;pos<size;pos++)
		{
			if(size==12)temp=asc2_1206[num][pos];//調用1206字體
			else temp=asc2_1608[num][pos];		 //調用1608字體
			for(t=0;t<size/2;t++)
		    {                 
		        if(temp&0x01)TFT_DrawPoint(x+t,y+pos);//畫一個點     
		        temp>>=1; 
		    }
		}
	}		
	//恢復窗體大小						    					     
	TFT_WR_CMD(0,0x04,239);//結束列數	
	TFT_WR_CMD(1,0x05,319);//結束行數 
} 
//在指定位置顯示一個大字符
//30*60大小的
//num:0~9
//:/./C這三個字符
void TFT_ShowBigChar(u8 x,u16 y,u8 num)
{
    u8 n,t;
	u8 temp;
	u8 t1,deadline;
	TFT_WR_CMD(0,0x2,x);//設置到原點
	TFT_WR_CMD(1,0x3,y);   
	TFT_WR_CMD(0,0x04,x+29);//結束列數(0~239)	
	TFT_WR_CMD(1,0x05,y+59); //結束行數(0~319)
	if(num==':')t1=150;
	else if(num=='.')t1=165;
	else if(num=='C')t1=180;
	else t1=15*num;
	deadline=t1+15;
	TFT_WR_REG(0x0E);	   
	for(;t1<deadline;t1++)
	{	 
		for(n=0;n<16;n++)
		{
			temp=BIG_ASCII[t1][n];
			for(t=0;t<8;t++)
			{
				if(temp&0x80) TFT_WR_Data16(POINT_COLOR); 
				else TFT_WR_Data16(BACK_COLOR);
				temp<<=1;
				if(((n%4)==3)&&t==5)break;
			}
		}
	} 	  
	//恢復面板
	TFT_WR_CMD(0,0x04,239);//結束列數(0~239)	
	TFT_WR_CMD(1,0x05,319); //結束行數(0~319)
}
//顯示一個按鈕,大小24*24
//0,>;1,<;
void TFT_ShowButton(u8 x,u16 y,u8 num)
{
    u8 n,t;
	u8 temp;
	u8 t1,deadline;
	TFT_WR_CMD(0,0x0,0x04);//掃描方式控制
	TFT_WR_CMD(0,0x2,x);//設置到原點
	TFT_WR_CMD(1,0x3,y);   
	TFT_WR_CMD(0,0x04,x+23);//結束列數(0~239)	
	TFT_WR_CMD(1,0x05,y+23); //結束行數(0~319)	   
    t1=8*num;
	deadline=t1+8;
	TFT_WR_REG(0x0E);	   
	for(;t1<deadline;t1++)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人在线视频一区二区| 亚洲va欧美va人人爽| 欧美一级爆毛片| 欧美视频一区二区三区| 色综合天天综合网天天看片| 大尺度一区二区| 成人免费高清视频在线观看| 成人在线视频一区| a美女胸又www黄视频久久| 成人看片黄a免费看在线| 国产二区国产一区在线观看| 狠狠色狠狠色综合日日91app| 琪琪久久久久日韩精品| 日本午夜精品视频在线观看 | 亚洲色图清纯唯美| 中文字幕中文字幕中文字幕亚洲无线| 久久老女人爱爱| 日本一区二区电影| 亚洲精品中文在线影院| 亚洲精选视频免费看| 亚洲国产精品自拍| 日韩av一级片| 国产成人精品亚洲777人妖 | 日本一区二区高清| 中文字幕在线观看不卡| 亚洲影院理伦片| 老司机午夜精品| 大美女一区二区三区| 99re这里只有精品6| 欧美无人高清视频在线观看| 51久久夜色精品国产麻豆| 日韩欧美中文字幕制服| 日本一区二区三区视频视频| 亚洲美女免费在线| 蜜臀av国产精品久久久久| 国产一区二区91| av在线综合网| 欧美一级一区二区| 亚洲欧美在线视频观看| 日韩黄色在线观看| 成人国产一区二区三区精品| 欧美日韩亚洲综合| 欧美激情一区二区三区| 亚洲成人精品在线观看| 国产suv一区二区三区88区| 在线观看视频一区二区 | 狠狠色丁香久久婷婷综| 91黄视频在线观看| 精品国产乱子伦一区| 一区二区三区日韩在线观看| 美腿丝袜亚洲综合| 99久久夜色精品国产网站| 日韩欧美成人一区二区| 亚洲乱码国产乱码精品精98午夜| 美日韩一区二区三区| 91在线porny国产在线看| 日韩女优av电影| 亚洲在线观看免费| 粉嫩av一区二区三区在线播放| 欧美日韩一二三区| 国产精品对白交换视频| 国产伦理精品不卡| 日韩精品中文字幕一区| 天天综合网 天天综合色| 成人av午夜影院| 2020国产精品久久精品美国| 日韩激情一二三区| 欧美无乱码久久久免费午夜一区| 国产精品亲子乱子伦xxxx裸| 日韩不卡一区二区| 欧美羞羞免费网站| 玉足女爽爽91| 色综合天天综合狠狠| 国产精品久久久久久亚洲毛片| 美日韩黄色大片| 4438x亚洲最大成人网| 亚洲无人区一区| 在线免费一区三区| 亚洲国产精品嫩草影院| 色av成人天堂桃色av| 成人免费视频在线观看| 99久久久久免费精品国产| 久久久不卡影院| 国产馆精品极品| 国产丝袜美腿一区二区三区| 国产乱码精品一区二区三区忘忧草| 欧美日韩激情在线| 天天综合天天做天天综合| 欧美一级理论性理论a| 麻豆国产精品777777在线| 日韩精品一区二区三区四区视频| 美女视频免费一区| 精品美女一区二区| 国产不卡免费视频| 最新高清无码专区| 欧美性大战久久| 麻豆精品视频在线| 久久欧美中文字幕| 不卡av免费在线观看| 亚洲男女毛片无遮挡| 欧美日韩精品一二三区| 狠狠网亚洲精品| ...xxx性欧美| 欧美二区三区91| 国产乱码精品一区二区三区av| 国产精品另类一区| 欧美日韩在线不卡| 国产一区在线观看麻豆| 国产精品国产三级国产| 欧美日韩性生活| 国产高清不卡二三区| 亚洲欧美日韩国产成人精品影院| 欧美日韩成人一区| 国产成人欧美日韩在线电影| 亚洲人成网站影音先锋播放| 在线电影院国产精品| 成人av网址在线| 五月激情丁香一区二区三区| 国产丝袜美腿一区二区三区| 欧美亚洲图片小说| 成人免费高清视频在线观看| 亚洲bt欧美bt精品| 国产精品久久久久aaaa| 日韩欧美在线1卡| 欧美在线色视频| 国产成人丝袜美腿| 麻豆传媒一区二区三区| 伊人色综合久久天天人手人婷| 欧美精品一区二区在线观看| 欧洲中文字幕精品| 成人免费视频国产在线观看| 久久99精品久久久久久国产越南 | 免费观看日韩电影| 一区二区三区在线观看国产| 久久夜色精品一区| 欧美一区二区在线不卡| 91福利国产精品| 成熟亚洲日本毛茸茸凸凹| 久久综合综合久久综合| 石原莉奈在线亚洲二区| 综合自拍亚洲综合图不卡区| 久久久蜜臀国产一区二区| 日韩一级二级三级| 91精品免费在线| 欧美日韩国产大片| 欧美亚洲一区二区在线观看| 不卡的av中国片| 99久久久久久99| 色综合久久综合网欧美综合网| 国产精品一卡二卡在线观看| 精品一区二区在线播放| 午夜精品久久一牛影视| 亚洲福利视频一区二区| 一区二区三区在线看| 亚洲精品视频一区| 一区二区在线观看av| 亚洲精品日产精品乱码不卡| 亚洲欧美日韩一区二区| 亚洲三级久久久| 亚洲与欧洲av电影| 三级在线观看一区二区| 日本在线不卡视频| 免费成人在线观看视频| 日韩黄色免费网站| 美女视频黄a大片欧美| 久久99久久99精品免视看婷婷| 蜜桃视频在线一区| 狠狠色丁香久久婷婷综合丁香| 国产伦精品一区二区三区免费| 国产精品一区一区三区| 成人午夜又粗又硬又大| k8久久久一区二区三区 | 亚洲精品国产无套在线观| 亚洲欧美日韩国产手机在线| 亚洲国产sm捆绑调教视频| 午夜精品久久久久久久久久久| 日韩精品一二区| 国产精品一区一区三区| 99久久免费国产| 欧美人狂配大交3d怪物一区| 日韩精品一区二区三区在线播放| 2欧美一区二区三区在线观看视频| 国产日韩精品一区| 亚洲人成网站在线| 日韩国产一区二| 成人午夜视频网站| 欧美性猛交xxxxxx富婆| 精品久久免费看| 亚洲日本va午夜在线影院| 日日摸夜夜添夜夜添亚洲女人| 久久精品国产免费看久久精品| 成人免费视频一区二区| 在线成人免费观看| 中文字幕精品三区| 肉丝袜脚交视频一区二区| 高清beeg欧美| 正在播放亚洲一区| 亚洲欧洲精品一区二区精品久久久 | 这里只有精品99re| 中文字幕精品综合|