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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

LCD12864驅動程序-51單片機

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年09月01日   【字體:

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

/*                                                                          */
/*                Copyright (c) 2012, pcwebmaster                           */
/*                     All rights reserved.                                 */
/*                                                                          */
/*      Email:pcwebmaste@163.com                                            */
/*                                                                          */
/****************************************************************************/
/****************************************************************************/
/* 文件名:LCD12864.c                                                       */
/* 版  本:Version 1.0                                                      */
/* 描  述:實現液晶和單片機的通訊協議,根據計算機發給的命令進行人機交互     */
/* 作  者:pcwebmaste                                                       */
/* 函  數:                                                                 */
/*         LCD12864_init                                                    */
/*         LCD12864WriteCommand                                             */
/*         LCD12864WriteByte                                                */
/*         LCD12864_init                                                    */
/*         LCD12864SetXY                                                    */
/*         LCD12864PrintfString                                             */
/* 歷史記錄:                                                               */
/*  pcwebmaste          2008-07-10     Creat Inital version. (Version 1.0)  */
/*    模塊化 2012-06-02     Creat Inital version. (Version 2.0) */
/****************************************************************************/
#include "12864.h"
 
#define LOW         0
#define HIGH        1
 
sbit wela    =  P2^6;
sbit dula    =  P2^7;
#define LCD12864_RS(x)     {if((x))P3 |=  1<<LCD12864_RS_PIN;\
                            else   P3 &=~(1<<LCD12864_RS_PIN);}//寄存器選擇輸入
 
#define LCD12864_RW(x)     {if((x))P3 |=  1<<LCD12864_RW_PIN;\
                            else   P3 &=~(1<<LCD12864_RW_PIN);}//液晶讀/寫控制
 
#define LCD12864_EN(x)     {if((x))P3 |=  1<<LCD12864_EN_PIN;\
                            else   P3 &=~(1<<LCD12864_EN_PIN);}//液晶使能控制
 
#define LCD12864_MD(x)     {if((x))P3 |=  1<<LCD12864_MD_PIN;\
                            else   P3 &=~(1<<LCD12864_MD_PIN);}//串/并方式控制
 
#define LCDWELA(x)     {if((x))P2 |=  1<<6; else   P2 &=~(1<<6);}
 
#define LCDDULA(x)     {if((x))P2 |=  1<<7; else   P2 &=~(1<<7);}
 
#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}
 
/*********************************************/
/*            */
/* 主程序                   */
/*                                           */
/*********************************************
void  main()
{
 DelayNOP();                 //延時
    wela=LOW;
 dula=LOW;
    LCD12864_init();            //初始化LCD            
 
 LCD12864PrintfString(0,1,dis1);
 LCD12864PrintfString(1,0,dis2);
 LCD12864PrintfString(2,0,dis3);
 LCD12864PrintfString(3,1,dis4);
    while(1);
}
/********************************************
*函數名稱:LCD12864_init
*輸    入:無
*輸    出:lcd_busy    為1時,忙,等待。
    lcd-busy    為0時,閑,可寫指令與數據
*說    明:LCD12864LCD檢查忙狀態
/*******************************************/
bit LCD1286_busy()
 {                         
    bit result;
    LCD12864_RS(LOW);
    LCD12864_RW(HIGH);
    LCD12864_EN(HIGH);
    DelayNOP();
    result = (bit)(LCD12864_PORT&0x80);
    LCD12864_EN(LOW);
    return(result);
 }
/********************************************
*函數名稱:LCD12864WriteCommand
*輸    入:ucCmd 要寫入的命令
*輸    出:無
*說    明:LCD12864 寫命令
    RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
********************************************/
void LCD12864WriteCommand(unsigned char ucCmd)
{                         
   while(LCD1286_busy());
    LCD12864_RS(LOW);
    LCD12864_RW(LOW);
    LCD12864_EN(LOW);
    _nop_();
    _nop_();
    LCD12864_PORT = ucCmd;
    DelayNOP();
    LCD12864_EN(HIGH);
    DelayNOP();
    LCD12864_EN(LOW); 
}
 
/********************************************
*函數名稱:LCD12864WriteByte
*輸    入:ucByte 要寫入的字節
*輸    出:無
*說    明:LCD12864 寫字節
    RS=H,RW=L,E=高脈沖,D0-D7=數據。
********************************************/
void LCD12864WriteByte(unsigned char ucByte)
{                         
   while(LCD1286_busy());
    LCD12864_RS(HIGH);
    LCD12864_RW(LOW);
    LCD12864_EN(LOW);
    LCD12864_PORT = ucByte;
    DelayNOP();
    LCD12864_EN(HIGH);
    DelayNOP();
    LCD12864_EN(LOW);
}
/********************************************
*函數名稱:LCD12864_init
*輸    入:無
*輸    出:無
*說    明:LCD12864LCD初始化設定
/*******************************************/
void LCD12864_init()
{
    LCD12864_MD(HIGH);            //并口方式   
    LCD12864WriteCommand(0x34);      //擴充指令操作
    LCD12864WriteCommand(0x30);      //基本指令操作
    LCD12864WriteCommand(0x0C);      //顯示開,關光標
    LCD12864WriteCommand(0x01);      //清除LCD的顯示內容
}
/********************************************
*函數名稱:LCD12864SetXY
*輸    入:x 橫坐標 y 縱坐標
*輸    出:無
*說    明:LCD12864 設置坐標
********************************************/
void LCD12864SetXY(unsigned char X,unsigned char Y)
{                         
   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}
   LCD12864WriteCommand(X+Y);     //顯示地址
}
/********************************************
*函數名稱:LCD12864SetXY
*輸    入:x 橫坐標 y 縱坐標
*輸    出:無
*說    明:LCD12864 設置坐標
為什么這樣寫不行呢?
********************************************
void LCD12864SetXY(unsigned char x,unsigned char y)
{
   switch(y)
     {
  case 1:
        {
             LCD12864WriteCommand(0x80+x);
        }
        break;
 
  case 2:
        {
             LCD12864WriteCommand(0x90+x);
        }
        break;
 
  case 3:
        {
             LCD12864WriteCommand(0x88+x);
        }
        break;
 
  case 4:
        {
             LCD12864WriteCommand(0x98+x);
        }
        break;
 
  default:break;
     }
//  LCD12864WriteCommand(x+y);     //顯示地址
}
/********************************************
*函數名稱:LCD12864PrintfString
*輸    入:x 橫坐標 y 縱坐標 s字符串
*輸    出:無
*說    明:LCD12864 打印字符串
********************************************/
void LCD12864PrintfString(unsigned char x,unsigned char y,unsigned char *s)
{
  LCD12864SetXY(x,y);    //設置顯示坐標
 
     while(s && *s)
     {
        LCD12864WriteByte(*s);   //顯示逐個字符
        s++;       
     }
}
 
 
 
/****************************************************************************/
/*                                                                          */
/*                Copyright (c) 2012, pcwebmaster                           */
/*                     All rights reserved.                                 */
/*                                                                          */
/*      Email:pcwebmaste@163.com                                            */
/*                                                                          */
/****************************************************************************/
/****************************************************************************/
/* 文件名:LCD12864.c                                                       */
/* 版  本:Version 1.0                                                      */
/* 描  述:實現液晶和單片機的通訊協議,根據計算機發給的命令進行人機交互     */
/* 作  者:pcwebmaste                                                       */
/* 函  數:                                                                 */
/*         LCD12864_init                                                    */
/*         LCD12864WriteCommand                                             */
/*         LCD12864WriteByte                                                */
/*         LCD12864_init                                                    */
/*         LCD12864SetXY                                                    */
/*         LCD12864PrintfString                                             */
/* 歷史記錄:                                                               */
/*  pcwebmaste          2008-07-10     Creat Inital version. (Version 1.0)  */
/*    模塊化 2012-06-02     Creat Inital version. (Version 2.0) */
/****************************************************************************/
 
#ifndef __12864_H__
#define __12864_H__
 
#include <reg52.h>
#include <intrins.h>
 
#define LCD12864_PORT  P0  //數據口
#define LCD12864_RS_PIN   5
#define LCD12864_RW_PIN   6
#define LCD12864_EN_PIN   4
#define LCD12864_MD_PIN   7
 
unsigned char code dis1[] = {"中國昌樂是寶石"};
unsigned char code dis2[] = {"之都,西瓜之鄉!"};
unsigned char code dis3[] = {"中國昌樂寶石城"};
unsigned char code dis4[] = {"人民歡迎您!"};
/********************************************
*函數名稱:LCD12864_init
*輸    入:無
*輸    出:lcd_busy    為1時,忙,等待。
    lcd-busy    為0時,閑,可寫指令與數據
*說    明:LCD12864LCD檢查忙狀態
/*******************************************/
bit LCD1286_busy();
/********************************************
*函數名稱:LCD12864WriteCommand
*輸    入:ucCmd 要寫入的命令
*輸    出:無
*說    明:LCD12864 寫命令
    RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
********************************************/
void LCD12864WriteCommand(unsigned char ucCmd);
 
/********************************************
*函數名稱:LCD12864WriteByte
*輸    入:ucByte 要寫入的字節
*輸    出:無
*說    明:LCD12864 寫字節
    RS=H,RW=L,E=高脈沖,D0-D7=數據。
********************************************/
void LCD12864WriteByte(unsigned char ucByte);
/********************************************
*函數名稱:LCD12864_init
*輸    入:無
*輸    出:無
*說    明:LCD12864LCD初始化設定
/*******************************************/
void LCD12864_init();
/********************************************
*函數名稱:LCD12864SetXY
*輸    入:x 橫坐標 y 縱坐標
*輸    出:無
*說    明:LCD12864 設置坐標
********************************************/
void LCD12864SetXY(unsigned char X,unsigned char Y);
/********************************************
*函數名稱:LCD12864PrintfString
*輸    入:x 橫坐標 y 縱坐標 s字符串
*輸    出:無
*說    明:LCD12864 打印字符串
********************************************/
void LCD12864PrintfString(unsigned char x,unsigned char y,unsigned char *s);
 
void LCD12864PrintfData(unsigned char x,unsigned char y,unsigned char DData);
/********************************************
*函數名稱:LCD12864PrintfNum
*輸    入:add ge shi bai
*輸    出:無
*說    明:此函數不好寫成通用函數,在連續地址里
   連續寫數字半角顯示。根據情況修改
********************************************/
void LCD12864PrintfNum(unsigned char add,unsigned char ge,unsigned char shi,unsigned char bai)
{
 LCD12864WriteCommand(add);
 LCD12864WriteByte(bai+0x30);
 LCD12864WriteByte(shi+0x30);
 LCD12864WriteByte(ge+0x30);
}
 
 
#endif
關閉窗口
主站蜘蛛池模板: 日日人人| 一级毛片播放 | 久久久久国产精品一区三寸 | 综合久久久| 精品日韩欧美一区二区 | 国产精品一区二区三级 | 国产极品粉嫩美女呻吟在线看人 | 久久91| 91不卡| 亚洲精品影院 | 精品国产一区二区三区免费 | 91精品国产777在线观看 | 日日摸日日添日日躁av | 欧美黄色片 | 精品一二三 | 一区二区三区视频在线 | 国产一区久久精品 | 亚洲成人三级 | 国产一区二区三区在线 | 欧美视频一区二区三区 | 日本一二三区高清 | 在线视频一区二区 | 欧美综合精品 | 精品视频999 | 九九亚洲 | 亚洲精品国产成人 | 中文字幕一区二区三区四区五区 | 一区二区免费 | 精品一区二区三区四区在线 | 欧美日韩国产精品激情在线播放 | 免费看91 | 色综合激情 | 久久精品视频网站 | 成人久久18免费网站图片 | 久久夜视频 | 久久99视频这里只有精品 | 亚洲精品乱码久久久久久按摩观 | 国产小视频精品 | 日韩精品免费 | 羞羞涩涩在线观看 | 国产99热精品|