娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月02日(星期日)

2020年02月02日 | MSP430學習筆記8-ST7920 12864液晶顯示并行接口

發布者:rocky96 來源: eefocus關鍵字:MSP430  ST7920  12864液晶顯示  并行接口 手機看文章 掃描二維碼
隨時隨地手機看文章

ST7920較為常見,由于自帶字庫使用較為方便。下面的這個程序是根據開發板上的例程做適當修改而來,總的來說較為簡單,對著ST7920的DATASheet看一下時序和指令集就能明白。驅動程序如下:

#include

typedef unsigned char uchar;

typedef unsigned int  uint;


extern const unsigned char shuzi_table[];


#define LCD_DataIn    P4DIR=0x00    //數據口方向設置為輸入

#define LCD_DataOut   P4DIR=0xff    //數據口方向設置為輸出

#define LCD2MCU_Data  P4IN

#define MCU2LCD_Data  P4OUT

#define LCD_CMDOut    P3DIR|=0x07     //P3口的低三位設置為輸出

#define LCD_RS_H      P3OUT|=BIT0      //P3.0

#define LCD_RS_L      P3OUT&=~BIT0     //P3.0

#define LCD_RW_H      P3OUT|=BIT1      //P3.1

#define LCD_RW_L      P3OUT&=~BIT1     //P3.1

#define LCD_EN_H      P3OUT|=BIT2      //P3.2

#define LCD_EN_L      P3OUT&=~BIT2     //P3.2


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

函數名稱:Delay_1ms

功    能:延時約1ms的時間

參    數:無

返回值  :無

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

void Delay_1ms(void)

{

uchar i;

    

for(i = 150;i > 0;i--)  _NOP();

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

函數名稱:Delay_Nms

功    能:延時N個1ms的時間

參    數:n--延時長度

返回值  :無

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

void Delay_Nms(uint n)

{

    uint i;

    

    for(i = n;i > 0;i--)    Delay_1ms();

}

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

函數名稱:Write_Cmd

功    能:向液晶中寫控制命令

參    數:cmd--控制命令

返回值  :無

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

void Write_Cmd(uchar cmd)

{

    uchar lcdtemp = 0;

    LCD_RS_L;

    LCD_RW_H;

    LCD_DataIn;  

    do                       //判忙

    {    

        LCD_EN_H;

        _NOP();

        lcdtemp = LCD2MCU_Data; 

        LCD_EN_L;

        

    }

    while(lcdtemp & 0x80); 

    

    LCD_DataOut;    

    LCD_RW_L; 

    MCU2LCD_Data = cmd; 

    LCD_EN_H;

    _NOP();  

    LCD_EN_L;

}

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

函數名稱:Write_Data

功    能:向液晶中寫顯示數據

參    數:dat--顯示數據

返回值  :無

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

void  Write_Data(uchar dat)

{

    uchar lcdtemp = 0;   

        

    LCD_RS_L;

    LCD_RW_H;  

    LCD_DataIn;   

    do                       //判忙

    {    

        LCD_EN_H;

        _NOP();

        lcdtemp = LCD2MCU_Data; 

        LCD_EN_L;      

    }

    while(lcdtemp & 0x80);  

    

    LCD_DataOut; 

    LCD_RS_H;

    LCD_RW_L;  

        

    MCU2LCD_Data = dat;

    LCD_EN_H;

    _NOP();

    LCD_EN_L;

}  

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

函數名稱:Ini_Lcd

功    能:初始化液晶模塊

參    數:無

返回值  :無

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

void Ini_Lcd(void)

{                  

    LCD_CMDOut;    //液晶控制端口設置為輸出

    

    Delay_Nms(500);

    Write_Cmd(0x30);   //基本指令集

    Delay_1ms();

    Write_Cmd(0x02);   // 地址歸位

    Delay_1ms();

Write_Cmd(0x0c);   //整體顯示打開,游標關閉

    Delay_1ms();

Write_Cmd(0x01);   //清除顯示

    Delay_1ms();

Write_Cmd(0x06);   //游標右移

    Delay_1ms();

Write_Cmd(0x80);   //設定顯示的起始地址

}

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

函數名稱:Clear_LCD

功    能:清屏

參    數:無

返回值  :無

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

void Clear_LCD(void)

{                 

    Write_Cmd(0x01);   

}

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

函數名稱:Set_XY

功    能:設置顯示的位置

參    數:x--行

          y--列

返回值  :無

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

void Set_XY( uchar x, uchar y )

{  

  uchar address;

  switch (x) 

{

case 0 :  address=0x80+y;   break;

case 1 :  address=0x90+y;   break;

case 2 :  address=0x88+y;   break;

case 3 :  address=0x98+y;   break; 

default:  address=0x80+y;   break;

}

Write_Cmd(address);

}

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

函數名稱:Disp_HZ

功    能:控制液晶顯示漢字

參    數:addr--顯示位置的首地址

          pt--指向顯示數據的指針

          num--顯示字符個數

返回值  :無

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

void Disp_HZ(uchar addr,const uchar * pt,uchar num)

{

    uchar i;

    Write_Cmd(addr); 

    for(i = 0;i < (num*2);i++) 

        Write_Data(*(pt++)); 

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

函數名稱:Disp_XY

功    能:控制液晶顯示漢字

參    數:addr--顯示位置的首地址

          pt--指向顯示數據的指針

          num--顯示字符個數

返回值  :無

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

void Disp_XY(uchar x,uchar y,const uchar *pt)

{

    Set_XY(x,y);

    while (*pt)

    {

      Write_Data(*pt);

      pt++;

    }

}

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

函數名稱:Clear_GDRAM

功    能:清除液晶GDRAM中的隨機數據

參    數:無

返回值  :無

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

void Clear_GDRAM(void)

{

    uchar i,j,k;

    

Write_Cmd(0x34);        //打開擴展指令集

i = 0x80;            

for(j = 0;j < 32;j++)

{

        Write_Cmd(i++);

        Write_Cmd(0x80);

  for(k = 0;k < 16;k++)

  {

      Write_Data(0x00);

  }

}

i = 0x80;

  for(j = 0;j < 32;j++)

{

      Write_Cmd(i++);

        Write_Cmd(0x88);    

  for(k = 0;k < 16;k++)

  {

        Write_Data(0x00);

    } 

}   

Write_Cmd(0x30);        //回到基本指令集

}

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

函數名稱:Draw_PM

功    能:在整個液晶屏幕上畫圖

參    數:無

返回值  :無

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

void Draw_PM(const uchar *ptr)

{

    uchar i,j,k;

    

Write_Cmd(0x34);        //打開擴展指令集

i = 0x80;            

for(j = 0;j < 32;j++)

{

        Write_Cmd(i++);

        Write_Cmd(0x80);

  for(k = 0;k < 16;k++)

  {

      Write_Data(*ptr++);

  }

}

i = 0x80;

  for(j = 0;j < 32;j++)

{

      Write_Cmd(i++);

        Write_Cmd(0x88);    

  for(k = 0;k < 16;k++)

  {

        Write_Data(*ptr++);

    } 

}  

    Write_Cmd(0x36);        //打開繪圖顯示

Write_Cmd(0x30);        //回到基本指令集

}

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

函數名稱:Draw_TX

功    能:顯示一個16*16大小的圖形

參    數:Yaddr--Y地址

          Xaddr--X地址

          dp--指向圖形數據存放地址的指針

繪圖的坐標X以字節為單位,Y以位為單位

初始坐標 0x80,0x80

繪圖時需要將YX的坐標連續寫入RAM,寫入期間繪圖必須關閉

返回值  :無

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

void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp) 

{

    uchar j;

    uchar k=0;

 

    Write_Cmd(0x01);  //清屏,只能清除DDRAM

    Write_Cmd(0x34);  //使用擴展指令集,關閉繪圖顯示

    for(j=0;j<16;j++)

    {

        Write_Cmd(Yaddr++);       //Y地址

  Write_Cmd(Xaddr);    //X地址

  Write_Data(dp[k++]);  

  Write_Data(dp[k++]);

    }

    Write_Cmd(0x36);  //打開繪圖顯示

    Write_Cmd(0x30);  //回到基本指令集模式

}


程序中只包含了基本的顯示和畫圖功能,使用起來較為簡單,其他的劃線反白等功能也可以通過畫圖來實現,以后再繼續研究,對應的主程序例程如下:

#include

#include "LCD12864P.h"

#include "hohai.h"

unsigned char title[]="河海大學";

unsigned char flag;

int main( void )

{

    /*下面六行程序關閉所有的IO口*/

    P1DIR = 0XFF;P1OUT = 0XFF;

    P2DIR = 0XFF;P2OUT = 0XFF;

    P3DIR = 0XFF;P3OUT = 0XFF;

    P4DIR = 0XFF;P4OUT = 0XFF;

    P5DIR = 0XFF;P5OUT = 0XFF;

    P6DIR = 0XFF;P6OUT = 0XFF;

  

    WDTCTL = WDTPW + WDTHOLD;            //關閉看門狗

    P6DIR |= BIT2;P6OUT |= BIT2;         //關閉電平轉換

    

    TACTL = TASSEL_1 + MC_1;             //計數時鐘ACLK, 增計數模式

    CCR0 = 32768 - 1;

    CCTL0 |= CCIE;                       //使能CCR0比較中斷

    _EINT(); 

    

    Ini_Lcd();                            //顯示文字

    Draw_PM(hohai);

    

    Draw_TX(0x81,0x81,speaker);

    

    flag = 0;

    while(flag < 5);                    //等待5秒鐘

[1] [2]
關鍵字:MSP430  ST7920  12864液晶顯示  并行接口 引用地址:MSP430學習筆記8-ST7920 12864液晶顯示并行接口

上一篇:MSP430學習筆記10-ADC采集1602顯示
下一篇:MSP430學習筆記2-跑馬燈程序,熟悉定時器寄存器的配置

0

推薦閱讀

應用機器人焊接后,大大提高了焊接件的外觀和內在質量,并保證了質量的穩定性和降低勞動強度,改善了勞動環境。國外汽車工業機器人激光焊接技術的應用機器人控制系統是機器人的大腦,是決定機器人功能和性能的主要因素。工業機器人控制技術的主要任務就是控制工業機器人在工作空間中的運動位置、姿態、軌跡、操作順序及動作的時間等,具有編程簡單、軟件菜...
機器換人正在從制造業擴展到其它領域,例如物流配送,隨著人口紅利的下降,越來越多的企業盯緊了智能配送這一塊“肥肉”,想在這廣大的市場中分一杯羹。配送機器人在配送途中,激光雷達可以對配送距離進行精確的測量、對配送空間進行精準定位、還能對道路中的障礙物進行可靠檢測,尤其是當配送機器人在擁堵、狹窄的交通道路、小區和停車場等特殊的場景中進...
無線技術進入嵌入式系統后,使得測試與測量工作變得越來越復雜,一個系統的高效調試和故障查詢往往需要多臺測試設備來完成,這也使得測試工具的費用越來越昂貴,集成式多合一示波器對設計工程師來講極具吸引力。日前,泰克公司(Tektronix)推出MDO3000系列混合域示波器。泰克公司時域業務部總經理Mike Flaherty表示,MDO3000中包括了示波器、頻譜分析儀...
時間回到2016年,當蘋果四處挖掘汽車相關工程師、在德國柏林秘密設立研發實驗室、隱退的硬件高管再度出山等與研發汽車相關的消息大量出現的時候,果粉們和車迷們著實激動了一陣,對蘋果的汽車也非常期待,當時還有熱衷人士,繪制出了想象中的蘋果汽車效果圖。 而在2017年的6月份,蘋果CEO庫克在接受采訪時,首度松口承認他們正專注于自動駕駛系統,坐實了...

史海拾趣

問答坊 | AI 解惑

一個PCB的簡單問題

問題: 我的PCB中有很多封裝0805的貼片電阻,電容,是應該 貼在BOTTOMLAYER的,后來發現那個下層貼片的標號在上層還是能看到,我就把標號全都改成了Bottomoverlayer的,結果發現在底層也看不到標號了,想恢復都不知道點什么了,我暈了,干了一天的活不 ...…

查看全部問答∨

開關電源研發范例

讓你的水平不一般…

查看全部問答∨

你有沒有自認為的最好設計?

看了leang521的一個話,有些感觸, 你認為的最好設計對于某些人可能是最差設計。并行IO并不能達到IO最優化,而且還會產生諸如多復合鍵問題。而對于一些成本敏感設計,多個IO可能導致全部設計失敗。所以最合適的才是最好的。 你有沒有認為的最好 ...…

查看全部問答∨

怎么編寫 同一個接口上 的 多個設備驅動?

請教大家一個問題,請大家幫幫忙。     我在使用的是WINCE5.0,硬件上只有一個I2C接口,掛接了4個設備(I2C支持很多個從設備)。     其中包括一個電源管理芯片,一個IO擴展,一個A/D轉換,還有一個EEPROM。     ...…

查看全部問答∨

wince自帶的inbox要加哪些主件

求助,如題,望各位大俠不吝賜教。我用CE的PND用USB連到PC上,想通過CE自帶的INBOX讀取郵件,可以肯定PC和PND是連接的,我設置好INBOX后確無法和PC的郵箱連接上。不知有沒有哪位大俠用過WINCE自帶的INBOX,還望指點。…

查看全部問答∨

關于USBISP下載線的問題

    手頭有塊atmega128的開發板,具備一些常見的開發板功能,如LED,數碼管,峰鳴器,AD之類的,這塊板子本身自帶的下載程序接口是串口(RS232)的,所用的燒寫軟件是avr studio,燒寫方式是STK-500。     現在準備自制一個US ...…

查看全部問答∨

協同效果最佳的合并-MicroSemi收購Actel

XILINX的朋友三點打來電話說,十天前,半導體產業再次傳出并購案,動力管理半導體生產商MicroSemi以大約4.3億美元的價格收購Actel。這件案子在發生之前,產業界似乎是一點動靜也沒有,至少在中國大陸,是完全沒有風聲傳出的,可見得雙方在這件事的 ...…

查看全部問答∨

STM32的FLASH可以跑到72MHZ嗎???

                                  …

查看全部問答∨

關于STM32中IAR環境下如何包含C++頭文件及中斷函數問題

目前Cortex M3的兩種MCU主要有STM32和LM3S系列.它們都可以在IAR環境下用C++編寫程序,但略有差異.由于Cortex M3的中斷函數和其他MCU/ARM/DSP不同,它實際是一個普通函數.它們在IAR環境下的中斷向量表用C的數組表示很有特點,不像以往都 ...…

查看全部問答∨
小廣播
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 衡东县| 镇康县| 张家港市| 甘德县| 监利县| 石首市| 郯城县| 酉阳| 马关县| 万全县| 巫山县| 长子县| 阿图什市| 鲁山县| 柞水县| 襄城县| 澜沧| 黄石市| 合阳县| 大丰市| 翁源县| 彭阳县| 汪清县| 宜阳县| 余庆县| 化德县| 资溪县| 壤塘县| 南开区| 周口市| 若尔盖县| 延寿县| 海城市| 五河县| 栾川县| 苍山县| 济宁市| 罗山县| 漳州市| 孟州市| 临沭县|