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

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

?? lcd.c

?? 單片機輸出PWM波形電機驅動 mc338865
?? C
字號:
//                    FYD12864 測試程序(串口) 
//***************************************************************************
//連線表: CPU=msp430  SystemClock=8Mhz                                      
// Reset=RC in Board 
//P4.4  CS模擦組片選
//P4.5  SID 串行數據輸入端
//P4.6  SCK 串行同步時鐘,上升沿有效
//P4.7  PSB串口方式接低電平                                                     
//***************************************************************************


#include <msp430x16x.h>
#include "lcd.h"

unsigned char  AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行漢字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行漢字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      //第三行漢字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      //第四行漢字位置
};

//全局的AC,記錄光標的位置
char GlobeRow;
char GlobeCol;



//控制信號的430底層描述

/*******SCK 串行同步時鐘設置*******************************/
void SCK(unsigned char sck)
{
  SCK_OUT;  
  if (sck==1) 
    SCK_H;
  if (sck==0)
    SCK_L;
		
}
/********************CS模擦組片選,高電平有效***********************************/
void CS(unsigned char cs)
{
    CS_OUT ;
    if (cs==1) 
      CS_H ;
  if (cs==0)
      CS_L;
}
/*********SID串行數據輸出********************************/
void OUTSID(unsigned char out)
{
	SID_OUT;
	if (out==0)
		SID_L;
	if (out==1)
		 SID_H ;
		
}
/***********SID串行數據輸入*******************************/
unsigned char  INSID()
{
	unsigned char temp;
	SID_IN;      // 設置SID串行數據輸入方向
	temp=SID;   // 把輸入的數據移到第0位,傳給temp 
	return temp;
}





//串口發送一個字節
void LCD_SendByte(unsigned char Dbyte)
{
     unsigned char i;
     for(i=0;i<8;i++)
     {    
     	   unsigned char CY;

           SCK(0);//SCK = 0;
           CY=((Dbyte&0x80)>>7);
           Dbyte=Dbyte<<1;      //左移一位
           OUTSID(CY);//SID = CY;            //移出的位給SID
           SCK(1);//SCK = 1;
           SCK(0);//SCK = 0;
     }
}

//串口接收一個字節
//僅在讀取數據的時候用到
//而讀出的數據是一次只能讀出4bit的
unsigned char LCD_ReceiveByte(void)
{
     unsigned char i,temp1,temp2;
     temp1=temp2=0;
     for(i=0;i<8;i++)
     {
           temp1=temp1<<1;
           SCK(0);//SCK = 0;
           SCK(1);//SCK = 1;            
           SCK(0);//SCK = 0;
           if(INSID()) temp1++;
     }
     for(i=0;i<8;i++)
     {
           temp2=temp2<<1;
           SCK(0);//SCK = 0;
           SCK(1);//SCK = 1;
           SCK(0);//SCK = 0;
           if(INSID()) temp2++;
     }
     return ((0xf0&temp1)+(0x0f&temp2));
}

void LCD_CheckBusy( void )
{
     do   LCD_SendByte(0xfc);      //11111,RW(1),RS(0),0
     while(0x80&LCD_ReceiveByte());      //BF(.7)=1 Busy
}

void LCD_WriteCommand( unsigned char Cbyte )
{
     CS(1);//CS = 1;
     LCD_CheckBusy();
     LCD_SendByte(0xf8);            //1111,1,RW(0),RS(0),0
     LCD_SendByte(0xf0&Cbyte);      //高四位
     LCD_SendByte(0xf0&Cbyte<<4);//低四位(先執行<<)
     CS(0);// CS = 0;
}

void LCD_WriteData( unsigned char Dbyte )
{
     CS(1);// CS = 1;
     LCD_CheckBusy();
     LCD_SendByte(0xfa);            //11111,RW(0),RS(1),0
     LCD_SendByte(0xf0&Dbyte);      //高四位
     LCD_SendByte(0xf0&Dbyte<<4);//低四位(先執行<<)
     CS(0);//CS = 0;
}

unsigned char LCD_ReadData( void )
{
     LCD_CheckBusy();
     LCD_SendByte(0xfe);            //11111,RW(1),RS(1),0
     return LCD_ReceiveByte();
}

void LCD_Delay(unsigned int MS)
{
     unsigned char us,usn;
     while(MS!=0)            //for 12M
           { usn = 2;
                 while(usn!=0)
                       {
                             us=0xf5;
                             while (us!=0){us--;};
                             usn--;
                       }
                 MS--;
           }
}



//文本區清RAM函數
void LCD_LcmClearTXT( void )
{
     unsigned char i;
     LCD_WriteCommand(0x30);      //8BitMCU,基本指令集合
     LCD_WriteCommand(0x80);      //AC歸起始位
     for(i=0;i<64;i++)
        LCD_WriteData(0x20);
     LCD_WriteCommand(0x30);      //8BitMCU,基本指令集合
     LCD_WriteCommand(0x80);      //AC歸起始位
}

//圖形區和文本區顯示在兩個不同的RAM區
//圖形區清RAM函數
void LCD_LcmClearBMP( void )
{
     unsigned char i,j;
     LCD_WriteCommand(0x34);      //8Bit擴充指令集,即使是36H也要寫兩次
     LCD_WriteCommand(0x36);      //繪圖ON,基本指令集里面36H不能開繪圖
     for(i=0;i<32;i++)            //12864實際為256x32
     {
           LCD_WriteCommand(0x80|i);      //行位置
           LCD_WriteCommand(0x80);      //列位置
           for(j=0;j<32;j++)            //256/8=32 byte
                LCD_WriteData(0);
     }
}


void LCD_setAC(unsigned char  row,unsigned char col)   //設置光標的位置
{
	 GlobeRow=row; GlobeCol=col;
}


//顯示一個字符串,row=-1和col=-1,接著上次顯示完的地方開始顯示,滿四行清屏
void LCD_PutStr( int row, int col,unsigned char *puts) 
{
     unsigned char temp1=0xff;
     unsigned char temp2=1;
     LCD_WriteCommand(0x30);      //8BitMCU,基本指令集合
     if ((row==-1)||(col==-1))//若row=-1和col=-1,接著上次顯示完的地方開始顯示
     	{
          row=GlobeRow;
     	  col=GlobeCol;
     	 }
     LCD_WriteCommand(AC_TABLE[8*row+col]);      //起始位置
     
     while(*puts != '\0')      //判斷字符串是否顯示完畢
     {
           if(col==8)            //判斷換行
           {            //若不判斷,則自動從第一行到第三行
                 col=0;
                 row++;
           }
           if(row==4) 
           {
                row=0;
                LCD_LcmClearTXT();
           	/*LCD_PutStr(0,0,"                \0");
           	LCD_PutStr(1,0,"                \0");
           	LCD_PutStr(2,0,"                \0");  */
            }     //一屏顯示完,回到屏左上角
           
           if(temp1)     {   //如果是第一個位置輸入
               LCD_WriteCommand(AC_TABLE[8*row+col]);//寫入待顯示字符地址
               if((*puts)>=0xA1)  temp2=1;else temp2=0; //temp2=1為輸入的是中文
           }else if((temp2==0)&&(*puts)>=0xA1)  {    //如果是第二個位置輸入而且是中文字符的第一個字節,則寫入一空格
                    LCD_WriteData(0x20);
                    col++; 
                    temp1=~temp1;
                     continue;
             }
           LCD_WriteData(*puts); 
           puts++;     
           temp1=~temp1;
           if(temp1)  col++; 
         
       }
     if(temp1=~temp1)  col++;
     GlobeRow=row; GlobeCol=col; //記錄當前位置
     
}


//顯示一個字符串,row=-1和col=-1,接著上次顯示完的地方開始顯示,滿三行清屏
void LCD_PutStr3( int row, int col,unsigned char *puts) 
{
     unsigned char temp1=0xff;
     unsigned char temp2=1;
     LCD_WriteCommand(0x30);      //8BitMCU,基本指令集合
     if ((row==-1)||(col==-1))//若row=-1和col=-1,接著上次顯示完的地方開始顯示
     	{
          row=GlobeRow;
     	  col=GlobeCol;
     	 }
     LCD_WriteCommand(AC_TABLE[8*row+col]);      //起始位置
     
     while(*puts != '\0')      //判斷字符串是否顯示完畢
     {
           if(col==8)            //判斷換行
           {            //若不判斷,則自動從第一行到第三行
                 col=0;
                 row++;
           }
           if(row==3) 
           {
                row=0;
           	LCD_PutStr(0,0,"                \0");
           	LCD_PutStr(1,0,"                \0");
           	LCD_PutStr(2,0,"                \0");
            }     //一屏顯示完,回到屏左上角
           
           if(temp1)     {   //如果是第一個位置輸入
               LCD_WriteCommand(AC_TABLE[8*row+col]);//寫入待顯示字符地址
               if((*puts)>=0xA1)  temp2=1;else temp2=0; //temp2=1為輸入的是中文
           }else if((temp2==0)&&(*puts)>=0xA1)  {    //如果是第二個位置輸入而且是中文字符的第一個字節,則寫入一空格
                    LCD_WriteData(0x20);
                    col++; 
                    temp1=~temp1;
                     continue;
             }
           LCD_WriteData(*puts);      //一個漢字要寫兩次
           puts++;
           temp1=~temp1;
           if(temp1)  col++; 
         
       }
     if(temp1=~temp1)  col++;
     GlobeRow=row; GlobeCol=col; //記錄當前位置
     
}
//顯示一個字節的數據,row=-1和col=-1,接著上次顯示完的地方開始顯示,滿4行翻屏
void LCD_PutChar (  int row, int col,unsigned char put) 
{
     LCD_WriteCommand(0x30);      //8BitMCU,基本指令集合
	   if ((row==-1)||(col==-1))//若row=-1和col=-1,接著上次顯示完的地方開始顯示
     	{
          row=GlobeRow;
     	  col=GlobeCol;
     	
     	 }
     if(col==8)    //判斷換行
        {          //若不判斷,則自動從第一行到第三行
           col=0;
           row++;
        }
     if(row==4) {row=0;LCD_LcmClearTXT();}      //一屏顯示完,回到屏左上角,并清屏
     LCD_WriteCommand(AC_TABLE[8*row+col]);
     LCD_WriteData(put); 

     GlobeRow=row; GlobeCol=col+1;	//記錄當前位置   **** 
}

//顯示一個字節的數據,row=-1和col=-1,接著上次顯示完的地方開始顯示,滿3行翻屏
void LCD_PutChar3 (  int row, int col,unsigned char put) 
{
     LCD_WriteCommand(0x30);      //8BitMCU,基本指令集合
     if ((row==-1)||(col==-1))//若row=-1和col=-1,接著上次顯示完的地方開始顯示
       {
         row=GlobeRow;
     	 col=GlobeCol;
        }
    if(col==8)    //判斷換行
       {          //若不判斷,則自動從第一行到第三行
          col=0;
          row++;
       }
     if(row==3)  //一屏顯示完,回到屏左上角,清空前三行 
     {
          row=0;
          LCD_PutStr(0,0,"                \0");
          LCD_PutStr(1,0,"                \0");
          LCD_PutStr(2,0,"                \0");
     }      
     LCD_WriteCommand(AC_TABLE[8*row+col]);
     LCD_WriteData(put); 

     GlobeRow=row; GlobeCol=col+1;//記錄當前位置    
}


void LCD_PutBMP(unsigned char *puts)
{
     unsigned int x=0;
     unsigned char i,j;
     LCD_WriteCommand(0x34);      //8Bit擴充指令集,即使是36H也要寫兩次
     LCD_WriteCommand(0x36);      //繪圖ON,基本指令集里面36H不能開繪圖
     for(i=0;i<32;i++)            //128x64實際為256x32
     {
           LCD_WriteCommand(0x80|i);      //行位置
           LCD_WriteCommand(0x80);      //列位置
           for(j=0;j<32;j++)      //256/8=32 byte
           {            //列位置每行自動增加
                 LCD_WriteData(puts[x]);
                 x++;
           }
     }
}

//電子測試用點陣顯示
void LCD_DisplayDots(unsigned char DotByte)
{
     unsigned char i,j;
     LCD_WriteCommand(0x34);      //8Bit擴充指令集,即使是36H也要寫兩次
     LCD_WriteCommand(0x36);      //繪圖ON,基本指令集里面36H不能開繪圖
     for(i=0;i<32;i++)            //12864實際為256x32
     {
           LCD_WriteCommand(0x80|i);      //行位置
           LCD_WriteCommand(0x80);      //列位置
           for(j=0;j<32;j++)      //256/8=32 byte
           {            //列位置每行自動增加
                 LCD_WriteData(DotByte);                  
           }
           DotByte=~DotByte;
     }
}

//顯示一個INT型的數據,row=-1和col=-1,接著上次顯示完的地方開始顯示,滿4行翻屏
void LCD_PutNum (  int row, int col,unsigned int num) 
{
	
	unsigned char numbuff[]={"      "};

  char i,j;

  numbuff[5]='\0';
  for (i=5;i>0;i--)
  {
  	numbuff[i-1]=num-num/10*10+0x30;
  	num=num/10;
  }
  j=0;
  while(numbuff[j]==0X30)
   j++;
  for (i=0;i<(5-j)+1;i++)
    numbuff[i]=numbuff[i+j];
  for (;i<6;i++)
    numbuff[i]='\0';
   LCD_PutStr(row ,col,numbuff);

	
}

/***************************************************************
顯示一個無符號 長整型 數據
*****************************************************************/
void LCD_PutNum_l (  int row, int col,unsigned long num) 
{
	
	unsigned char numbuff[]={"            "};

  char i,j;

  numbuff[7]='\0';
  for (i=7;i>0;i--)
  {
  	numbuff[i-1]=num-num/10*10+0x30;
  	num=num/10;
  }
  j=0;
  while(numbuff[j]==0X30)
   j++;
  for (i=0;i<(7-j)+1;i++)
    numbuff[i]=numbuff[i+j];
  for (;i<8;i++)
    numbuff[i]='\0';
   LCD_PutStr(row ,col,numbuff);

	
}

/********************************************************************************************
     初始化液晶
**********************************************************************************************/
void LCD_LcmInit( void )
{   
     PSB_OUT;   //設置PSB為低電平
     PSB_L;
     LCD_WriteCommand(0x30);      //8BitMCU,基本指令集合
     LCD_WriteCommand(0x03);      //AC歸0,不改變DDRAM內容
     LCD_WriteCommand(0x0C);      //顯示ON,游標OFF,游標位反白OFF
     LCD_WriteCommand(0x01);      //清屏,AC歸0
     LCD_WriteCommand(0x06);      //寫入時,游標右移動
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产在天天线2019| 久久久久88色偷偷免费| 91在线精品秘密一区二区| 日本伊人精品一区二区三区观看方式 | 欧美tickle裸体挠脚心vk| 91老师片黄在线观看| 丁香另类激情小说| 国产精品一区二区在线观看不卡 | 91免费看`日韩一区二区| 欧美精品一区二区在线播放 | 欧美一级久久久久久久大片| 成人18视频在线播放| 国产一二精品视频| 国内精品免费在线观看| 亚洲精品免费播放| 亚洲人成网站精品片在线观看| 久久久久久久综合日本| 日韩精品在线一区| 日韩午夜激情免费电影| 欧美一区二区三区四区高清| 欧美中文字幕一区二区三区| 97精品国产露脸对白| 91无套直看片红桃| 成人免费视频网站在线观看| 不卡的av网站| 色天天综合久久久久综合片| 日本丶国产丶欧美色综合| 色视频成人在线观看免| 在线精品视频一区二区| 欧美久久久久久久久中文字幕| 欧美乱妇15p| 国产视频一区二区三区在线观看| 久久精品一区蜜桃臀影院| 国产精品乱码一区二区三区软件 | 一区二区三区资源| 免费在线观看视频一区| 国产成人免费视频网站高清观看视频 | 久久久精品综合| 久久久久国色av免费看影院| 亚洲色图欧洲色图| 麻豆久久久久久| 成人h精品动漫一区二区三区| 欧美视频在线一区| 久久精品视频免费| 亚洲成av人片| 国产成人精品影院| 欧美一区二区日韩一区二区| 国产亚洲1区2区3区| 亚洲视频精选在线| 国产成人午夜片在线观看高清观看| 色综合天天综合网天天狠天天| 欧美日韩一区二区三区高清| 2019国产精品| 热久久国产精品| 欧美日韩国产大片| 亚洲精品福利视频网站| 国产一区二区剧情av在线| 欧美日韩aaaaa| 日韩成人精品在线| 欧美午夜免费电影| 亚洲欧美综合色| 国产在线看一区| 欧美va天堂va视频va在线| 日韩av在线播放中文字幕| 99re热视频这里只精品| 国产精品天干天干在观线| 国产一区二区三区观看| 精品国免费一区二区三区| 午夜一区二区三区视频| 欧美日韩1区2区| 免费看日韩a级影片| 日韩一卡二卡三卡四卡| 激情综合色综合久久| 精品久久久久久久久久久院品网 | 日韩高清国产一区在线| 欧美美女激情18p| 全国精品久久少妇| 国产三级精品视频| 一本色道**综合亚洲精品蜜桃冫| 亚洲丝袜制服诱惑| 欧美人动与zoxxxx乱| 国产在线播精品第三| 国产女主播在线一区二区| www.色综合.com| 一区二区三区在线视频免费| 欧美疯狂做受xxxx富婆| 国产真实乱偷精品视频免| 久久欧美一区二区| 一本在线高清不卡dvd| 捆绑变态av一区二区三区| 国产视频一区在线播放| 97久久超碰国产精品电影| 免费视频一区二区| 亚洲欧美日本韩国| 日韩一区二区三区电影在线观看| 激情欧美一区二区| 成人免费一区二区三区视频| 风间由美中文字幕在线看视频国产欧美 | 国产伦精品一区二区三区免费迷| 国产精品丝袜久久久久久app| 欧美日韩在线电影| 国产成人高清在线| 免费成人在线网站| 亚洲一二三四久久| 国产精品国产a级| 日韩天堂在线观看| 欧美一区二区三区免费大片| 欧洲色大大久久| 国产91精品久久久久久久网曝门| 亚洲a一区二区| 亚洲自拍偷拍网站| 亚洲国产欧美一区二区三区丁香婷 | 欧美日韩精品综合在线| 国产福利91精品一区| 美女视频免费一区| 国产一区在线观看麻豆| 国产综合色视频| 国产999精品久久| 国产精品综合久久| 国产河南妇女毛片精品久久久| 天天综合网 天天综合色| 午夜在线成人av| 日本成人中文字幕| 久久精品99久久久| 国产精品一区二区在线看| 国产精品中文欧美| 色偷偷88欧美精品久久久| 欧美日韩免费一区二区三区| 国产精品99久久久| 国产69精品久久久久777| 成人性生交大片免费看中文 | 欧洲亚洲国产日韩| 51精品秘密在线观看| 欧美成人精品1314www| 久久夜色精品国产欧美乱极品| 久久久91精品国产一区二区三区| 中文字幕乱码久久午夜不卡| 亚洲裸体xxx| 激情欧美日韩一区二区| www.欧美色图| 3d成人h动漫网站入口| 欧美国产激情一区二区三区蜜月| 亚洲综合偷拍欧美一区色| 美日韩一区二区三区| 91免费小视频| 欧美一级精品大片| 日本一区二区三区dvd视频在线| 一区二区三区国产精华| 久久成人免费电影| 欧美在线一二三| 国产精品美女久久久久av爽李琼 | 欧美日韩国产乱码电影| 国产亚洲欧洲一区高清在线观看| 亚洲综合一二三区| 成人午夜av影视| 日韩欧美高清在线| 日产欧产美韩系列久久99| 91一区二区在线观看| 国产日韩欧美精品一区| 美国欧美日韩国产在线播放| 91成人在线精品| 国产亚洲婷婷免费| 国内精品视频666| 精品日韩在线观看| 裸体在线国模精品偷拍| 欧美日韩国产123区| 亚洲精品日日夜夜| 91麻豆免费在线观看| 国产亚洲一区二区三区四区| 久久99精品久久久| 4438x成人网最大色成网站| 亚洲高清视频中文字幕| 欧美综合天天夜夜久久| 亚洲精品中文在线| 在线观看日韩国产| 亚洲成a人在线观看| 91精选在线观看| 免费观看日韩av| 久久综合久久综合亚洲| 麻豆91在线播放免费| 久久综合九色综合97_久久久| 精品无人区卡一卡二卡三乱码免费卡 | 91社区在线播放| 美腿丝袜一区二区三区| 欧美国产1区2区| 在线免费不卡视频| 另类欧美日韩国产在线| 中文字幕一区二区三区不卡| 欧美色精品在线视频| 免费欧美在线视频| 成人欧美一区二区三区1314| 欧美另类一区二区三区| 国产很黄免费观看久久| 日韩av一区二区在线影视| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美男男青年gay1069videost | 日韩高清不卡在线| 综合色中文字幕| 久久久久九九视频| 日韩美一区二区三区|