久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
用LCD1602顯示xingxiangrong的單片機(jī)源程序
[打印本頁]
作者:
swy2121241
時間:
2018-8-9 16:59
標(biāo)題:
用LCD1602顯示xingxiangrong的單片機(jī)源程序
//功能:用LCD1602顯示 xingxiangrong
//編譯環(huán)境: KEIL UVISION2
//單片機(jī)晶振:12M 單片機(jī)型號AT89S52
//單片機(jī)晶振: 無特殊要求
//作者:興向榮電子元件店
//日期: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數(shù)據(jù)接口
#define Busy 0x80 //用于檢測LCM狀態(tài)字中的Busy標(biāo)識
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;
//**************函數(shù)聲明***************************************
void WriteDataLCM (uchar WDLCM);//LCD模塊寫數(shù)據(jù)
void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模塊寫指令
uchar ReadStatusLCM(void);//讀LCD模塊的忙標(biāo)
void DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置顯示一個字符
void LCMInit(void);//LCD初始
void delayms(uint ms);//1MS基準(zhǔn)延時程序
void DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData);
void judge_xianshi(void);//顯示處理程序
uchar flag1;
//***********************主程序******************************
main()
{
beek_c=1;//關(guān)閉蜂鳴器
lock_c=0;//關(guān)閉鎖
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') //若到達(dá)字串尾則退出
{
if (Y <= 0xF) //X坐標(biāo)應(yīng)小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
ListLength++;
Y++;
delayms(ms);//延時顯示字符串
}
else
break;//跳出循環(huán)體
}
}
/*======================================================================
LCM初始化
======================================================================*/
void LCMInit(void)
{
LCM_Data = 0;
WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測忙信號
delayms(5);
WriteCommandLCM(0x38,0);
delayms(5);
WriteCommandLCM(0x38,0);
delayms(5);
WriteCommandLCM(0x38,1); //顯示模式設(shè)置,開始要求每次檢測忙信號
WriteCommandLCM(0x08,1); //關(guān)閉顯示
WriteCommandLCM(0x01,1); //顯示清屏
WriteCommandLCM(0x06,1); // 顯示光標(biāo)移動設(shè)置
WriteCommandLCM(0x0C,1); // 顯示開及光標(biāo)設(shè)置
delayms(100);
}
//==============================LCD1602顯示子程序================================================
// 寫數(shù)據(jù)函數(shù): 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;
}
/*====================================================================
寫指令函數(shù): E=高脈沖 RS=0 RW=0
======================================================================*/
void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC為0時忽略忙檢測
{
if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測忙
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E =1;
}
/*====================================================================
正常讀寫操作之前必須檢測LCD控制器狀態(tài):E=1 RS=0 RW=1;
DB7: 0 LCD控制器空閑,1 LCD控制器忙。
讀狀態(tài)
======================================================================*/
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; //當(dāng)要顯示第二行時地址碼+0x40;
Y |= 0x80; // 算出指令碼
WriteCommandLCM(Y, 0); //這里不檢測忙信號,發(fā)送地址碼
WriteDataLCM(ASCII);
}
/*====================================================================
設(shè)定延時時間:x*1ms
====================================================================*/
void delayms(uint Ms)
{
uint i,TempCyc;
for(i=0;i<Ms;i++)
{
TempCyc =70;
while(TempCyc--);
}
}
作者:
devcang
時間:
2018-8-9 21:13
再試試不用添加元件,能不能不添加元件實現(xiàn)2IO驅(qū)動(不算RW/RS/E)。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
美女黄色在线观看
|
日韩成人在线免费视频
|
免费 视频 1级
|
精品视频在线观看
|
日韩1区2区
|
九九福利
|
亚洲精品久久久久久宅男
|
国产av毛片
|
日韩一区二区三区视频
|
欧美一区二区三区,视频
|
日韩一级
|
日韩久久久久
|
www.国产.com
|
亚洲精品黄色
|
久草综合在线视频
|
亚洲激情在线观看
|
国产一级毛片精品完整视频版
|
亚洲精品性视频
|
欧美日韩中文国产一区发布
|
亚洲精品一区二
|
久久久久久久亚洲精品
|
欧美精品一区二区三区四区五区
|
久热久热
|
精品国产一区二区久久
|
国产精品亚洲成在人线
|
中文字幕在线看
|
91在线电影
|
av成人在线观看
|
国产片淫级awww
|
久久久久久免费毛片精品
|
久久高清亚洲
|
91一区二区
|
日本免费黄色一级片
|
在线成人av
|
国产91精品网站
|
久久久久久国产精品免费免费
|
国内自拍偷拍
|
亚洲一区二区在线电影
|
久久久久久高清
|
国产情侣久久
|
欧美精品一区三区
|