娇小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-跑馬燈程序,熟悉定時器寄存器的配置

推薦閱讀

  近日據外媒GSMArena統計,自2010年以來,智能手機電池續航能力翻了一番。GSMArena統計了一個對電池進行的更可靠測試,統計結果顯示,每年智能手機電池耐力評級都會增長,2010年每部手機平均通話時間市場是40小時,到了2017年,這個成績超過了75小時,幾乎翻番。下面就隨電源管理小編一起來了解一下相關內容吧。?自2010年以來 智能手機電池續航能力翻...
近日,美國司法部對華為公司及其副董事長、首席財務官孟晚舟等提出起訴,中方則再次敦促美方立即撤銷對孟晚舟女士的逮捕令。一場牽動萬千國人心的拘捕事件,其源頭便是5G技術。5G究竟有多重要?作為一個支持下一代數字應用的技術,5G能為未來的智慧城市和數字經濟提供動力。在解決諸多技術、政治和政策挑戰方面,獲得先發優勢并成功采用5G網絡的國家,很可...
1. S3C2440內部LCD控制器結構圖:我們根據數據手冊來描述一下這個集成在S3C2440內部的LCD控制器:a:LCD控制器由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄存器組成;b:REGBANK由17個可編程的寄存器組和一塊256*16的調色板內存組成,它們用來配置LCD控制器的;c:LCDCDMA是一個專用的DMA,它能自動地把在偵內存中的視頻數據傳送到LCD驅動器,通過使用這個DMA...
英飛凌技術公司正在與德國的五個研究所合作,使用基于離子阱的超導量子位構建量子處理器,該離子阱可以轉化為產品。 這項耗資1450萬歐元的“基于超導量子位的德國量子計算機”(German Quantum Computer based on Superconducting Qubits:GeQCoS)項目旨在在未來四年內開發出原型芯片。這是慕尼黑“量子谷”的一部分,該谷將在未來三年內由巴伐利亞自...

史海拾趣

問答坊 | AI 解惑

2007年度電子行業薪酬調查報告

2007年度61Job中國電子行業薪酬調查報告 通過對不同地區和行業,不同學歷和工作職責,相似性質、規模的企業的薪酬水平、薪酬結構、薪酬價值取向等調查發現: 1、中國電子工程師平均年薪為人民幣49106元,公司戰略管理層的平均薪酬收入最高, ...…

查看全部問答∨

請教:windows下PCI卡的DMA傳輸問題

本人最近在Windows下用Tiger320芯片來寫一個PCI卡的通信驅動程序,使用到了Tiger320的DMA傳輸,現遇到一些問題,望各位大俠賜教: 問題描述:在對硬件及DMA初始化完成后,啟動DMA,此時未進行任何讀寫操作,可是讀寫中斷信號就一直的發個不停,不 ...…

查看全部問答∨

wince 錄音問題

最近用wm9712做了一個錄音,搞了一個測試程序,在 if (waveInOpen(&m_hWaveIn,WAVE_MAPPER,&m_WaveFormatEx,(DWORD)WaveInProc,NULL,CALLBACK_FUNCTION) != MMSYSERR_NOERROR )         {         &nbs ...…

查看全部問答∨

DM9000A網絡芯片中斷腳INT無輸出信號

代碼用的是Uboot的dm9000x驅動,按照需要做了適當修改。初始化函數如下: /* Initilize dm9000 board */ int eth_init( const char *ps_mac ) {         int i, oft, lnk;     unsigned char u8_byte = 0;   & ...…

查看全部問答∨

單片機時鐘誤差怎么改正

晶振為12MHZ  方式0 TH為D8F0 中斷100次為1s 測試了11小時13分07秒      誤差為3分11秒 那么TH改為多少比較準確點呢??怎么算的!…

查看全部問答∨

傳感器

本帖最后由 paulhyde 于 2014-9-15 09:10 編輯 相信對大賽肯定有用的。  …

查看全部問答∨

請教IAR下函數指針的使用問題,

拿到了團購的板子了??!高興下!~~嘻嘻。剛才在跑官方的這段例程://   MSP430G2xx1 Demo - Reset on Invalid Address fetch, Toggle P1.0////  Description: Toggle P1.0 by xor\'ing P1.0 inside of a software loop that//  ends ...…

查看全部問答∨

休眠模式的推出問題!

小弟在做一個項目,按鍵長按5s以后,我給LEDOnOff一個SWITCHOFF的值,SWITCHOFF是定義的枚舉類型,然后執行下面的程序進入休眠模式,可是再通過按鍵無法喚醒系統,請問下是為什么呢?(最下面是port的中斷程序) void Task_LEDonoff(void){&nb ...…

查看全部問答∨

求建議繪圖儀算法

能介紹一些畫圖常用的算法么?謝謝高手了~…

查看全部問答∨

【朱兆祺帶你學嵌入式】第三章第一節 初步測試內核

內核的移植相對復雜,不可能一步到位,心急吃不了熱豆腐,我們只有步步為營,方能步步為贏。本節的目的是修改內核,使得Linux-3.8.3內核適應于OK6410開發平臺。外設的移植,在接下來的章節會一步一步完成。1.1.1   mkimage工具制作Linux ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 三门县| 颍上县| 右玉县| 上杭县| 乌恰县| 获嘉县| 浠水县| 安康市| 安丘市| 从化市| 刚察县| 甘孜| 南陵县| 高要市| 南投县| 赤城县| 永济市| 肇东市| 天台县| 巨鹿县| 五寨县| 南华县| 日土县| 凉山| 芦山县| 云南省| 宁明县| 临汾市| 黄骅市| 新乐市| 和静县| 安阳县| 高要市| 山阴县| 翁源县| 娄烦县| 永昌县| 甘洛县| 来凤县| 洞头县| 江津市|