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

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

?? t6963.c

?? 一些avr單片機的開發實例
?? C
字號:
#define T6963_C
#include "includes.h"


/************************************************/
/* 取當前行數據*/
/************************************************/
unsigned char fnGetRow(void)
{
    return(gCurRow);
}
/************************************************/
/* 取當前列數據*/
/************************************************/
unsigned char fnGetCol(void)
{
    return(gCurCol);
}
/************************************************/
/* 讀狀態*/
/************************************************/
unsigned char RD_LCM(void)
{
    unsigned char temp;
    dir_datap=0x00;
    port_conp  |= (1 <<LCM ); //LCM=LCMCW;
    port_conp &= ~(1 << RD);  //RD=0;
    NOP();
    temp=LCD_IN;
    port_conp |= (1<<RD);     //RD=1;
    dir_datap = 0xff;
    return(temp);
}
/************************************************/
/* 讀數據*/
/************************************************/
unsigned char RD_DAT(void)
{
    unsigned char temp;
    dir_datap = 0x00;
    port_conp &= ~(1<<LCM);     //LCM=LCMDW;
    port_conp &= ~(1 << RD);    //RD=0;
    NOP();
    temp = LCD_IN;
    port_conp |= (1<<RD);       //RD=1;
    dir_datap = 0xff;
    return(temp);
}
/************************************************/
/* 寫數據*/
/************************************************/
void WR_DAT(unsigned char val)
{
    dir_datap = 0xff;
    port_conp &= ~(1<<LCM);     //LCM=LCMDW;
    LCD_OUT = val;
    port_conp &= ~(1<<WR);      //WR=0;
    NOP();
    NOP();
    port_conp |= (1<<WR);       //WR=1;
}
/************************************************/
/* 寫命令*/
/************************************************/
void WR_CMD(unsigned char val)
{
    dir_datap = 0xff;
    port_conp  |= (1 << LCM);    //LCM=LCMCW;
    LCD_OUT = val;
    port_conp &= ~(1<<WR);       //WR=0;
    NOP();
    NOP();
    port_conp |= (1<<WR);        //WR=1;
}
/************************************************/
/* 狀態位STA1,STA0判斷讀寫指令和讀寫數據*/
/* 在讀寫數據或者寫入命令前必須保證均為1 */
/************************************************/
unsigned char fnSTA01(void)
{
    unsigned char i;
    for(i=10;i>0;i--)
    {
        if((RD_LCM() & 0x03) == 0x03) // 讀取狀態
        {
            break;
        }
    }
    return(i); // 若返回零說明錯誤
}
/********************************************/
/* 檢查STA2,如果STA2=1 為自動讀狀態*/
/********************************************/
unsigned char fnSTA2(void)
{
    unsigned char i;
    for(i=10;i>0;i--)
    {
        if((RD_LCM() & 0x04) == 0x04)
        {
            break;
        }
    }
    return(i); // 若返回零說明錯誤
}
/***********************************************/
/* 狀態位STA3 判斷STA3 = 1 數據自動寫狀態*/
/***********************************************/
unsigned char fnSTA3(void)
{
    unsigned char i;
    for(i=10;i>0;i--)
    {
        if((RD_LCM() & 0x08) == 0x08)
        {
            break;
        }
    }
    return(i); // 若返回零說明錯誤
}
/************************************************/
/* 狀態位STA6 判斷STA6 =1 屏讀/屏拷貝狀態*/
/************************************************/
unsigned char fnSTA6(void)
{
    unsigned char i;
    for(i=10;i>0;i--)
    {
        if((RD_LCM() & 0x40) == 0x40)
        {
            break;
        }
    }
    return(i); // 若返回零說明錯誤
}
/************************/
/* 寫雙參數的指令*/
/************************/
unsigned char fnPR1(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)
{
    if(fnSTA01() == 0)
    {
        return 1;
    }
    WR_DAT(uPar1);
    if(fnSTA01() == 0)
    {
        return 2;
    }
    WR_DAT(uPar2);
    if(fnSTA01() == 0)
    {
        return 3;
    }
    WR_CMD(uCmd);
    return(0); // 返回0 成功
}
/************************/
/* 寫單參數的指令*/
/************************/
unsigned char fnPR11(unsigned char uCmd,unsigned char uPar1)
{
    if(fnSTA01() == 0)
    {
        return 1;
    }
    WR_DAT(uPar1);
    if(fnSTA01() == 0)
    {
        return 2;
    }
    WR_CMD(uCmd);
    return(0); // 返回0 成功 
}
/************************/
/* 寫無參數的指令*/
/************************/
unsigned char fnPR12(unsigned char uCmd)
{   
    if(fnSTA01() == 0)
    {
        return 1;
    }
    WR_CMD(uCmd);
    return(0); // 返回0 成功
}
/************************/
/* 寫數據*/
/************************/
unsigned char fnPR13(unsigned char uData)
{
    if(fnSTA3() == 0)
    {
        return 1;
    }
    WR_DAT(uData);
    return(0); // 返回0 成功
}
/************************/
/* 讀數據*/
/************************/
unsigned char fnPR2(void)
{
    unsigned char temp;
    if(fnSTA01() == 0)
    {
         return 1; // 獲取狀態如果狀態錯
    }
    temp=RD_DAT();
    return(temp); // 返回數據
}
/************************/
/* 設置當前地址*/
/************************/
void fnSetPos(unsigned char urow, unsigned char ucol)
{
    unsigned int iPos;
    iPos = (unsigned int)urow * 30 + ucol;
    fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
    gCurRow = urow;
    gCurCol = ucol;
}
/**********************/
/* 設置當前顯示行列*/
/**********************/
void cursor(unsigned char uRow, unsigned char uCol)
{
    fnSetPos(uRow * 16, uCol);
}
/*********************/
/* 清屏*/
/*********************/
void cls(void)
{
    unsigned int i;
    fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指針為從零開始
    fnPR12(LC_AUT_WR); // 自動寫
    for(i=0;i<240*128/8;i++) // 清一屏
    {
        fnSTA3();
        fnPR13(0x0); // 寫數據實際使用時請將0x55 改成0x0
    }
    fnPR12(LC_AUT_OVR); // 自動寫結束
    fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指針
    gCurRow = 0; // 置地址指針存儲變量
    gCurCol = 0;
}
/************************/
/* LCM 初始化*/
/************************/
char fnLCMInit(void)
{
    if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本顯示區首地址
    {
        return (0xff);
    }
    fnPR1(LC_TXT_WID,0x1E,0x00); // 文本顯示區寬度
    fnPR1(LC_GRH_STP,0x00,0x00); // 圖形顯示區首地址
    fnPR1(LC_GRH_WID,0x1E,0x00); // 圖形顯示區寬度
    fnPR12(LC_CUR_SHP | 0x01); // 光標形狀
    fnPR12(LC_MOD_OR); // 顯示方式設置
    fnPR12(LC_DIS_SW | 0x08); // 顯示開關設置
    return(0);
}
/********************************************************/
/* ASCII(8*16) 及 漢字(16*16) 顯示函數      */
/********************************************************/
unsigned char dprintf(unsigned char x,unsigned char y, char *ptr)
{
    unsigned char c1,c2,cData;
    unsigned char i,j,uLen,uRow,uCol;
    unsigned int  k;
    uLen=0;
    i=0;
    uRow = y;
    uCol = x;
    fnSetPos(uRow*16,uCol);      //起點定位
    while (ptr[uLen]!=0) //探測字串長度
    {
        uLen++;
    }	
    while(i<uLen)
    {
    	c1 = ptr[i];
    	c2 = ptr[i+1];
        //ascii字符與漢字內碼的區別在于128做分界,大于界線的為漢字碼
    	uRow = fnGetRow();    
    	uCol = fnGetCol();
    	if(c1 <=128)	// ASCII
      	{
            for(j=0;j<16;j++) //寫16行
            {
        	fnPR12(LC_AUT_WR);    			// 寫數據(命令)
        	if (c1 >= 0x20)
          	{
            	    fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
          	}
        	else
        	{
          	    fnPR13(cData);
          	}
         	fnPR12(LC_AUT_OVR);  			//寫數據結束
                fnSetPos(uRow+j+1,uCol);
             }
            if(c1 != BS)  	// 非退格
            {
                uCol++;   // 列數加1
            }
          			   				
        }
    	else    	// 中文
      	{
            for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)  	// 查找定位
            {
                if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
                {
                    break;
                }
          				
            }
            for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
            {
                fnSetPos(uRow+k,uCol);
        	fnPR12(LC_AUT_WR);      		// 寫數據
        	if(j < sizeof(GB_16)/sizeof(GB_16[0]))
          	{
          	    fnPR13(GB_16[j].Msk[k*2]);
          	    fnPR13(GB_16[j].Msk[k*2+1]);
          	}
        	else   		// 未找到該字
          	{
          	    if(k < sizeof(GB_16[0].Msk)/4)
            	    {
                        fnPR13(0x00);
            		fnPR13(0x00);
            	     }
         	    else
            	    {
            		fnPR13(0xff);
			fnPR13(0xff);
            	    }
                }
        	fnPR12(LC_AUT_OVR);
            }
      	    uCol += 2;
      	    i++;
        };
    	if(uCol >= 30)      					// 光標后移
      	{
      	    uRow += 16;
            if(uRow < 0x80)
            {
                uCol -= 30;
            }
      	    else
            {
        	uRow = 0;
        	uCol = 0;
            }
      	 }
         fnSetPos(uRow,uCol);
    	 i++;
    }
    return uLen;        //返回字串長度,漢字按2字節計算
}  
/*======================*/
/* 延時*/
/*======================*/
void shortdelay(unsigned int tt)
{
    unsigned char i;
    while (tt)
    {
        i=100;
        while (i)
        {
            i--;
        }
    tt--;
    }
}
/*************************/
/* 畫點*/
/*************************/
void point(unsigned char x,unsigned char y,unsigned char s)
{
    unsigned char x1;
    x1 = x >> 3; // 取Y方向分頁地址
    fnSetPos(y,x1); // 起點定位
    x1 = turnf[ x & 0x07 ];
    x1 = 0xF0 | x1 | s; // 字節內位置計算
    fnPR12(x1); // 畫上屏幕S顯示屬性8 畫點0 擦除點
}
/************************************************/
/* 畫線任意方向的斜線,直線數學方程aX+bY=1 */
/************************************************/
void Linexy(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
{
    register unsigned char t;
    int xerr = 0,yerr = 0;
    int delta_x,delta_y,distance;
    int incx,incy,uRow,uCol;
    delta_x = xt-x0; // 計算坐標增量
    delta_y = yt-y0;
    uRow = x0;
    uCol = y0;
    if(delta_x>0)
    {
        incx = 1; // 設置單步方向
    }
    else if( delta_x==0 )
    {
        incx=0; // 垂直線
    }
    else
    {
        incx = -1;
        delta_x = -delta_x;
     
    }
    if(delta_y>0)
    {
        incy=1;
    }
    else if( delta_y==0 ) 
    {
        incy=0; // 水平線
    }
    else 
    {
        incy=-1;
        delta_y=-delta_y;
    }
    if( delta_x > delta_y ) 
    {
        distance=delta_x; // 選取基本增量坐標軸
    }
    else 
    {
        distance=delta_y;
    }
    for( t=0;t <= distance+1; t++ )   // 畫線輸出
    { 
        point(uRow,uCol,s); // 畫點
        xerr += delta_x;
        yerr += delta_y;
        if( xerr > distance )
        {
            xerr -= distance;
            uRow += incx;
        }
        if( yerr > distance )
        {
            yerr -= distance;
            uCol += incy;
        }
    }
}
/********************************************/
/* 畫圓數學方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
/********************************************/
void circle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char s)
{
    unsigned int xx,rr;
    unsigned int xt,yt;
    unsigned int rs,row,col;
    yt = Rx;
    rr = (unsigned int)Rx*Rx+1; // 補償1 修正方形
    rs = (yt+(yt>>1))>>1; // (*0.75)分開1/8圓弧來畫
    for (xt=0;xt<=rs;xt++)
    {
        xx = xt*xt;
        while ((yt*yt)>(rr-xx))
        {
            yt--;
        }
        row = Ox+xt; // 第一象限
        col = Oy-yt;
        point(row,col,s);
        row = Ox-xt; // 第二象限
        point(row,col,s);
        col = Oy+yt; // 第三象限
        point(row,col,s);
        row = Ox+xt; // 第四象限
        point(row,col,s);
        /***************45度鏡象畫另一半***************/
        row = Ox+yt; // 第一象限
        col = Oy-xt;
        point(row,col,s);
        row = Ox-yt; // 第二象限
        point(row,col,s);
        col = Oy+xt; // 第三象限
        point(row,col,s);
        row = Ox+yt; // 第四象限
        point(row,col,s);
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色av电影| 国产清纯白嫩初高生在线观看91 | 久久国产精品99久久人人澡| 亚洲一二三区在线观看| 亚洲免费观看高清完整版在线 | 精品在线一区二区三区| 久久国产综合精品| 国产精品一级片在线观看| 国产乱码精品一品二品| 国产成人丝袜美腿| 99久久免费视频.com| 色狠狠色噜噜噜综合网| 欧美欧美午夜aⅴ在线观看| 欧美高清视频一二三区| 日韩一区二区免费视频| 精品999久久久| 国产精品伦一区| 亚洲美女区一区| 日韩成人av影视| 国产乱子轮精品视频| jizz一区二区| 欧美日本一道本在线视频| 亚洲精品一区二区三区四区高清 | 亚洲777理论| 麻豆成人91精品二区三区| 国产精品一区二区91| 91色|porny| 日韩欧美在线1卡| 国产精品盗摄一区二区三区| 亚洲大片一区二区三区| 国产一区二区精品久久| 色94色欧美sute亚洲13| 欧美人狂配大交3d怪物一区| 久久久久亚洲综合| 亚洲亚洲人成综合网络| 国产精品一区二区久激情瑜伽| 91成人网在线| 国产日本亚洲高清| 日韩**一区毛片| av网站一区二区三区| 日韩精品一区二区三区在线观看 | 久久影音资源网| 亚洲一卡二卡三卡四卡| 国产一区福利在线| 欧美精品久久天天躁| 中文字幕乱码亚洲精品一区| 五月婷婷综合激情| 91在线小视频| 国产精品视频观看| 久久99精品视频| 在线不卡a资源高清| 亚洲激情在线激情| 成人国产精品免费网站| 日韩欧美一二三区| 五月婷婷激情综合| 欧美亚洲国产一区二区三区| 国产精品网曝门| 国产成人免费视频网站| 精品国产免费视频| 美女在线视频一区| 欧美日产国产精品| 婷婷一区二区三区| 欧美性感一区二区三区| 亚洲欧洲国产专区| 不卡av在线网| 中文字幕亚洲一区二区va在线| 国产成人在线视频免费播放| 精品国产乱码久久| 韩国v欧美v日本v亚洲v| 日韩三级精品电影久久久| 日本大胆欧美人术艺术动态| 欧美日韩国产首页| 亚洲动漫第一页| 91麻豆精品国产自产在线观看一区 | 精品成人免费观看| 久久精品国产99国产精品| 精品嫩草影院久久| 另类小说视频一区二区| 欧美成va人片在线观看| 久久99精品国产麻豆不卡| 精品三级av在线| 国产精品一卡二卡| 国产精品久久久久国产精品日日| jizzjizzjizz欧美| 一区二区三区中文在线观看| 欧美少妇xxx| 蜜臀a∨国产成人精品| 久久久亚洲午夜电影| 不卡一卡二卡三乱码免费网站| 国产精品三级久久久久三级| 色欧美片视频在线观看| 亚洲国产精品欧美一二99| 6080yy午夜一二三区久久| 久久99久久精品| 国产精品国产馆在线真实露脸| 国产suv一区二区三区88区| 国产精品女主播av| 欧美日韩高清一区二区三区| 激情av综合网| 亚洲色图视频免费播放| 制服丝袜成人动漫| 懂色av一区二区三区蜜臀| 亚洲柠檬福利资源导航| 日韩欧美在线综合网| 成人app下载| 日韩成人av影视| 亚洲欧洲日产国码二区| 欧美一级高清片| 白白色亚洲国产精品| 五月婷婷综合网| 国产精品久久久久aaaa樱花| 91精品国产欧美一区二区成人| 国产在线视频一区二区| 亚洲午夜视频在线观看| 国产丝袜在线精品| 欧美色图免费看| 成人免费高清视频在线观看| 日韩和欧美的一区| 亚洲人成精品久久久久久| 日韩欧美不卡在线观看视频| 色综合一区二区三区| 韩国一区二区视频| 亚洲aaa精品| 亚洲精品免费在线播放| 国产午夜精品一区二区三区嫩草 | 国产aⅴ综合色| 奇米精品一区二区三区四区| 亚洲美女视频在线| 国产精品美女久久久久av爽李琼| 91精品国产综合久久精品| 日本高清不卡视频| 成人av在线资源| 国产不卡在线视频| 韩国女主播成人在线观看| 日产欧产美韩系列久久99| 亚洲线精品一区二区三区| 中文字幕一区二区日韩精品绯色| 精品久久久三级丝袜| 日韩欧美色综合| 3atv在线一区二区三区| 欧美日韩国产高清一区二区三区| 97久久人人超碰| 成人h动漫精品| eeuss国产一区二区三区| 国产精品主播直播| 国产一级精品在线| 国产精品自在在线| 国产在线精品免费| 国产一区二区日韩精品| 国产乱码字幕精品高清av| 九一九一国产精品| 另类成人小视频在线| 亚洲第一会所有码转帖| 国产日产欧美精品一区二区三区| 欧美mv日韩mv国产网站app| 欧美岛国在线观看| 精品欧美一区二区久久| 久久天堂av综合合色蜜桃网| 欧美电影免费观看高清完整版在线观看 | 国产精品欧美经典| 日韩毛片视频在线看| 亚洲免费观看高清完整版在线观看| 亚洲人吸女人奶水| 亚洲国产人成综合网站| 日本一区中文字幕| 狠狠v欧美v日韩v亚洲ⅴ| 国内精品在线播放| 成人a免费在线看| 欧美色网一区二区| 欧美一级在线视频| 久久久久久**毛片大全| 国产精品久久777777| 亚洲一区二区三区国产| 男男视频亚洲欧美| 国产在线麻豆精品观看| 99免费精品在线观看| 欧美三级乱人伦电影| 精品毛片乱码1区2区3区| 中文字幕av一区二区三区高| 亚洲精品成人精品456| 免费在线看成人av| 岛国一区二区三区| 欧美日韩久久一区二区| 久久只精品国产| 一区二区国产盗摄色噜噜| 久久精品久久99精品久久| 99久久精品国产一区| 91精品国产综合久久香蕉的特点| 国产蜜臀97一区二区三区| 亚洲午夜av在线| 成人性视频网站| 欧美一区国产二区| 国产精品女主播av| 蜜臀99久久精品久久久久久软件| av资源网一区| www国产精品av| 日韩极品在线观看| 91在线视频观看| 国产欧美一区二区三区鸳鸯浴| 亚洲成人动漫av|