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

MSP430學習筆記8-ST7920 12864液晶顯示并行接口

發布者:rocky96最新更新時間:2020-02-02 來源: 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-跑馬燈程序,熟悉定時器寄存器的配置

推薦閱讀最新更新時間:2025-05-28 07:22

LCD12864 液晶顯示器 模塊化程序
/********************** lcd12864.h 頭文件 **********************/ #ifndef _LCD12864_H_ #define _LCD12864_H_ extern void lcd12864_busy(); //忙標志函數 extern void led12864_clear();//清屏 extern void lcd12864_init(); //初始化函數 extern void lcd12864_pxy(unsigned char p,unsigned char x,unsigned char y);//數據的顯示位置,p=0左半屏,p=1右半屏,p
[單片機]
LCD<font color='red'>12864</font> <font color='red'>液晶顯示</font>器 模塊化程序
單片機驅動DS1302時間DS18B20溫度12864液晶顯示完整程序設計
程序說明:這是一個用51單片機驅動DS1302時間模塊+DS18B20溫度傳感器模塊+12864液晶顯示完整程序設計實例,有四個鍵盤KEY0 到KEY3,key0是修改時間的 首先是秒到分到時到年到月到日到星期 key1是加1 key2是減一 在修改時間狀態再按一下key3的時候就出去并修改時間日期,在平時狀態按著key3再按著key2 就會打開lcd 的燈 單單是只按key3那就是把燈關了。 文件一:DS1302驅動.c #include reg52.h //ds1302 sbit sclk=P0^3; sbit io=P0^4; sbit rst=P0^5; sbit acc0=ACC^0; sbit acc1=ACC^
[單片機]
MSP430 CCS 支持printf
右鍵工程 選擇屬性 我的ccs已經有些是漢化了的漢化教程看這里 CCS 漢化 設置中文 再次編譯就不會報printf的錯誤
[單片機]
<font color='red'>MSP430</font> CCS 支持printf
MSP430F5529基于CCS庫函數開發——軟件安裝與庫函數配置
前言 通過MSP430官方的函數庫進行開發,開發工具使用CCS。主要步驟如下: 1、下載并安裝CCS 2、下載函數庫 3、部署函數庫 1、下載并安裝CCS CCS是由美國德州儀器公司(Texas Instrument,TI)出品的代碼開發和調試套件,具體的可以自行去百度,直接到官網下載安裝即可。 下載完成后解壓即可,右擊以管理員身份運行其中的可執行文件。 安裝就是傻瓜式安裝就不貼出來了。 安裝完成后首先選擇自己的一個工作空間,可以理解為放代碼的倉庫地址。 新建CCS項目 選擇芯片型號,填寫工程名稱,選擇main模板 這樣就創建好了默認的工程文件 2、下載函數庫 直接進入官網下載即可,同時可以下載一下指南 解壓
[單片機]
<font color='red'>MSP430</font>F5529基于CCS庫函數開發——軟件安裝與庫函數配置
基于MSP430F449的數據存儲和USB串行通信實現
在數據采集和測量儀器尤其是便攜式設備中,數據存儲和傳輸是不可避免的問題,近年來TI公司推出的低功耗微控制器MSP430,在儀器設計和制造領域引起巨大變革,新型控制器和大容量串行存儲器的應用大大提高產品了的性能。本文主要解決兩個問題 1 解決經過MSP430采集后的數據與EEPROM24C256的數據接口問題,也就是數據存儲問題; 2 解決EEPROM與上位機(普通微機)的數據通信問題,也就是存儲后的數據上傳問題。 首先對主要的集成電路做簡單介紹 MSP430F449簡介 MSP430F449是MSP430系列中的一種,MSP430系列是一種具有集成度高,功能豐富、功耗低等特點的16位單片機。它的集成調試環境Em
[單片機]
基于<font color='red'>MSP430</font>F449的數據存儲和USB串行通信實現
一文了解msp430單片機的存儲器組織
一般,在單片機中的Flash存儲器用于存放程序代碼,屬于只讀型存儲器。而在MSP430些列的單片機中,都可以通過內置的Flash控制器擦除或改寫任何一段的內容。另外,msp430的單片機內部還專門留有一段Flash區域(information memory),用于存放掉電后需要永久保存的數據。利用430內部的Flash控制器,可以完成較大容量的數據記錄、用戶設置參數在掉電后的保存等功能。 硬件介紹: 要對Flash讀寫,首先要了解MSP430的存儲器組織。430單片機的存儲器組織結構采用馮諾依曼結構,RAM和ROM統一編址在同一尋址空間中,沒有代碼空間和數據空間之分。 一般430的單片機都統一編址在0-64k地址范圍中
[單片機]
一文了解<font color='red'>msp430</font>單片機的存儲器組織
MSP430F5438A Timer_A 操作實驗
簡介: 1,學會在比較和捕獲模式下操作 Timer_A,熟練對寄存器進行配置 2,編程實現 Timer_A 定時 3,功能:Timer_A 在 TAR 計數相同間隔定時,當每次定時到來 LED1 亮(滅) 4,現象:LED1 相同頻率閃爍 1,定時器 A 介紹: 定時器 A是一個十六位的定時/計數器,其捕獲/比較寄存器多達七個。定時器 A 支持支持多重捕獲/比較,PWM 輸出和內部定時。定時器還有擴展中斷功能,中斷可以由定時器溢出產生或由捕獲/比較寄存器產生。 定時器 A的特性包括: ○四種運行模式的異步 16 位定時/計數器 ○可選擇配置的的時鐘源 ○多達七個可配置的捕獲/比較寄存器 ○可配置的 PW
[單片機]
<font color='red'>MSP430</font>F5438A Timer_A 操作實驗
基于MSP430自動脹管控制器的研發
脹管機是針對冷凝器、冷油器、加熱器、換熱器中各類管材與管板脹接需要而設計開發的一種專用設備。其控制器的基本原理是用驅動電機(又稱驅動馬達、脹管機頭)的工作電流來標定所加載的負荷,即驅動電機在一定的工作電流值下,提供相當數量的扭矩,而與之相當數量的扭矩可以通過旋轉脹管器產生一定的膨脹量(脹力),它是可以被測量的。因此,通過精確測量并控制驅動馬達的工作電流值,就可獲得并控制所需要的膨脹量(脹力)。 目前,市場上大多數的脹管機采用51單片機,但其缺點比較突出。如內部無存儲器,必需外接Flash或EPROM存儲設置信息,這就導致電路比較復雜,不利于擴展,且工作電壓范圍較窄,抗干擾能力較差。而采用MSP430F149單片機的脹管機可以有
[單片機]
基于<font color='red'>MSP430</font>自動脹管控制器的研發
小廣播
設計資源 培訓 開發板 精華推薦

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

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

隨便看看

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 康乐县| 绿春县| 丰镇市| 玉环县| 页游| 安陆市| 额济纳旗| 尤溪县| 柳江县| 乐山市| 蒙自县| 金门县| 蒙阴县| 桓台县| 新安县| 无棣县| 平乐县| 滁州市| 逊克县| 西乌珠穆沁旗| 周口市| 阳谷县| 赣州市| 浦江县| 高淳县| 威宁| 西和县| 营口市| 迁西县| 深水埗区| 定边县| 定结县| 潜江市| 宁化县| 酒泉市| 博野县| 威信县| 辉县市| 泾源县| 宜州市| 奉贤区|