久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1786|回復: 0
打印 上一主題 下一主題
收起左側

12864小程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:182821 發表于 2017-3-23 15:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

#include "config.h"


void delayus(uint t)
{
   uint i;
   for(i=0;i<t;i++);
}

void LCD12864_CheckBusy()
{
  uchar BusyFlag,num;
  num=10;
  LCD128_RS=0;
  LCD128_RW=1;
  delayus(10);
  BusyFlag=LCDdat&0x80;
  LCD128_EN=0;
  while(BusyFlag && (num--));
}
void TransferData(uchar dat,uchar mode)
{
LCD12864_CheckBusy();
LCD128_RS=mode;
LCD128_RW=0;
delayus(1);
LCDdat=dat;
LCD128_EN=1;
delayus(1);
LCD128_EN=0;
}
uchar LCD12864_RecData()
{

uchar temp;
  LCD12864_CheckBusy();
  LCD128_RS=1;
  LCD128_RW=1;
  LCD128_EN=1;
  temp=LCDdat;
  LCD128_EN=0;

  return (temp);
}


void LCD12864_SetPos(uchar x,uchar y)
{
  if (y>=64) {CS2=0;CS1=1;y=y-64;}  //右屏顯示
  else {CS2=1;CS1=0;}           //左屏顯示
  TransferData((0x40 | y),WrCom);  
  TransferData((0xb8 | x),WrCom);
}

void LCD12864_Init()
{
TransferData(LCD_BASIC_FUNCTION,WrCom);
delayus(10);
TransferData(LCD_DISPLAY_SET,WrCom);
delayus(10);
TransferData(LCD_CLEAR_SCREEN,WrCom);
delayus(10);
TransferData(LCD_POSSHIFT_RIGHT,WrCom);
delayus(10);
}

void DisCh(uchar x,uchar y,uchar *p)
{
uchar i;
  for(i=0;i<16;i++)
   {
         LCD12864_SetPos(2*x,16*y+i);
         TransferData(p[i],WrDat);
         LCD12864_SetPos(2*x+1,16*y+i);
         TransferData(p[i+16],WrDat);  
   }
}
void SetLine(uchar line)   //line ->0....7
{
line=line & 0x07;  //max 7
line=line | 0xb8;
TransferData(line,WrCom);
}
void SetColum(uchar colum)  //colum->0....63
{
  colum=colum & 0x3f;   //max 64
  colum=colum | 0x40;
TransferData(colum,WrCom);
}

//以下程序為PROTEUS仿真,帶字庫的
/***********************
12864設定初始顯示位置
X為行的數目
Y為列的數目
***********************/
void LCD12864_SetPoint(uchar X,uchar Y)
{
        uchar pos;
        TransferData(0x30,WrCom);
        if     (X==1){X=0x80;}
        else if(X==2){X=0x90;}
    else if(X==3){X=0x88;}
        else if(X==4){X=0x98;}
        pos=X+Y;
        TransferData(pos,WrCom);
}
/*****************************************
設置圖像顯示模式
select=0時,關閉圖形顯示模式
Select=1時,開啟圖形顯示模式
LCD_EXTEND_FUNCTION為 擴展指令集
LCD_GRAPH_ON        打開繪圖模式命令
LCD_GRAPH_OFF        關閉繪圖模式命令
******************************************/
void LCD12864_SetMode(unsigned char Select)
{
        TransferData(LCD_EXTERND_FUNCTION,WrCom);  
        if(Select){TransferData(LCD_GRAPH_ON,WrCom);}
        else      {TransferData(LCD_GRAPH_OFF,WrCom);}      
}
/*************************************
向LCD指定起始位置寫入一個字符串
*************************************/
void LCD12864_DisplayString(unsigned char x,unsigned char y,unsigned char *Str)
{          
        if((y>4)||(x>8)) return;
        LCD12864_SetPoint(x,y);       
        while(*Str>0)
        { TransferData(*Str,WrDat); Str++;}
}
/*********************************************
向LCD寫入一個8位的ASCII碼
以顯示相應的字符
**********************************************/                                                                                                                                               
void LCD12864_SendASCII(uchar hang,uchar lie,char sign)
{

    LCD12864_SetPoint(hang,lie);                 
    TransferData(sign,WrDat);         
         
}
/***************************************
向LCD指定坐標寫入一個象素,象素顏色有兩種,
0代表白(無顯示),1代表黑(有顯示)
****************************************/
void LCD12864_WritePixel(unsigned char x,unsigned char y,unsigned char color)
{

    unsigned char x_Dyte,y_Dyte,x_bite;                                //定義列地址的字節位,及在字節中的哪1位
    unsigned char GDRAM_hbit,GDRAM_lbit;                                //定義為上下兩個屏(取值為0,1),行地址(取值為0~31)

x_Dyte=x/16;
x_bite=x&0x0f;
if(y<32)
        {
                y_Dyte=y;
        }
else
        {
                y_Dyte=y-32;
                x_Dyte=x_Dyte+8;
        }
TransferData(LCD_EXTERND_FUNCTION,WrCom);
TransferData(LCD_GRAPH_ON,WrCom);
TransferData(0x80+y_Dyte,WrCom);
TransferData(0x80+x_Dyte,WrCom);
LCD12864_RecData();
GDRAM_hbit=LCD12864_RecData();
GDRAM_lbit=LCD12864_RecData();
if(x_bite<8)
          {
          switch(color)
                {
                         case 0 :GDRAM_hbit&=(~(1<<(7-x_bite)));break;   //set 0
                         case 1 :GDRAM_hbit|=(1<<(7-x_bite));   break;   //set 1
                         case 2 :GDRAM_hbit^=(1<<(7-x_bite));        break;   //qufan
                         default :break;
                }
        }
else
        {
                  switch(color)
                {
                         case 0 :GDRAM_lbit&=(~(1<<(15-x_bite)));break;
                         case 1 :GDRAM_lbit|=(1<<(15-x_bite));   break;
                         case 2 :GDRAM_lbit^=(1<<(15-x_bite));        break;
                         default :break;
                }

       

        }
TransferData(0x80+y_Dyte,WrCom);
TransferData(0x80+x_Dyte,WrCom);
TransferData(GDRAM_hbit,WrCom);
TransferData(GDRAM_lbit,WrCom);
TransferData(LCD_EXTERND_FUNCTION,WrCom);
TransferData(LCD_GRAPH_OFF,WrCom);
}
/***********************************************************
函數名:  disp_picture
函數說明: 顯示一幅128*64的圖畫
傳入參數:圖形指針*img
傳出參數:無
返回值:  無
**********************************************************/
void LCD12864_DisplayPicAll(unsigned char *img)
{
  unsigned char i,j;
  LCD12864_SetMode(1);
  for(j=0;j<32;j++)
  {
    for(i=0;i<8;i++)
    {
      TransferData(0X34,WrCom);
      TransferData(0x80+j,WrCom);
      TransferData(0x80+i,WrCom);
      TransferData(0X30,WrCom);

      TransferData(img[j*16+i*2],WrDat);
      TransferData(img[j*16+i*2+1],WrDat);
    }
  }
  for(j=32;j<64;j++)
  {
    for(i=0;i<8;i++)
      TransferData(0X34,WrCom);
      TransferData(0x80+j-32,WrCom);
      TransferData(0x80+i+8,WrCom);
      TransferData(0X30,WrCom);

      TransferData(img[j*16+i*2],WrDat);
      TransferData(img[j*16+i*2+1],WrDat);
    }

    LCD12864_SetMode(1);
}
/***************************************
向LCD指定位置畫一條長度為Length的指定顏色的水平線
****************************************/
void LCD12864_DrawLineH(unsigned char x,unsigned char y,unsigned char Length,unsigned char Color)
{
        unsigned char count;
        if(Length==0)return;
        LCD12864_SetMode(0);       
        for(count=0;count<Length;count++)
        {LCD12864_WritePixel(x+count,y,Color);}
        LCD12864_SetMode(1);       
}
/***************************************
向LCD指定位置畫一條長度為Length的指定顏色的垂直線
****************************************/
void LCD12864_DrawLineV(unsigned char x,unsigned char y,unsigned char Length,unsigned char Color)
{
        unsigned char count;
        if(Length==0)        return;
        for(count=0;count<Length;count++)
        {LCD12864_WritePixel(x,y+count,Color);}       
}











分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品在线免费观看视频 | 在线观看视频一区 | 91精品国产一区二区三区动漫 | 2018中文字幕第一页 | 亚洲美女一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 365夜爽爽欧美性午夜免费视频 | 国产精品污www一区二区三区 | 99精品99| 亚洲欧美日韩精品久久亚洲区 | 亚洲一av | av片在线免费看 | 色综合欧美 | 伊人手机在线视频 | 国产精品久久久久久久久久久久久 | 91久久久久久久久 | 国产免费一区二区 | 在线观看的av | 国产jizz女人多喷水99 | 国产传媒在线观看 | 中文一区| www亚洲免费国内精品 | 中文字幕加勒比 | 51ⅴ精品国产91久久久久久 | 欧美成视频 | 亚洲一区二区av | 国产精品爱久久久久久久 | 日韩视频在线一区二区 | 狠狠干狠狠操 | 欧美久久电影 | 91精品国产91久久久 | 成人av一区二区亚洲精 | 午夜视频一区 | 国产精品精品视频一区二区三区 | 中文字幕在线网 | 欧美日韩国产高清 | 玖玖综合网| 久久不卡| 国产丝袜一区二区三区免费视频 | 日本不卡在线观看 | 波多野结衣在线观看一区二区三区 |