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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

基于51單片機(jī)之LCD1602實(shí)驗(yàn)例程

作者:未知   來源:CaKen的空間   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月17日   【字體:

 **************************  Copyright(C)CaKe  *****************************************

========================================================================================
==============**文件名    : main.c              ==============
==============**作者      : CaKen              ==============
==============**版本號(hào)    : V1.0               ==============
==============**時(shí)間      : 2014.08.12               ==============
==============**功能描述  : 1602液晶屏實(shí)驗(yàn)測(cè)試          ==============
========================================================================================
****************************************************************************************
 
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char     //宏定義
#define uint unsigned int     //宏定義
 
 
uchar code Table1[]="CaKen-2245286160";
uchar code Table2[]="                ";
 
 
sbit  LCD1602_RS=P2^4;      //數(shù)據(jù)命令端口
sbit  LCD1602_RW=P2^5;      //讀寫端口.我們?cè)谶@里只寫
sbit  LCD1602_EN=P2^6;      //使能端口
 
*****************************************************************************************
函數(shù)名:延時(shí)函數(shù)
調(diào)  用:delayms();
參  數(shù):
返回值:
結(jié)  果:
備  注:
*****************************************************************************************
 
void delayms(unsigned int ms)   
{
      unsigned int i , j;          
    for(i = 0; i < ms; i++)
         for(j = 0; j < 110; j++);
}
 
 
*****************************************************************************************
函數(shù)名:寫指令
調(diào)  用:Write_com();
參  數(shù):
返回值:
結(jié)  果:
備  注:
*****************************************************************************************
void Write_com(uchar com)
 {
   LCD1602_RS=0;               //寫指令時(shí)RS=L
   LCD1602_EN=0;              
   P0=com;              //給端口送指令
   delayms(5);                 
   LCD1602_EN=1;               //使能端高電平有效  
   delayms(5);      
   LCD1602_EN=0;     
 }
 
*****************************************************************************************
函數(shù)名:寫數(shù)據(jù)
調(diào)  用:Write_Date();
參  數(shù):
返回值:
結(jié)  果:
備  注:
*****************************************************************************************
 void Write_Date(uchar Date)
 {
   LCD1602_RS=1;                //寫數(shù)據(jù)時(shí)RS=L
   LCD1602_EN=0;                
   P0=Date;            //給端口送數(shù)據(jù)
   delayms(5);                   
   LCD1602_EN=1;                //使能端高電平有效  
   delayms(5);
   LCD1602_EN=0;    
 }
 
*****************************************************************************************
函數(shù)名:LCD1602初始化
調(diào)  用:LCD1602_Init();
參  數(shù):
返回值:
結(jié)  果:
備  注:
*****************************************************************************************
void LCD1602_Init()
 {
   unsigned char num; 
   LCD1602_RW=0;                 //寫信號(hào)拉低
   LCD1602_EN=0;                 //使能端拉低
   Write_com(0x38);           //開顯示
   Write_com(0x0c);              //開顯示不顯示光標(biāo)
   Write_com(0x06);              //每寫一個(gè)地址和光標(biāo)加一 
   Write_com(0x01);           //顯示清零
 
   Write_com(0x80);              //第一行的初始地址為0x80
   for(num=0;num<16;num++)       //循環(huán)的數(shù)字要看上面的占多少個(gè)字符
     {
       Write_Date(Table1[num]);  //多了和少了都不會(huì)對(duì)的。
    delayms(5);
     }
 
     Write_com(0x80+0x40);       //第二行初始地址為0x80+0x40
     for(num=0;num<16;num++)
      {
         Write_Date(Table2[num]);
      delayms(5);
      }
 }
*****************************************************************************************
函數(shù)名:主函數(shù)
調(diào)  用:
參  數(shù):
返回值:
結(jié)  果:
備  注:
***************************************************************************************** 
void main(void)
{  
     unsigned char n;
     LCD1602_Init();
 
   while(1)
 {
      Write_com (0x80+0x40+6);   //第二行第六個(gè)格開始顯示
   Write_Date(0x30+n/100);    delayms(5);
   Write_Date(0x30+n0/10); delayms(5);
   Write_Date(0x30+n);     delayms(5);
     delayms(100);
 }      
}
 
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面是一個(gè)提高版的程序:
 
**************************  Copyright(C) CaKe  ****************************************
========================================================================================
==============**文件名    : main.c              ==============
==============**作者      : CaKen              ==============
==============**版本號(hào)    : V1.0               ==============
==============**時(shí)間      : 2014.08.17               ==============
==============**功能描述  : LCD1602實(shí)驗(yàn)測(cè)試          ==============
========================================================================================
****************************************************************************************

#include <reg52.h>     //包含單片機(jī)寄存器的頭文件
#include <intrins.h>   //包含_nop_()函數(shù)定義的頭文件

sbit RS=P2^0;            //寄存器選擇位,將RS位定義為P2.0引腳
sbit RW=P2^1;            //讀寫選擇位,將RW位定義為P2.1引腳
sbit EN=P2^2;            //使能信號(hào)位,將E位定義為P2.2引腳

sbit BF=P0^7;            //忙碌標(biāo)志位,,將BF位定義為P0.7引腳

unsigned char code string[ ]= {"abcdefghihklabc"};
unsigned char code string1[ ]={"QUICK STUDY MCU"};
unsigned char code User[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//自定義字符℃
 

void delay1ms()
{
     unsigned char i,j; 
   for(i=0;i<10;i++)
    for(j=0;j<33;j++);  
 }

 void delay(unsigned int n)
 {
    unsigned int i;
 for(i=0;i
 delay1ms();
 }

 bit BusyTest(void)
  {
     bit result;
  RS=0;         //根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)
     RW=1;
     EN=1;          //E=1,才允許讀寫
     _nop_();      //空操作
     _nop_();
     _nop_();
     _nop_();      //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 
     result=BF;    //將忙碌標(biāo)志電平賦給result
  EN=0;
     return result;
  }

void Write_com (unsigned char dictate)
{  
    while(BusyTest()==1);    //如果忙就等待
  RS=0;                   //根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫入指令
  RW=0;  
  EN=0;                    //E置低電平(寫指令時(shí),
                             // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"
  _nop_();
  _nop_();                //空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  P0=dictate;             //將數(shù)據(jù)送入P0口,即寫入指令或地址
  _nop_();
  _nop_();
  _nop_();
  _nop_();                //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  EN=1;                    //E置高電平
  _nop_();
  _nop_();
  _nop_();
  _nop_();                //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  EN=0;                   //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令
 }

 void WriteAddress(unsigned char x)
 {
     Write_com(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x" 
 }

 void WriteData(unsigned char y)
 {
    while(BusyTest()==1); 
   RS=1;              //RS為高電平,RW為低電平時(shí),可以寫入數(shù)據(jù)
   RW=0;
   EN=0;               //E置低電平(寫指令時(shí),,
                         // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"
   P0=y;              //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊
   _nop_();
   _nop_();
    _nop_();
      _nop_();           //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
   EN=1;               //E置高電平
   _nop_();
   _nop_();
   _nop_();
   _nop_();           //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
   EN=0;               //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令
 }

void LCD1602_Init(void)
{
    delay(15);             //延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長的反應(yīng)時(shí)間
    Write_com(0x38);       //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口
 delay(5);
 Write_com(0x38);
 delay(5);      //延時(shí)5ms
 Write_com(0x38);       //3次寫 設(shè)置模式
 delay(5);
 Write_com(0x0F);       //顯示模式設(shè)置:顯示開,有光標(biāo),光標(biāo)閃爍
 delay(5);
 Write_com(0x06);       //顯示模式設(shè)置:光標(biāo)右移,字符不移
 delay(5);            
 Write_com(0x01);       //清屏幕指令,將以前的顯示內(nèi)容清除
 delay(5);
 }


void main(void)           
 {
  unsigned char i=0,j;
  LCD1602_Init();                       //調(diào)用LCD初始化函數(shù) 
  delay(10);
  while(1)
    {


   Write_com(0x01);                   //清顯示:清屏幕指令
   delay(5);
   WriteAddress(0x00);                // 設(shè)置顯示位置為第一行的第1個(gè)字
   delay(5);

   while(string[i] != '\0')           //'\0'是數(shù)組結(jié)束標(biāo)志
   {                 // 顯示字符 abcdefghihklabc
    WriteData(string[i]);
    i++;
    delay(100);
   }

    WriteAddress(0x40);         // 設(shè)置顯示位置為第二行的第1個(gè)字
         i = 0;
    while(string[i] != '\0')          //'\0'是數(shù)組結(jié)束標(biāo)志
     {               // 顯示字符 QUICK STUDY MCU
   WriteData(string1[i]);
   i++;
   delay(100);
  } 
     //while(1);

 

  delay(1000); 
                        //右側(cè)移位進(jìn)來
  Write_com(0x01);               //清顯示:清屏幕指令
  delay(5);
  WriteAddress(0x10);            // 設(shè)置顯示位置為第一行的第1個(gè)字
  delay(5);
    i = 0;
  while(string[i] != '\0')       //'\0'是數(shù)組結(jié)束標(biāo)志
   {             // 顯示字符  abcdefghihklabc
   WriteData(string[i]);
   i++; 
   }
   
   WriteAddress(0x50);        // 設(shè)置顯示位置為第二行的第1個(gè)字
         i = 0;
  while(string[i] != '\0')       //'\0'是數(shù)組結(jié)束標(biāo)志
    {             // 顯示字符 QUICK STUDY MCU
   WriteData(string1[i]);
   i++;
    }
   
  for(j=0;j<16;j++ )
    {
    Write_com(0x18);         //左移指令
    for(i=0;i<10;i++)
          delay(30);   
    }    
   //while(1);

 

         delay(1000);
   Write_com(0x08);          //關(guān)閉顯示
   //while(1);    
         delay(3000);           //延時(shí)  維持顯示一段時(shí)間
   Write_com(0x0c);          //開顯示   
       //while(1);
         delay(3000);              //延時(shí)  維持顯示一段時(shí)間


   Write_com(0x0f);       //開光標(biāo)
   // while(1);
         delay(1000);           //延時(shí)  維持顯示一段時(shí)間

   for(j=0;j<16;j++ )
   {
    Write_com(0x1c);      //右移 移出
    for(i=0;i<10;i++)
          delay(30);      
   }
   //while(1);


       Write_com(0x40);          //設(shè)定CGRAM地址
   delay(5);
   for(j=0;j<8;j++ )
   {
    WriteData(User[j]);  //寫入自定義圖形 ℃
   }
      WriteAddress(0x05);      //設(shè)定屏幕上的顯示位置
    delay(5);
      WriteData(0x00);      //從CGRAM里取出自定義圖形顯示
      while(1); 
  }    
}
 
 
關(guān)閉窗口
主站蜘蛛池模板: 男女爱爱网站 | 成人综合视频在线观看 | 欧洲妇女成人淫片aaa视频 | 成人不卡 | 国产精品自拍啪啪 | 日本三级在线网站 | 亚洲视频在线观看 | 国产999精品久久久 精品三级在线观看 | 亚洲福利 | 欧美自拍视频 | 成人教育av| 日本精品一区二区三区视频 | 成人在线视频免费观看 | 国产 日韩 欧美 在线 | 久久在线精品 | a级免费视频 | 日韩av一区在线观看 | 性生生活大片免费看视频 | 亚洲精品一区国语对白 | 亚洲精品一区国产精品 | 中文久久| 午夜a v电影 | av看片网| 精品1区2区3区4区 | 成人av在线大片 | 中文av在线播放 | 亚洲午夜在线 | 在线看免费的a | 日韩欧美中文字幕在线观看 | 欧美日韩在线观看视频网站 | 久久国产一区二区 | 一级毛片视频在线观看 | 欧美精品三区 | 午夜精品一区二区三区在线观看 | 色在线免费视频 | 国产电影一区二区三区爱妃记 | 亚洲第一av | 精品一二三区视频 | 日韩毛片在线观看 | 九九久久精品 | 人人玩人人干 |