機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
MSP430驅(qū)動(dòng)12864-3圖形點(diǎn)陣液晶(KS0108)
MSP430驅(qū)動(dòng)12864-3圖形點(diǎn)陣液晶(KS0108)
 更新時(shí)間:2009-12-7 16:44:28  點(diǎn)擊數(shù):0
【字體: 字體顏色
#include <MSP430x14x.h>
//***************數(shù)據(jù)類型定義****************************
#define uint unsigned int
#define uchar unsigned char
//***************液晶控制線定義****************************
#define    RS          BIT1       //P3.1
#define    RW          BIT0       //P3.0
#define    E           BIT7       //P2.7
#define    CS1         BIT3       //P3.3
#define    CS2         BIT2       //P3.2
#define    RST         BIT1       //P2.1
//數(shù)據(jù)線:p4口
//**************漢字定義為16*16,縱向,大小10,D0--D7 ,字體 Times NewRoman**************
const unsigned char code1[]={64,66,66,66,254,66,66,66,66,254,66,67,98,64,0,0,32,32,16,8,7,0,0,0,0,63,0,0,0,0,0,0};//開
const unsigned char code2[]={8,8,248,15,8,248,32,48,44,35,32,40,48,96,0,0,32,17,10,4,10,17,0,63,17,17,17,17,63,0,0,0};//始
const unsigned char code3[]={8,8,136,255,72,72,4,4,4,4,252,4,6,4,0,0,1,17,32,31,0,0,0,0,16,32,31,0,0,0,0,0};//打
const unsigned char code4[]={0,252,68,68,66,67,2,0,252,4,4,4,252,0,0,0,0,15,8,4,4,2,2,0,63,0,2,4,3,0,0,0};//印
const unsigned char code5[]={4,4,132,196,52,12,23,20,20,212,52,20,6,4,0,0,2,1,0,63,0,1,1,17,33,31,1,1,1,1,0,0};//存
const unsigned char code6[]={64,32,248,7,64,204,32,40,168,255,168,176,172,32,0,0,0,0,63,0,0,31,10,1,63,20,20,20,63,0,0,0};//儲(chǔ)
const unsigned char code7[]={16,97,134,64,254,2,250,2,254,0,252,0,255,0,0,0,2,62,1,32,19,8,7,8,51,0,19,32,31,0,0,0};//測
const unsigned char code8[]={0,32,32,190,170,170,170,170,170,170,170,191,34,32,0,0,0,32,40,47,42,42,42,63,42,42,42,47,40,32,0,0};//量
const unsigned char code9[]={32,33,230,0,128,136,136,255,136,136,255,136,136,136,0,0,16,8,7,8,16,40,36,35,32,32,47,32,32,32,0,0};//進(jìn)
const unsigned char code10[]={16,136,68,227,24,32,34,34,34,34,226,35,50,32,0,0,1,0,0,63,0,0,0,0,16,32,31,0,0,0,0,0};//行
const unsigned char code11[]= {0,248,8,8,8,8,255,8,8,8,8,252,8,0,0,0,0,1,1,1,1,1,63,1,1,1,1,1,0,0,0,0};//中
const unsigned char code12[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,0,0,0};//點(diǎn)

const unsigned char code100[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32};//線
//******************函數(shù)聲明*******************************
void Init_Clock(void);
void Init_IO(void);
void Init_LCD (void);
void delay (uint us);
void delayl(uint ms);
void WriteCommand_L (uchar com1);
void WriteCommand_R (uchar com2);
void WriteData_L (uchar dat1);
void WriteData_R(uchar dat2);
void ClearScreen(void);
void AllScreen(void);
void StateCheck(void);
void WriteWord(uchar colum,uchar  page, const uchar *code);
void DrawLine(void);
//*************系統(tǒng)主程序**********************************
void main( void )
{
 WDTCTL=WDTPW+WDTHOLD;  //關(guān)閉看門狗
 Init_Clock();
 Init_IO();
Init_LCD ();

WriteWord(0,6, code1);
WriteWord(16, 6, code2);
WriteWord(48, 6, code3);
WriteWord(64, 6, code4);
WriteWord(96,6, code5);
WriteWord(112, 6, code6);

WriteWord(16, 2, code7);
WriteWord(32, 2, code8);
WriteWord(48, 2, code9);
WriteWord(64, 2, code10);
WriteWord(80, 2, code11);
WriteWord(96, 2, code12);
DrawLine();
}

//**********************IO初始化***************************
void Init_IO(void)
{
  P1DIR=0;           //設(shè)置為輸入
  P1SEL=0;           //設(shè)置為一般IO
  P1OUT=0X00;

  P2DIR=0;
  P2SEL=0;
  P2OUT=0X00;

  P3DIR=0;
  P3SEL=0;
  P3OUT=0X00;

  P4DIR=0;
  P4SEL=0;
  P4OUT=0X00;

  P5DIR=0;
  P5SEL=0;
  P5OUT=0X00;

  P6DIR=0;
  P6SEL=0;
  P6OUT=0X00;
}

//*****************高頻時(shí)鐘初始化**************************
void Init_Clock(void)
{
//UTCTL1 = SSEL0;
 // BCSCTL1=0X00;
   //BCSCTL2=0X00;
   unsigned int iq0;

   BCSCTL1&=~XT2OFF;                 //打開XT2振蕩器
   do
   {
   IFG1 &= ~OFIFG;                   // 清除振蕩器失效標(biāo)志
   for (iq0 = 0xFF; iq0 > 0; iq0--); // 延時(shí),等待XT2起振
   }
   while ((IFG1 & OFIFG) != 0);   // 判斷XT2是否起振

  BCSCTL2=SELM_2+SELS;          //選擇MCLK、SMCLK為XT2,
  BCSCTL2|=DIVM_2;              //MCLK 4分頻 MCLK=2MHZ
  BCSCTL2|=DIVS_2;              //SMCLK 4分頻 SMCLK=2MHZ
}

//***************延時(shí)子程序******************************
void delay (uint us)
{
  while(us--);
}
void delayl (uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<1000;j++)
  ;
}

//*****************狀態(tài)檢查*********************************
void StateCheck(void)
{ uchar  cradd1;
  P3OUT&=~RS;
  P3OUT|=RW;        //RS=0,R/W=1,以便讀液晶狀態(tài)
  P4DIR=0x00;       //P4口為輸入口
   do
    {
     P2OUT|=E;        //E=1
     cradd1=P4IN;
     P2OUT&=~E;       //E=0
     }
   while((cradd1&0x80)!=0);
}

//***************寫指令代碼子程序(左)*******************
void WriteCommand_L (uchar com1)
{       P3OUT&=~CS1;       //cs1=0
        P3OUT|=CS2;       //cs2=1   選擇左半屏
        StateCheck();     //檢查是否忙

         P3OUT&=~RW;    //rw=0
         P4DIR=0xff;    //P4口為輸出口

         P4OUT=com1;
         P2OUT|=E;       //E=1
         P2OUT&=~E;      //E=0
}

//*****************寫指令代碼子程序(右)*******************
void WriteCommand_R (uchar com2)
{        P3OUT|=CS1;       //cs1=1
        P3OUT&=~CS2;       //cs2=0
        StateCheck();     //檢查是否忙

         P3OUT&=~RW;    //rw=0
         P4DIR=0xff;    //P4口為輸出口

         P4OUT=com2;
         P2OUT|=E;       //E=1
         P2OUT&=~E;      //E=0
}

//****************寫顯示數(shù)據(jù)子程序(左)**********************
void WriteData_L (uchar dat1)
{
         P3OUT&=~CS1;       //cs1=0
         P3OUT|=CS2;        //cs2=1
        StateCheck();     //檢查是否忙
        P3OUT|=RS;         //rs=1
        P3OUT&=~RW;        //rw=0
        P4DIR=0xff;       //P4口為輸出口
        P4OUT=dat1;
        P2OUT|=E;      //E=1
        P2OUT&=~E;     //E=0
     }
//****************寫顯示數(shù)據(jù)子程序(右)**********************
void WriteData_R(uchar dat2)
{
        P3OUT|=CS1;       //cs1=1
        P3OUT&=~CS2;      //cs2=0
        StateCheck();     //檢查是否忙
        P3OUT|=RS;         //rs=1
        P3OUT&=~RW;        //rw=0
        P4DIR=0xff;       //P4口為輸出口
        P4OUT=dat2;
        P2OUT|=E;      //E=1
        P2OUT&=~E;     //E=0
}

//******************清屏 ************************
void ClearScreen(void)
{      uchar i,j;
       for(i=0;i<8;i++)
       {   WriteCommand_L(i|0xb8);      //設(shè)置頁地址
           WriteCommand_R(i|0xb8);
           WriteCommand_L(0x40);       //設(shè)置列地址
           WriteCommand_R(0x40);
           for(j=0;j<64;j++)        //寫0x00
             { WriteData_L(0x00);
               WriteData_R(0x00);
             }
       }
}

//******************滿屏 ************************
void AllScreen(void)
{      uchar i,j;
       for(i=0;i<8;i++)
       {   WriteCommand_L(i|0xb8);      //設(shè)置頁地址
           WriteCommand_R(i|0xb8);

           WriteCommand_L(0x40);       //設(shè)置列地址
           WriteCommand_R(0x40);
           for(j=0;j<64;j++)        //寫0xff
             { WriteData_L(0xff);
               WriteData_R(0xff);
             }
       }
}
//****************LCD初始化******************************
void Init_LCD (void)
{
   P2DIR|=BIT1;       //P2.7為輸出口
   P2OUT&=~RST;       //RST=0,LCD復(fù)位
   delayl(50);         //延時(shí)
   P2OUT|=RST;        //rst=1
   delayl(50);
   P3DIR|=BIT3;       //P3.3為輸出口
   P3OUT&=~CS1;        //CS1=0

   P3DIR|=BIT2;       //P3.2為輸出口
   P3OUT&=~CS2;        //CS2=0

   P3DIR|=BIT1;       //P3.1為輸出口
   P3OUT&=~RS;         //RS=0

   P3DIR|=BIT0;       //P3.0為輸出口
   P3OUT&=~RW;         //RW=0

   P2DIR|=BIT7;       //P2.7為輸出口
   P2OUT&=~E;          //E=0

    WriteCommand_L(0xc0);WriteCommand_R(0xc0);   //顯示開始行
    WriteCommand_L(0x3f);WriteCommand_R(0x3f);   //開顯示
    ClearScreen();
}
//***********************寫漢字*********************************
void WriteWord (uchar colum,uchar  page, const uchar *code)//page2:頁  colum2:列    code2:字代碼
{
  uchar i,j,colum0;
  uchar flag;

    for(j=0;j<2;j++)
    {    WriteCommand_L(page|0xb8);         //頁
         WriteCommand_R(page|0xb8);
         colum0=colum;
         if(colum0>63)                   //右屏
           { colum0=colum0-64;
                       WriteCommand_R(colum0|0x40);
                       flag=1;
            }
         else                           //左屏
           {
             WriteCommand_L(colum0|0x40);
             flag=0;
            }
       //*********************
        for(i=0;i<16;i++)
            {
               if(flag==0)
                  {
                     WriteData_L(*code);
                   }
               else
                  {
                    WriteData_R(*code);
                  }
                code++;
                    if(colum0==64)      //列=64
                       {
                          colum0=0;
                           if(flag==0)
                             {
                               flag=1;
                               WriteCommand_R(colum0|0x40);
                              }
                            else
                              {
                                 break;
                              }
                        }
             // colum++;
            }
      page++;
    }
}
//*******************畫線*********************************
void DrawLine(void)
{
 uchar i,j=0;
  for(i=0;i<8;i++)
  {
    WriteWord(j,4,code100);
    j+=16;
  }
}

調(diào)試日記:8月19日;
出現(xiàn)問題:液晶無法正常顯示。
找到原因:
 1、12864-3(KS0108)出廠設(shè)置為5V供電,可3V供電,需改焊控制板上的兩個(gè)焊盤。
2、外接10K可調(diào)電阻(用于背光調(diào)節(jié))沒有正確調(diào)節(jié)。
解決辦法:
1、更改液晶板上的供電系統(tǒng),將電源端由5V改焊到3V的通路上(此為改更液晶背面的控制板,而非單片機(jī)電路。)
 2、調(diào)節(jié)10K可調(diào)電阻,使1、2端之間電阻(即接入電路中的電阻)大約在8K左右,這時(shí)對(duì)比度正常。
  • 上一篇: 充分利用MSP430的FLASH儲(chǔ)存空間
  • 下一篇: 沒有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1