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

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

?? lcd8x15d.h

?? avr單片機編寫的金鵬公司的8x15d液晶顯示屏程序
?? H
字號:
/*********************************************
*  函數庫說明:金鵬8x15D觸摸屏頭文件
*  版本:      v0.0                                     
*  作者:      cht                                      
*  日期:      2008年02月14日                           
*  修改:      cht                                      
*  修改日期:  2008年02月19日                           
*                                                     
*  說明 完成D系列產品的基本功能 ,用中斷方式處理觸摸
**********************************************/



#ifndef lcd_8822p
#define lcd_8822p

#include <avr/interrupt.h>
#include <util/delay.h> 
#include <avr/wdt.h>
#include <avr/interrupt.h>


#define CPU_CRYSTAL (1.0) 

#define wait_us(us)  _delay_loop_2  ((uint16_t) ((us)*CPU_CRYSTAL/4))

#define LCD_DATA_PORT  PORTA  //用來傳送命令和數據
#define lcd_rs         PD0
#define lcd_wr         PD1
#define lcd_rd         PD6
#define lcd_cs1        PD3
#define lcd_cs2        PD4
#define lcd_busy       PD5
#define lcd_int        PD2
#define lcd_rst        PD7

#define uchar        unsigned char
#define uint         unsigned int

uchar tabx[4]; //存從用于顯示的觸摸屏的X坐標
uchar taby[4]; //存儲用于顯示的觸摸屏的Y坐標 (因為是10位AD轉換,所以值為0——1023)
uchar tab3[]="touch !!";
uchar tab4[]="no touch";
uchar tab5[]="0000";
/*--------------------------------------
	函 數 聲 明
----------------------------------------*/
void lcd_init(void);
void lcd_datawrite(uint8_t wrdata);
void lcd_regwrite(uint8_t regname,uint8_t regdata);
void lcd_regwr(uint8_t regnada) ;
void delay_nms(uint16_t n); 
void gotoxy(uint16_t x,uint16_t y);
void lcd_reset(void) ;
void lcd_clear(void);
void get_touch(void);
uchar touch_test(void) ;
uint16_t touch_y(void) ;
uint16_t touch_x(void);


/*--------------------------------------
	uint8_t LCD_reRead(uint8_t cmdReg)
 
說明:讀取觸摸屏寄存器中的數據
----------------------------------------*/

uint8_t LCD_reRead(uint8_t cmdReg) 
{
	uint8_t  reg_rddata;
	while(!(PIND&(1<<5)))
	{
	
	};                           // 判斷RA8803 是否忙碌中 (低電平為忙)
	lcd_regwr(cmdReg);          // 寫入緩存器的地址
	
	PORTA = 0xff;
	DDRA =0x00;                  //端口A為輸入,且內部上拉電阻有效
	PORTD &= ~_BV(lcd_cs1);
	PORTD |=_BV(lcd_wr);
	PORTD &=~_BV(lcd_rs);
	PORTD &=~_BV(lcd_rd);
	reg_rddata = PINA;
	wait_us(10);
	PORTD |=_BV(lcd_rd);
	PORTD |=_BV(lcd_rs);
	PORTD |=_BV(lcd_cs1);
	DDRA =0xff;                   //端口A恢復為輸出
	return  reg_rddata;           // 回傳讀取緩存器的數據
}

/*--------------------------------------
	void lcd_clear(void)
 
說明:清除LCD屏幕的所有顯示

PS:實際應用中發現一旦清屏,所有寄存器的數據好像都會 
    消失,要進行再次初始化,不知是否是程續問題還是芯片缺陷
----------------------------------------*/

void lcd_clear(void) 
{                   
  uint8_t reg_rddata;
  lcd_regwrite(0xe0,0x00);
  reg_rddata = LCD_reRead(0xf0);
  //reg_rddata &=0xf7;
  reg_rddata |= 0x08;
  lcd_regwrite(0xf0,reg_rddata);

}  

/*--------------------------------------
	void lcd_reset(void) 
 
說明:觸摸屏復位
----------------------------------------*/

void lcd_reset(void) 
{               
  PORTD = 0X00;
  delay_nms (120);            // delay 120ms 等待上電復位
  PORTD = 0xff;               // lcd_rs/wr/rd/cs1/cs2 normal - skeep high.
}


/*--------------------------------------
	void gotoxy(uint16_t x,uint16_t y) 
 
說明:設定當前顯示坐標,
PS :如果是顯示漢字x為0-14,Y為0-127
----------------------------------------*/
 
 void gotoxy(uint16_t x,uint16_t y) 
{                                
  lcd_regwrite(0x60,x); 
  lcd_regwrite(0x70,y); 
}


/*--------------------------------------
	void delay_nms(uint16_t n)  
 
說明: 延時n個毫秒
----------------------------------------*/

void delay_nms(uint16_t n)      
  {
  uint16_t i;
   for (i=0;i<n;i++)
   wait_us(4*250);
  }

/*--------------------------------------
	void lcd_regwrite(uint8_t regname,uint8_t regdata) 
 
說明: regname為要寫入的寄存器,regdata為寫入寄存器的值
----------------------------------------*/

void lcd_regwrite(uint8_t regname,uint8_t regdata)
{
	lcd_regwr(regname);
	wait_us(200);
	lcd_regwr(regdata);
}

/*--------------------------------------
	void lcd_regwr(uint8_t regnada)
 
說明: 寫命令到寄存器
----------------------------------------*/

void lcd_regwr(uint8_t regnada) //寫命令到寄存器
{

	PORTA= regnada;
	PORTD &= ~_BV(lcd_cs1);
	PORTD |=_BV(lcd_rd);
	PORTD &=~_BV(lcd_rs);
	PORTD &=~_BV(lcd_wr);
	wait_us(10);
	PORTD |=_BV(lcd_wr);
	PORTD |=_BV(lcd_rs);
	PORTD |=_BV(lcd_cs1);

}

/*--------------------------------------
	void lcd_datawrite(uint8_t wrdata)
 
說明: 寫數據到DDRAM 
----------------------------------------*/

void lcd_datawrite(uint8_t wrdata) //寫數據到DDRAM 
{ 

	while(!(PIND&(1<<5)))
	//while(PIND&(1<<5))
	{
	};
	
	PORTA = wrdata; 
	PORTD &= ~_BV(lcd_cs1);
	PORTD |=_BV(lcd_rd);
	PORTD |=_BV(lcd_rs);
	PORTD &=~_BV(lcd_wr);
	wait_us(10);
	PORTD |= _BV(lcd_wr);
	PORTD |=_BV(lcd_rs);
	PORTD |=_BV(lcd_cs1);
}

/*--------------------------------------
	void lcd_init(void)
 
說明: 觸摸屏初始化

PS:[00]如按照例程的設置為“c9” 屏幕被關閉根本無法顯示
    [A0],[c1]都有檢測觸摸屏是否被觸摸的狀態位,不知該用那個
	例程中[A0]的設置為“11” ,看不懂
	---------------------------------------*/

void lcd_init(void)
{

    
		lcd_regwrite(0x00,0xcd);
        //lcd_regwrite(0x01,0x42); //設置頻率和INT及BUSY信號的觸發電平 
		lcd_regwrite(0x01,0x40);
        lcd_regwrite(0x02,0x10);   
        lcd_regwrite(0x03,0x80);  
        lcd_regwrite(0x10,0x2b);          
        lcd_regwrite(0x11,0x00);  
        lcd_regwrite(0x12,0x91);            
		lcd_regwrite(0x20,0x1d); // active window right register(awrr)
        lcd_regwrite(0x30,0x7f); // active window bottom register(awbr)
        lcd_regwrite(0x40,0x00); // active window left register(awlr)
        lcd_regwrite(0x50,0x00);
        
		lcd_regwrite(0x21,0x1d); 
        lcd_regwrite(0x31,0x7f); 
        lcd_regwrite(0x41,0x00); 
        lcd_regwrite(0x51,0x00);
		
		lcd_regwrite(0x71,0x00); 
        lcd_regwrite(0x72,0x7f);  
        lcd_regwrite(0x80,0xaa);  
        lcd_regwrite(0x81,0x04);         
       // lcd_regwrite(0x90,0x1e);  //(8MHZx8)/(240x128x70)=29.7=30  240x128 即為8X15D ,
		                           //70為刷新率,8為數據總線為八位并口,8MHZ為LCD晶振頻率
        
		lcd_regwrite(0x90,0x0a);
		//lcd_regwrite(0xa0,0x04);  //中斷設置和中斷狀態,前4位為狀態,后4位為設置        
        lcd_regwrite(0xa0,0x11);
		lcd_regwrite(0xa1,0x00);
		lcd_regwrite(0xa2,0x00);
		lcd_regwrite(0xa3,0x00);
		
		
		lcd_regwrite(0xb0,0x1d); 
        lcd_regwrite(0xb1,0x7f);

		
		//lcd_regwrite(0xc0,0xdf);
		//lcd_regwrite(0xc0,0x00);
		lcd_regwrite(0xc1,0x36);
		lcd_regwrite(0xc8,0x80);
		lcd_regwrite(0xc9,0x80);
		lcd_regwrite(0xca,0x00);                   
        lcd_regwrite(0xd0,0x80);
		
		lcd_regwrite(0xe0,0x00);	
        lcd_regwrite(0xf0,0xa0);   
        lcd_regwrite(0xf1,0x0f);
		
 
}


/*--------------------------------------
	void lcd_character(uchar *cha,uint8_t count)
 
說明: cha為指向uchar類型數組的指針,count為要顯示的字符個數

PS:  字符為一個字節,漢字為兩個字節
----------------------------------------*/

void lcd_character(uchar *cha,uint8_t count)
{                                   
  uint8_t i;
  for(i=0;i<count;i++)
  {
    lcd_datawrite(*cha);
    ++cha;
  }
}

/*--------------------------------------
	uchar touch_test(void) 
 
說明: 測試是否觸摸屏真的被按下
----------------------------------------*/

uchar touch_test(void) 
{
  uchar reg_rddata,reg_rddata1;
  
  reg_rddata = LCD_reRead(0xc0);
  reg_rddata &= 0xf8;
  reg_rddata |= 0x08;
  lcd_regwrite(0xc0,reg_rddata);
 
  delay_nms (6);
  
  reg_rddata1 = LCD_reRead(0xc1);
  reg_rddata &= 0xf7;
 lcd_regwrite(0xc0,reg_rddata);
 
  return(reg_rddata1);
  
} 

/*--------------------------------------
	uint16_t touch_x(void)
 
說明: 讀取X坐標
----------------------------------------*/

uint touch_x(void)
{
  uchar reg_rddata,touchxl;
 uint touchx;
  
  reg_rddata = LCD_reRead(0xc0);
  reg_rddata &= 0xf3;
  reg_rddata |= 0x03;
  lcd_regwrite(0xc0,reg_rddata);
  delay_nms (6);
  
  touchx = LCD_reRead(0xc8);         //TPXR
  touchxl = (LCD_reRead(0xca)&0xc0); //TPZR
  touchx = (touchx<<2)|(touchxl>>6);
  return(touchx);
  
  
}


/*--------------------------------------
	uint16_t touch_y(void)
 
說明: 讀取Y坐標
----------------------------------------*/


uint touch_y(void) 
{
  uchar reg_rddata,touchyl;
  uint touchy;
  
  reg_rddata = LCD_reRead(0xc0);
  reg_rddata &= 0xfc;
  reg_rddata |= 0x0c;
  lcd_regwrite(0xc0,reg_rddata);
  delay_nms (6);
  
  touchy = LCD_reRead(0xc9);         //TPYR
  touchyl = (LCD_reRead(0xca)&0x0c); //TPZR
  touchy = (touchy<<2)|(touchyl>>2);
  return(touchy);
}

/*--------------------------------------
	void get_touch(void) 
 
說明: 處理觸摸中斷
----------------------------------------*/

void get_touch(void) 
{
   uchar reg_rddata,i;
  uint touchx,touchy;
  
  lcd_regwrite(0xc0,0xc0);  //TOUCH ON
  delay_nms (6);
  
  if((touch_test() & 0x40))
  {
    while(!(LCD_reRead(0xc1) & 0x80));
    touchy = touch_y();
    touchx = touch_x();
    
    tabx[0] = touchx/1000;
    tabx[1] = (touchx%1000)/100;
    tabx[2] = ((touchx%1000)%100)/10;
    tabx[3] = ((touchx%1000)%100)%10;
    
    taby[0] = touchy/1000;
    taby[1] = (touchy%1000)/100;
    taby[2] = ((touchy%1000)%100)/10;
    taby[3] = ((touchy%1000)%100)%10;
    
    reg_rddata = LCD_reRead(0x10);
    reg_rddata |= 0x10;
    lcd_regwrite(0x10,reg_rddata);
        
    gotoxy(0,0x00);
    for(i=0;i<4;i++)
    {
      lcd_datawrite(tabx[i]+0x30);
    }
    
    gotoxy(5,0x00);
    for(i=0;i<4;i++)
    {
      lcd_datawrite(taby[i]+0x30);
    }
    reg_rddata = LCD_reRead(0x10);
    reg_rddata &= 0xef;
    lcd_regwrite(0x10,reg_rddata);
  }
    
  lcd_regwrite(0xc0,0x00);  //TOUCH OFF
  lcd_regwrite(0xc0,0x00);

	gotoxy(2,0x16);
	lcd_character(tab3,8);
	
	delay_nms(2000);
	gotoxy(0,0x00);
    for(i=0;i<4;i++)
    {
      lcd_datawrite('0');
    }
	gotoxy(5,0x00);
    for(i=0;i<4;i++)
    {
      lcd_datawrite('0');
    }
	gotoxy(2,0x16);
	lcd_character(tab4,8);
}

/*-------------------------------------------------------
void Display_graphi(uchar g ,uint16_t x,uint16_t y,uint16_t row ,uint16_t col,uchar f)

說明:用來顯示點陣圖形,g為指向數組的指針,x為顯示的橫坐標,y為縱坐標
	  row為圖形的高(像素),col為圖形的寬(字節),f標志著正常顯示還是反顯(0:正常、1:反顯)
---------------------------------------------------------*/
void Display_graphi(uchar *g ,uint16_t x,uint16_t y,uint16_t row ,uint16_t col,uchar f)
{
	uint16_t i,j;
	
	
	if ((col<30)&&(row<240)&&(y<240)&&(x<320))
	{
		gotoxy(x,y);
		for (i=0;i<row;i++)
		{
			for(j=0;j<col;j++)
			{
				
				if (f==0)
				{	
					lcd_datawrite(*g);
				}
				else
				{	
					
					lcd_datawrite(0xff-*g);
				};
				++g;
			}
			gotoxy(x,y+i);
		}
	}
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产原创一区二区| 色综合一个色综合亚洲| 国产成+人+日韩+欧美+亚洲| av电影天堂一区二区在线观看| 欧美日韩亚洲丝袜制服| 国产精品久久三区| 久久er99精品| 欧美人伦禁忌dvd放荡欲情| 中文字幕欧美日韩一区| 日本中文字幕一区| 色诱亚洲精品久久久久久| 久久亚洲一区二区三区四区| 一区二区三区中文字幕电影| 国产不卡高清在线观看视频| 欧美一级国产精品| 一区二区在线观看视频| av日韩在线网站| 国产三级三级三级精品8ⅰ区| 日本强好片久久久久久aaa| 91丨porny丨蝌蚪视频| 日本一区二区高清| 国产高清精品久久久久| 精品国产免费一区二区三区四区| 午夜电影久久久| 欧美精品1区2区3区| 又紧又大又爽精品一区二区| www.亚洲激情.com| 久久久国产精品午夜一区ai换脸| 国产美女视频91| 欧美zozozo| 久久97超碰色| 久久久99久久| 成人一级视频在线观看| 国产亚洲欧美日韩日本| 成人国产亚洲欧美成人综合网| 久久久国产一区二区三区四区小说| 老司机精品视频在线| 精品免费日韩av| 国产精品中文字幕欧美| 国产欧美一区二区精品仙草咪| 久久99国产精品麻豆| 久久精品免费在线观看| 成人黄色小视频| 成人免费小视频| 在线观看国产一区二区| 婷婷开心久久网| 欧美一级久久久| 国产一区二区美女诱惑| 国产精品视频九色porn| 色吊一区二区三区| 全部av―极品视觉盛宴亚洲| 精品国产网站在线观看| 成人免费观看av| 亚洲一区二区在线视频| 日韩一区二区在线看| 国产成人精品一区二区三区网站观看 | 国产精品电影一区二区三区| 91麻豆视频网站| 亚洲va欧美va人人爽| 91精品在线免费| 国产黄色91视频| 亚洲男人电影天堂| 精品乱人伦一区二区三区| 国产电影一区二区三区| 亚洲欧美日韩电影| 欧美一区二区三区在| 国产精品18久久久久久久网站| 国产精品国产三级国产有无不卡 | 一本久久a久久免费精品不卡| 亚洲国产成人91porn| 久久久精品黄色| 日本乱码高清不卡字幕| 免费日韩伦理电影| 国产精品免费av| 91精品婷婷国产综合久久竹菊| 久热成人在线视频| 一区二区三区高清| 久久综合五月天婷婷伊人| 91麻豆蜜桃一区二区三区| 美女视频一区在线观看| 亚洲三级在线观看| 久久蜜桃av一区精品变态类天堂| 91在线看国产| 国产在线一区观看| 亚洲成人av福利| 国产精品国产成人国产三级 | 在线观看免费成人| 国产91精品久久久久久久网曝门| 午夜精品123| 亚洲视频在线一区观看| 精品国产三级电影在线观看| 欧美在线你懂的| 成人动漫一区二区在线| 久久99精品国产麻豆婷婷洗澡| 一区二区三区欧美久久| 中文字幕精品一区| 欧美电视剧免费观看| 精品视频一区二区三区免费| 91小视频在线观看| 国产精品18久久久久久久网站| 日韩精彩视频在线观看| 悠悠色在线精品| 亚洲精品欧美在线| 18欧美亚洲精品| 久久精品亚洲乱码伦伦中文| 欧美一区二区视频在线观看2022 | 日韩成人一级片| 亚洲综合色网站| 亚洲激情自拍视频| 亚洲精品国产无套在线观| 一区精品在线播放| 日韩一区在线播放| 亚洲图片另类小说| 亚洲人一二三区| 自拍偷在线精品自拍偷无码专区| 国产精品色婷婷久久58| 国产丝袜美腿一区二区三区| 精品国产一二三| 中文字幕精品三区| 国产精品久久看| 日韩理论在线观看| 亚洲大片一区二区三区| 午夜精品久久久久久久99水蜜桃| 亚洲综合999| 日韩精品电影在线观看| 另类人妖一区二区av| 国产在线一区二区| 岛国av在线一区| caoporn国产一区二区| 一本色道久久加勒比精品| 欧美优质美女网站| 91精品婷婷国产综合久久| 日韩欧美一级在线播放| 久久亚洲精精品中文字幕早川悠里 | 成人黄色电影在线 | www.日韩精品| 91麻豆国产精品久久| 欧美色视频在线观看| 欧美一二三区精品| 久久久久国产精品人| 自拍偷拍亚洲综合| 丝袜亚洲精品中文字幕一区| 精品一区二区三区在线视频| av成人免费在线观看| 欧美日韩亚州综合| 日韩欧美亚洲另类制服综合在线| 91麻豆精品国产91久久久使用方法| 欧美丰满嫩嫩电影| 国产亚洲美州欧州综合国| 亚洲精品视频免费观看| 毛片不卡一区二区| 盗摄精品av一区二区三区| 欧美午夜精品电影| 国产天堂亚洲国产碰碰| 亚洲一区二区三区中文字幕| 狠狠色狠狠色合久久伊人| 91猫先生在线| 欧美精品一区二区三区很污很色的| 国产精品国产三级国产普通话99 | 99视频精品全部免费在线| 欧美日韩一区二区欧美激情| 久久久久久久久99精品| 亚洲综合自拍偷拍| 激情文学综合插| 欧美色网一区二区| 欧美国产视频在线| 午夜精品久久久久久不卡8050| 成人免费视频视频| 欧美一二三区精品| 亚洲综合色噜噜狠狠| 成人在线视频一区| 日韩三级中文字幕| 一区二区不卡在线播放| 国产激情一区二区三区| 91麻豆精品国产91久久久资源速度 | 欧美视频在线一区| 国产精品久久久久国产精品日日 | 蜜桃一区二区三区在线观看| 99久久精品免费精品国产| 久久久久久日产精品| 日本视频一区二区| 欧美日精品一区视频| 亚洲私人影院在线观看| 成人免费看视频| 中文字幕av一区二区三区高 | 日日夜夜一区二区| 在线看日韩精品电影| 日韩理论片一区二区| 成人av网址在线| 国产精品丝袜91| 成人app软件下载大全免费| 国产日韩欧美不卡在线| 国产精品一区二区你懂的| 精品免费视频.| 久久99国内精品| 国产亚洲短视频| 国产a级毛片一区| 国产精品色哟哟网站| 成人精品视频一区| 中文字幕精品一区|