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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2258|回復: 1
打印 上一主題 下一主題
收起左側

用LCD1602顯示xingxiangrong的單片機源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:167441 發表于 2018-8-9 16:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//功能:用LCD1602顯示 xingxiangrong
//編譯環境: KEIL UVISION2
//單片機晶振:12M  單片機型號AT89S52
//單片機晶振: 無特殊要求
//作者:興向榮電子元件店
//日期:2013.07.02
//功能:

#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int


//==============LCD1602接口連接方法=====================
/*-----------------------------------------------------
       |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.3    |
       |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.4    |
       |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2    |
       |DB3-----P0.3 | DB7-----P0.7 |
    ---------------------------------------------------*/
//================================================*/              
#define LCM_Data     P0    //LCD1602數據接口
#define Busy         0x80   //用于檢測LCM狀態字中的Busy標識
sbit    LCM_RS     = P2^6;  //讀寫控制輸入端,LCD1602的第五腳
sbit    LCM_RW     = P2^5;  //寄存器選擇輸入端,LCD1602的第四腳
sbit    LCM_E      = P2^7;  //使能信號輸入端,LCD1602的第6腳


sbit   beek_c  =P2^2;
sbit   lock_c  =P2^3;
//**************函數聲明***************************************
void        WriteDataLCM        (uchar WDLCM);//LCD模塊寫數據
void         WriteCommandLCM        (uchar WCLCM,BuysC); //LCD模塊寫指令
uchar   ReadStatusLCM(void);//讀LCD模塊的忙標
void    DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置顯示一個字符
void    LCMInit(void);//LCD初始
void    delayms(uint ms);//1MS基準延時程序
void    DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData);
void   judge_xianshi(void);//顯示處理程序



uchar flag1;
//***********************主程序******************************
main()   
{   
   beek_c=1;//關閉蜂鳴器
   lock_c=0;//關閉鎖
   LCMInit();
   judge_xianshi();
   while(1);
}

void   judge_xianshi()
{

  DisplayListChar(0,1,0, "xingxiangrong");//在液晶的第一行顯示字符"XINGXIANGR"

}

/*====================================================================  
  按指定位置顯示一串字符:第 X 行,第 y列
  注意:字符串不能長于16個字符
======================================================================*/
void DisplayListChar(uchar X,uchar Y,uchar ms, uchar code *DData)
{
unsigned char ListLength;

ListLength = 0;

X &= 0x1;
Y &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[ListLength]!='\0') //若到達字串尾則退出
  {
     if (Y <= 0xF) //X坐標應小于0xF
     {
        DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
        ListLength++;
        Y++;
            delayms(ms);//延時顯示字符串
     }
     else
            break;//跳出循環體
  }
}
/*======================================================================
LCM初始化
======================================================================*/
void LCMInit(void)
{
LCM_Data = 0;
WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號
delayms(5);
WriteCommandLCM(0x38,0);
delayms(5);
WriteCommandLCM(0x38,0);
delayms(5);
WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
WriteCommandLCM(0x08,1); //關閉顯示
WriteCommandLCM(0x01,1); //顯示清屏
WriteCommandLCM(0x06,1); // 顯示光標移動設置
WriteCommandLCM(0x0C,1); // 顯示開及光標設置
delayms(100);
}
//==============================LCD1602顯示子程序================================================
// 寫數據函數: E =高脈沖 RS=1 RW=0
//======================================================================*/
void WriteDataLCM(uchar WDLCM)
{
ReadStatusLCM(); //檢測忙
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0; //若晶振速度太高可以在這后加小的延時
LCM_E = 0; //延時
LCM_E = 1;
}
/*====================================================================
  寫指令函數: E=高脈沖 RS=0 RW=0
======================================================================*/
void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC為0時忽略忙檢測
{
if (BuysC) ReadStatusLCM(); //根據需要檢測忙
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E =1;
}
/*====================================================================
  正常讀寫操作之前必須檢測LCD控制器狀態:E=1 RS=0 RW=1;
  DB7: 0 LCD控制器空閑,1 LCD控制器忙。
  讀狀態
======================================================================*/
uchar ReadStatusLCM(void)
{
LCM_Data = 0xFF;
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
while (LCM_Data & Busy); //檢測忙信號  
return(LCM_Data);
}
/*======================================================================
功 能:     在1602 指定位置顯示一個字符:第一行位置0~15,第二行16~31
說 明:     第 X 行,第 y 列  注意:字符串不能長于16個字符
======================================================================*/
void DisplayOneChar( uchar X, uchar Y, uchar ASCII)
{
  X &= 0x1;
  Y &= 0xF; //限制Y不能大于15,X不能大于1
  if (X) Y |= 0x40; //當要顯示第二行時地址碼+0x40;
  Y |= 0x80; // 算出指令碼
  WriteCommandLCM(Y, 0); //這里不檢測忙信號,發送地址碼
  WriteDataLCM(ASCII);
}
/*====================================================================
  設定延時時間:x*1ms
====================================================================*/
void delayms(uint Ms)
{
  uint i,TempCyc;
  for(i=0;i<Ms;i++)
  {
    TempCyc =70;
    while(TempCyc--);
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:277550 發表于 2018-8-9 21:13 | 只看該作者
再試試不用添加元件,能不能不添加元件實現2IO驅動(不算RW/RS/E)。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩久| 欧美午夜视频 | 欧美精品video | 午夜网| 日韩成人影院 | 天天曰天天干 | 中文字幕动漫成人 | 在线国产一区二区 | 最新国产精品视频 | 二区三区在线观看 | 亚洲欧美自拍偷拍视频 | 国产精品久久久久久妇女6080 | www.久| 国产无套一区二区三区久久 | 日日噜噜噜夜夜爽爽狠狠视频97 | 国产欧美一区二区精品久导航 | 国产亚洲欧美另类一区二区三区 | 精品一级 | av片在线观看网站 | 久久久久国产 | 国产传媒 | 亚洲高清在线 | 亚洲欧美日韩高清 | 亚洲视频在线观看 | 国产精品毛片一区二区在线看 | 自拍偷拍中文字幕 | 久久精品一区二区三区四区 | 日韩欧美一区二区三区免费观看 | 狠狠ri | 在线午夜电影 | 国产 日韩 欧美 制服 另类 | 国产精品资源在线 | 久久另类 | 国产精品极品美女在线观看免费 | 女人毛片a毛片久久人人 | 亚洲欧美一区二区三区1000 | 综合一区二区三区 | 亚洲精品区 | 国产一区二区在线观看视频 | 日本欧美国产在线观看 | 免费日韩av|