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

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

51單片機的1602驅動程序

作者:劉溫電   來源:本站原創   點擊數:  更新時間:2013年11月26日   【字體:

//////////////////////////////////////////////////////頭文件/////////////////////////////////////////////////////
/*******************************************************************************
*  標題:  1602顯示驅動程序                                                                       *
*  文件:  1602lcd.h 1602lcd.c                                                                     *
*  日期:  2010-3-11                                                                                      *
*  版本:  1.12(試驗通過版)可用51hei單片機開發板           *
*  郵箱: 
acsdf139@163.com       qq:526083029                                 *
*  網站: 無                                                                                                 *
********************************************************************************
*  描述:                                                                                                          *
*         用法:首先在主程序內添加頭文件#include"1602lcd.c"             *
*    再在mian()中初始化液晶即可                                                              *
*                                                                                                                     *
********************************************************************************
*【版權】自己參照網上,朋友,以及書本資料上寫的,所以沒有版權       *
*【聲明】此程序,可用于學習,參考及實際設計中,歡迎轉載復制以及建議批評     *
*【技術支持】qq:526083029  小張                                                      *
********************************************************************************/

#ifndef _LCD1602_H_
#define _LCD1602_H_

#define delaynop(); {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
#define uchar unsigned char
#define SETXY 1
#define XYPRS   1
#define XYPRC   1
#define LEFTRIGHT 0

/************************************/
//函數聲明
extern bit lcdbusy(void);
extern void lcdwcmd(uchar cmd);  //寫命令函數1
extern void lcdwdat(uchar dat);  //寫數據1
extern void lcdpos(uchar x,bit y);  //行設置1
extern void lcdinit(void);     //初始化1
extern void lcdprc(uchar ch);  //寫字符1
extern void lcdprs(uchar *string); //寫字符串1
extern void lcdsetxy(uchar X,uchar Y);//顯示坐標設置
extern void lcdxyprs(uchar X,uchar Y,char *String);//指定坐標顯示字符串
extern void lcdxyprc(uchar X,uchar Y,char ch);
extern void lcdsetxs(bit D,bit C,bit B);
extern void lcdsetim(bit I_D,bit S);
extern void lcdclear(); //清屏函數
extern void lcdenter(); //顯示回車
extern void lcdcri(unsigned char n);
extern void lcdcle(unsigned char n);
extern void lcdright(unsigned char n);
extern void lcdright(unsigned char n);
#endif
//////////////////////////////////////////////////////c程序/////////////////////////////////////////////////////

#include <AT89x52.H>
#include "1602lcd.h"
#include <intrins.h>

//管角定義

sbit RSlcd=P2^0;  //數據命令選擇   
sbit RWlcd=P2^1;  //數據讀寫
sbit EPlcd=P2^2;  //使能

/************************************
 函數名:lcdbusy
 函數功能:1602忙閑信號
 參數:無
 返回:bit類型值 1為忙,0為閑
 備注:
************************************/
bit lcdbusy(void)
{    bit result;
   RSlcd = 0;
   RWlcd = 1;
   EPlcd = 1;
   delaynop();
   result = (bit)(P0 & 0x80);
   EPlcd = 0;
   return result;
}
/*************************************
函數名:lcdwcmd
函數功能:向1602中寫指令
參數:cmd(命令)
返回:無
備注:無
*************************************/
void lcdwcmd(uchar cmd)
{
   while(lcdbusy());
   RSlcd=0;
   RWlcd=0;
   EPlcd=0;
   _nop_();
   _nop_();
   P0=cmd;
   delaynop();
   EPlcd = 1;
   delaynop();
   EPlcd = 0;
}
/*************************************
函數名:lcdwdat
函數功能:向1602中寫數據
參數:dat(數據)
返回:無
備注:無
*************************************/

void lcdwdat(uchar dat)
{
   while(lcdbusy());
   RSlcd=1;
   RWlcd=0; 
   EPlcd=0;
   P0=dat;
   delaynop();
   EPlcd=1;
   delaynop();
   EPlcd=0;  
}
/*************************************
函數名:lcdprc
函數功能:寫一個字符
參數:zifu(字符)
返回:無
備注:無
*************************************/
void lcdprc(uchar zifu)
{
   lcdwdat(zifu);
}
/*************************************
函數名:lcdprs
函數功能:寫字符串
參數:zifu(字符)
返回:無
備注:無
*************************************/
void lcdprs(uchar *string)
{
   while(*string)
    {lcdwdat(*string);string++;}
}
/*************************************
函數名:lcdclear
函數功能:清屏
參數:無
返回:無
備注:無
*************************************/
void lcdclear(void)
{
   lcdwcmd(0x01);
}
/*************************************
函數名:lcdenter
函數功能:軟復位
參數:無
返回:無
備注:無
*************************************/

void lcdenter(void)
{
    lcdwcmd(0x2);
}
/*************************************
函數名:lcdsetxs
函數功能:顯示設置
參數:d(顯示)c(光標)b(閃爍)
返回:無
備注:d=1(開顯示),d=0(關顯示)
   c=1(顯示光標),c=0(不顯示光標)
   b=1(光標閃爍),b=0(不閃爍)
*************************************/
void lcdsetxs(bit D,bit C,bit B)
{
   unsigned char order;
   order=0x8;
   if(D)
      order=order+0x4;
   if(C)
      order=order+0x2;
   if(B)
      order=order+0x1;
   lcdwcmd(order);
}
/*************************************
函數名:lcdsetim
函數功能:左右移動
參數:I_D(地址指針), S(整行移動)
返回:無
備注:I_D=1(光標右移),I_D=0(光標左移)
   S=1(整行左右移),S=0(整行不動)
*************************************/
void lcdsetim(bit I_D,bit S)
{
   unsigned char order;
   order=0x4;
   if(I_D)
       order=order+0x2;
   if(S)
       order=order+0x1;
   lcdwcmd(order);
}

/*************************************
函數名:lcdinit
函數功能:初始化
參數:無
返回:無
備注:無
*************************************/
void lcdinit()
{
 
   lcdwcmd(0x38);
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   lcdwcmd(0x38);
   _nop_();
   _nop_();
   _nop_();
   _nop_(); 
   lcdwcmd(0x38);
   _nop_();
   _nop_();
   _nop_();
   _nop_(); 
   lcdsetxs(1,0,0); //設置輸入模式,默認增量方式,畫面不動,光標向右邊移動
   lcdsetim(1,0);
   lcdwcmd(0x01);  //清屏 
}

/*************************************
函數名:lcdsetxy
函數功能:坐標設置
參數:x(列數),y(行數)
返回:無
備注:配合lcdxyprc,lcdxyprs函數使用
   列數小于39,行數小于2 
*************************************/
void lcdsetxy(uchar X,uchar Y)
{
    uchar Address;
    if(X>39)
        X=39;
    if (Y == 0)
  {
       Address = 0x80 + X;
     }
    else
  { 
         Address = 0xc0 + X;
  } 
    lcdwcmd(Address);
}

 

#if XYPRC
/*************************************
函數名:lcdxyprc
函數功能:在特定行列內顯示字符
參數:X(列),Y(行),ch(字符)
返回:無
備注:列數小于16,行數小于2
*************************************/
void lcdxyprc(uchar X,uchar Y,char ch)
{
   lcdsetxy(X,Y);
   lcdwdat((uchar)ch);
}
#endif

#if XYPRS
/*************************************
函數名:lcdxyprs
函數功能:在特定行列內顯示字符串
參數:X(列),Y(行),String(字符)
返回:無
備注:列數小于16,行數小于2
*************************************/
void lcdxyprs(uchar X,uchar Y,char *String)
{
   if(Y==0)
    {
        if(X<16)
         {
             lcdsetxy(X,Y);
             for(;X<16 && *String!='\0';X++)
              {
                  lcdwdat((uchar)*String);
                  String++;
              }
             if(*String!='\0')
              {
                  X=0;
                  Y=1;
              }
         }
    }
   if(Y==1)
    {
       lcdsetxy(X,Y);
       for(;X<16 && *String!='\0';X++)
        {
           lcdwdat((uchar)*String);
           String++;
        }    
    }
}

#endif

 

#if LEFTRIGHT
/*************************************
函數名:lcdright
函數功能:畫面和光標一起右邊移動n個字符位置
參數:n(字符數)
返回:無
備注:無
*************************************/
void lcdright(unsigned char n) //shift by n characters Right
{
   unsigned char i;
   for(i=0;i<n;i++)
       lcdwcmd(0x1e);  
}
/*************************************
函數名:lcdleft
函數功能:畫面和光標一起左邊移動n個字符位置
參數:n(字符數)
返回:無
備注:無
*************************************/
void lcdleft(unsigned char n) //shift by n characters Left
{
   unsigned char i;
   for(i=0;i<n;i++)
       lcdwcmd(0x18);
}
/*************************************
函數名:lcdcle
函數功能:光標往左邊移動n個字符位置
參數:n(字符數)
返回:無
備注:無
*************************************/
void lcdcle(unsigned char n) //shif cursor right by n
{
   unsigned char i;
   for(i=0;i<n;i++)
       lcdwcmd(0x14);
}

/*************************************
函數名:lcdcri
函數功能:光標往右邊移動n個字符位置
參數:n(字符數)
返回:無
備注:無
*************************************/
void lcdcri(unsigned char n) //Shift cursor left by n
{
   unsigned char i;
   for(i=0;i<n;i++)
       lcdwcmd(0x10);
}

#endif

關閉窗口

相關文章

主站蜘蛛池模板: 日韩欧美精品在线播放 | 51ⅴ精品国产91久久久久久 | 亚洲精品1区 | 国产精品久久精品 | 中文字幕视频在线 | 国产在线二区 | 久久久www成人免费无遮挡大片 | 精品久久久久久久久久久久久久 | 精品久久久久久亚洲国产800 | 91资源在线| 国产精品久久久av | 成人妇女免费播放久久久 | 亚洲免费毛片 | 日韩中文字幕在线视频观看 | 亚洲一区二区网站 | 久久国产日本 | 久久久激情 | 久久国产精品视频 | 久久99这里只有精品 | 深夜福利影院 | 国产一区二 | 欧美一级在线 | 一级欧美黄色片 | 午夜天堂精品久久久久 | 99一级毛片 | 日韩看片| 欧美日韩不卡 | 日本在线看 | 精品中文字幕在线 | 国产一级毛片精品完整视频版 | 黄色欧美 | 欧美日韩亚洲在线 | 日本在线视频一区二区 | 国产偷录视频叫床高潮对白 | 欧美精品福利 | 理论片午午伦夜理片影院 | 欧美久久精品 | 精品国产欧美一区二区 | 亚洲精品久久久久久久久久久久久 | 成人国产精品久久 | 午夜欧美|