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

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

?? lcd.c

?? The original version is Running In 51 System LCD
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**--------------------------------File Info--------------------------------------------------------
**
** File name:               lcd.c
** Latest modified Date:    2008.05.23
** Latest Version:          v1.0
** Descriptions:            The lcd draw function
**
**--------------------------------------------------------------------------------------------------------
** Modified by:              X
** Modified date:            2008.05.22
** Version:                 v1.1
** Descriptions:            The original version is Running In 51 System 
**
*********************************************************************************************************/

#include  <hw_types.h>
#include  <hw_memmap.h>
#include  <hw_sysctl.h>
#include  <hw_gpio.h>
#include  <sysctl.h>
#include  <gpio.h>
#include  "lcd.h"

/////////////////////// 延時常數宏定義 ///////////////////////////

#define   NOP      for(int i=0;i<80;i++)

/*****************************  定義LCD數據接口  **********************************/

#define   LCD_DATA_PORT               SYSCTL_PERIPH_GPIOA   
#define   LCD_CTL_PORT                SYSCTL_PERIPH_GPIOB

#define   LCD_DATA_ADR                GPIO_PORTA_BASE
#define   LCD_CTL_ADR                 GPIO_PORTB_BASE

#define	  LCD_RS_PIN                  GPIO_PIN_0   
#define	  LCD_RW_PIN	              GPIO_PIN_1 
#define	  LCD_E_PIN	              GPIO_PIN_2 
#define	  CSA_PIN	              GPIO_PIN_3 
#define	  CSB_PIN		      GPIO_PIN_4 

#define   GPIO_ALL                    0x000000ff  // All of GPIO Select 

#define   PinSetBit(x)         GPIOPinWrite(LCD_CTL_ADR,x,x)
#define   PinClrBit(x)         GPIOPinWrite(LCD_CTL_ADR,x,~x)

////////////////////////////// 常用操作命令和參數定義 ////////////////////////////////

#define	 DISPON			0x3f			//	開啟顯示
#define	 DISPOFF		0x3e			//	關閉顯示
#define	 DISPFIRST		0xc0			//	顯示起始行定義
#define	 SETX			0x40			//	X定位設定指令(頁)(0-127)
#define	 SETY			0xb8			//	Y定位設定指令(列)(0-7)
#define	 LCD_Busy		0x80			//	LCM忙判斷位

///////////////////////// 顯示分區邊界位置 ////////////////////////////////////////

#define	 MODL		0x00		//  左區
#define	 MODR		0x40		//  左區和右區分界
#define	 LCMLIMIT	0x80		//  顯示區的右邊界

///////////////////////////// 全局變量定義 ////////////////////////////////////////

uchar ucCol,ucRow,ucShowData;			//  Col = x (0-127), Row = y (0-7)
uchar xy;					//  畫線方向標志:1 = 水平 0 = 垂直 
uchar Base=0;                                     //  滾屏顯示中使用  Base為顯示的起始行 

///////////////////////// 自定義字符數組列表 ////////////////////////////////

const uchar _ASCII[];				//	ASCII常規字符點陣碼表

/***************************** 中英文字符串顯示函數 **********************************/

void PutEnStr(uchar *puts,uchar i)
{

  uchar j,ucDat;

  for (j=0;j<i;j++)
  {
	ucDat = puts[j];

	if(!(ucDat&0x80))
          Putedot(ucDat-0x20);	  //  Ascii碼表從0x20開始 之前的20H是控制碼
  }
}

void PutChStr(const uchar *puts,uchar i)
{

  uchar j;

  for (j=0;j<i;j++)
  {
    Putcdot(puts,j&0x7f);      //  只保留低7位
  }
}

/*********************************半角字符點陣碼數據輸出********************************/

void Putedot(uchar Order)
{
  uchar i,bakerx,bakery;		
  uint index;					 //	偏移量

  bakerx = ucCol;					//      暫存x,y坐標,已備下半個字符使用
  bakery = ucRow;
  index=Order * 0x10;				//	半角字符,每個字符16字節
                                	        //	上半個字符輸出,8列
  for(i=0;i<8;i++)
  {   
    ucShowData = _ASCII[index];		              //	取點陣碼,ASCII碼數組
    Wrdata(ucShowData);			      //	寫輸出一字節數據
    index++;
    ucCol++;
    if (ucCol==LCMLIMIT)
    {
      ucCol=0;ucRow++;ucRow++;};	              //	下一列,如果列越界換行
      if (ucRow>7) 
        ucRow=0;			            //	        如果行越界,返回首行
    }			                    //	        上半個字符輸出結束
    ucCol = bakerx;			    //	        列對齊
    ucRow = bakery+1;			    //	        指向下半個字符行
                                	    //	        下半個字符輸出,8列
    for(i=0;i<8;i++)
    {
      ucShowData = _ASCII[index];			    //	        取點陣碼
      Wrdata(ucShowData);			    //	        寫輸出一字節數據
      index++;
      ucCol++;
      if (ucCol==LCMLIMIT)
      { 
        ucCol=0;
        ucRow=ucRow+2;
      };		                    //	        下一列,如果列越界換行
      if (ucRow>7)
        ucRow=1;				//	如果行越界,返回首行
    }					//	下半個字符輸出結束
    ucRow=bakery;	
}					//	整個字符輸出結束

/*********************************全角字符點陣碼數據輸出********************************/

void Putcdot(const uchar * ChDat,uchar Order)
{
    uchar i,bakerx,bakery;			
    uint index;					//	偏移量
	
    bakerx = ucCol;				//	暫存x,y坐標,已備下半個字符使用*/
    bakery = ucRow;
    index=Order * 0x20;				//	每個字符32字節*/
    	                            	        //	上半個字符輸出,16列*/
    for(i=0;i<16;i++)
    {
      Wrdata(ChDat[index]);			
      index++;
      ucCol++;
      if(ucCol==LCMLIMIT)
      {
        ucCol=0;
        ucRow++;
        ucRow++;
      }	
      if (ucRow>6) ucRow=0;       	
    }					           
	                                   
    ucCol = bakerx;
    ucRow = bakery+1;
    for(i=0;i<16;i++)				
    {
      Wrdata(ChDat[index]);
      index++;
      ucCol++;
      if (ucCol==LCMLIMIT)
      {
        ucCol=0;
        ucRow++;
        ucRow++;
      }	
      if(ucRow>7)
        ucRow=1;	
    }					
    ucRow = bakery;
}						

/************************************清屏,全屏幕清零***********************************/

void LCD_Cls( void )
{
    for(ucRow=0;ucRow<8;ucRow++)
      for(ucCol=0;ucCol<LCMLIMIT;ucCol++)
         Wrdata(0);
}

/*************************************數據寫輸出 **************************************/

void Wrdata(uchar WrDat)
{
    Locatexy();				//	坐標定位,返回時保留分區狀態不變
    PinSetBit(LCD_RS_PIN);				//	數據輸出
    PinClrBit(LCD_RW_PIN);				//	寫輸出
    BaseWrData(WrDat);			
    PinSetBit(LCD_E_PIN);	
    NOP;
    PinClrBit(LCD_E_PIN);
}

/***************************從液晶片上讀數據,保留在全局變量中***************************/

uchar Rddata( void )
{
    uchar RdDat;
         
    Locatexy();				        //	坐標定位,返回時保留分區狀態不變

    PinSetBit(LCD_RS_PIN);			//	數據
    PinSetBit(LCD_RW_PIN);			//	讀數據
    PinSetBit(LCD_E_PIN);			
    NOP;
    RdDat=BaseRdData();		      //	虛讀一次
    PinClrBit(LCD_E_PIN);
    Locatexy();			//	坐標定位,返回時保留分區狀態不變
    
    PinSetBit(LCD_RS_PIN);			//	數據
    PinSetBit(LCD_RW_PIN);			//	讀數據
    PinSetBit(LCD_E_PIN);	
    NOP;
    RdDat=BaseRdData();		//	從數據口讀數據,真讀
    PinClrBit(LCD_E_PIN);
    
    return RdDat;
}

/*********************************命令輸出到左區控制口*********************************/

void WrcmdL(uchar WrDat)
{
    LCD_BusyL();				//	確定分區,返回時保留分區狀態不變
    PinClrBit(LCD_RS_PIN);				//命令操作
    PinClrBit(LCD_RW_PIN);			
    BaseWrData(WrDat);			
    PinSetBit(LCD_E_PIN);
    NOP;
    PinClrBit(LCD_E_PIN);	
}


/*********************************命令輸出到右區控制口********************************/

void WrcmdR(uchar WrDat)
{
    LCD_BusyR();			
    PinClrBit(LCD_RS_PIN);			   
    PinClrBit(LCD_RW_PIN);			
    BaseWrData(WrDat);			
    PinSetBit(LCD_E_PIN);
    NOP;
    PinClrBit(LCD_E_PIN);
}

/************************分區操作允許等待,返回時保留分區選擇狀態*************************/

void LCD_BusyL(void)
{
    PinClrBit(CSA_PIN);
    PinSetBit(CSB_PIN);				//	選擇左區
    Wtcom();					//	等待使能
}

/************************************************************************************/

void LCD_BusyR(void)
{
    PinSetBit(CSA_PIN);
    PinClrBit(CSB_PIN);			//	選擇右區
    Wtcom();				//	等待使能
}

/************************************************************************************/

void Wtcom(void)
{
    uchar RdDat;
    
    PinClrBit(LCD_RS_PIN);				
    PinSetBit(LCD_RW_PIN);		
    RdDat=BaseRdData();
    PinSetBit(LCD_E_PIN);
    while(RdDat & LCD_Busy)
    {
      RdDat=BaseRdData();                       //  判斷等待位狀態
    }                      
    PinClrBit(LCD_E_PIN);
}

/******************根據設定的坐標數據,定位LCM上的下一個操作單元位置******************/

void Locatexy(void)
{

    uchar  x,y;

    switch (ucCol&0xc0)			 // 根據列地址判斷顯示所在的區(左/右)			
    {								
      case 0    : LCD_BusyL();break;	
      case 0x40 : LCD_BusyR();break;	
      default   : break; 
    }

    x = ucCol&0x3F|SETX;			
    y = ucRow&0x07|SETY;			
    Wtcom();						
    PinClrBit(LCD_RS_PIN);					
    PinClrBit(LCD_RW_PIN);				
    BaseWrData(y);	  		//	寫入列地址(Y)  			
    PinSetBit(LCD_E_PIN);
    PinClrBit(LCD_E_PIN);
    Wtcom();					
    PinClrBit(LCD_RS_PIN);					
    PinClrBit(LCD_RW_PIN);				
    BaseWrData(x);		    //	寫入行地址(X)		
    PinSetBit(LCD_E_PIN);
    PinClrBit(LCD_E_PIN);
}

/***************************畫線,只提供X或Y方向的,不支持斜線*************************/

void LineTo(uchar length)
{
    uchar xs,ys;
    if (xy)
    { 
      ys = ucCol;
      for (xs=0;xs<length;xs++)
      {
          ucCol = ys + xs;
          Point();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九色综合国产一区二区三区| 日韩激情视频在线观看| 欧美日韩国产美女| 国产999精品久久久久久绿帽| 一卡二卡欧美日韩| 国产精品视频在线看| 欧美一级黄色录像| 欧美亚洲动漫制服丝袜| 福利一区二区在线观看| 日本vs亚洲vs韩国一区三区| 综合分类小说区另类春色亚洲小说欧美| 欧美高清视频www夜色资源网| 不卡视频一二三四| 国产伦理精品不卡| 美女网站视频久久| 亚洲一卡二卡三卡四卡五卡| 自拍偷自拍亚洲精品播放| 2023国产精品| 欧美一级黄色录像| 欧美久久一二三四区| 99综合电影在线视频| 国产成人免费视频精品含羞草妖精| 蜜桃传媒麻豆第一区在线观看| 亚洲成人高清在线| 久久新电视剧免费观看| 欧美理论电影在线| 色天使色偷偷av一区二区| 国产成人av一区二区| 极品少妇一区二区| 蜜桃视频一区二区三区在线观看| 一区二区三区欧美视频| 亚洲免费在线观看视频| 亚洲人成网站影音先锋播放| 国产精品家庭影院| 亚洲欧洲日产国码二区| 国产精品国产三级国产aⅴ中文| 国产亚洲午夜高清国产拍精品 | 美女网站一区二区| 日本欧美肥老太交大片| 午夜精品久久久久久久99水蜜桃| 亚洲欧洲精品天堂一级| 国产清纯白嫩初高生在线观看91| 久久这里只精品最新地址| 精品免费99久久| 国产视频一区在线观看| 国产欧美日韩另类一区| 中文字幕国产一区二区| 国产精品不卡一区二区三区| 中国av一区二区三区| 亚洲一区二区三区四区在线免费观看 | 亚洲精品一区二区三区香蕉| 日韩欧美国产一区二区在线播放| 欧美成人一区二区三区在线观看| 欧美va亚洲va香蕉在线 | 亚洲制服丝袜一区| 天天操天天干天天综合网| 日本vs亚洲vs韩国一区三区二区 | eeuss国产一区二区三区| 成人国产精品免费观看视频| k8久久久一区二区三区| 日本韩国精品一区二区在线观看| 欧美午夜精品一区| 精品国产一区二区在线观看| 中文字幕高清一区| 亚洲综合丝袜美腿| 九九九久久久精品| 99久久综合国产精品| 欧美午夜精品电影| 欧美不卡视频一区| 成人免费在线视频| 亚洲成人中文在线| 国产曰批免费观看久久久| 99在线精品观看| 综合久久久久久| 亚洲欧洲色图综合| 亚洲成av人在线观看| 国产在线精品免费| 一本一本久久a久久精品综合麻豆| 欧美色网一区二区| 欧美精品一区二区蜜臀亚洲| 国产精品国产自产拍在线| 午夜欧美2019年伦理| 激情成人综合网| 在线观看av一区| 亚洲精品在线免费观看视频| 亚洲欧美国产77777| 另类小说欧美激情| 免费成人在线观看视频| av激情亚洲男人天堂| 欧美一区二区免费观在线| 中文文精品字幕一区二区| 午夜私人影院久久久久| 国产凹凸在线观看一区二区| 欧美亚洲精品一区| 亚洲国产精品成人综合色在线婷婷| 亚洲第一电影网| 成人sese在线| 欧美sm美女调教| 亚洲超碰精品一区二区| 不卡高清视频专区| 久久综合久久综合久久| 日韩在线观看一区二区| 一本色道久久综合亚洲91| 国产三级精品在线| 久久99精品久久久久久| 精品视频123区在线观看| 国产精品高潮呻吟| 激情综合色综合久久综合| 欧美日韩在线一区二区| 亚洲国产cao| 色悠悠久久综合| 中文字幕在线不卡一区| 韩国精品久久久| 欧美一级电影网站| 午夜a成v人精品| 91福利精品视频| 亚洲欧洲国产日本综合| 成人精品电影在线观看| 亚洲国产成人午夜在线一区 | 国产又黄又大久久| 3d动漫精品啪啪一区二区竹菊| 亚洲影院在线观看| 一本在线高清不卡dvd| 国产亚洲午夜高清国产拍精品| 久久精品国产免费| 日韩欧美国产系列| 日韩av在线免费观看不卡| 欧美中文字幕一二三区视频| 亚洲免费在线观看| 色噜噜狠狠成人中文综合| 亚洲日本免费电影| 色综合天天综合色综合av| 亚洲视频一区在线观看| 99久久精品国产一区二区三区| 欧美成人精品1314www| 精品在线亚洲视频| 久久久精品2019中文字幕之3| 国产精品一区久久久久| 日本一区二区三区在线观看| 粉嫩av亚洲一区二区图片| 国产精品久久久一区麻豆最新章节| 国产成人免费xxxxxxxx| 亚洲国产成人私人影院tom| 成人av第一页| 一区二区三区加勒比av| 欧美日韩一区二区在线视频| 日日夜夜精品视频天天综合网| 3d成人动漫网站| 久久国产乱子精品免费女| 久久先锋影音av鲁色资源| 粗大黑人巨茎大战欧美成人| 亚洲日本va在线观看| 欧美视频在线播放| 日韩和的一区二区| 日韩欧美一级在线播放| 国产成人免费在线| 亚洲欧美日韩国产另类专区| 欧美视频在线观看一区| 捆绑紧缚一区二区三区视频| 国产日韩成人精品| 色婷婷久久久亚洲一区二区三区 | 欧美一级在线免费| 国产麻豆欧美日韩一区| 亚洲精品一卡二卡| 日韩一区二区三区四区五区六区| 国产精品一区二区视频| 亚洲裸体xxx| 日韩三级免费观看| 成人免费看片app下载| 亚洲高清免费观看高清完整版在线观看 | 国模冰冰炮一区二区| 国产精品久久久久三级| 欧美亚洲综合一区| 国内精品国产成人| 亚洲色图第一区| 日韩一区二区免费高清| av成人免费在线| 免费观看一级特黄欧美大片| 国产精品电影一区二区三区| 4hu四虎永久在线影院成人| 国产**成人网毛片九色| 亚洲高清不卡在线| 中文一区在线播放| 欧美一区二区视频在线观看| 99久久精品国产网站| 老司机午夜精品99久久| 亚洲精品久久7777| 2020国产精品自拍| 欧美视频一区在线| 成人精品亚洲人成在线| 免费在线看一区| 亚洲午夜国产一区99re久久| 亚洲国产精品t66y| 日韩欧美综合一区| 色欧美乱欧美15图片| 久久精品国产精品亚洲精品| 一区二区三区在线视频免费观看| 国产亚洲一区二区三区在线观看| 欧美精品精品一区| 欧美丝袜丝交足nylons图片|