日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机c语言1602怎么接线,lcd1602与单片机连接图 - lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图...

發(fā)布時間:2023/12/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机c语言1602怎么接线,lcd1602与单片机连接图 - lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lcd1602中文資料-----LCD1602的3引腳VO怎么接

VO為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。

LCD1602的VO引腳必須不能懸空,要連接一個滑動變阻器來調節(jié)的,當然LCD1602有多種型號,但是大多數的VO腳只有兩種情況:一個是VO腳接18歐的下拉電阻接地,一個是接1k歐的電阻接地,當然,也可以接個滑動變阻器更好。

一般用上圖,具體看看你LCD1602的技術手冊說明VO引腳的具體情況

lcd1602與單片機連接圖----實例解讀

下面我們分享以一個實例。LCD1602的型號是16條引腳的HJ1602A;單片機最小系統(tǒng)(擴充了外部RAM 62256),采用STC89C52RC,晶振22.1184MHZ。以5×8點陣,16×2行,8位數據端口。首先在第一行顯示“I love MCU!”,第二行顯示“LCD1602 Test!”。延時一段時間,清屏。然后在第一行顯示自定義字符:攝氏溫標標志。第二行顯示圓周率(pai)標志。再延時一段時間,清屏。最后在第一行顯示“Welcome to my blog!”,顯示方式是從屏幕右面移入,左面移出。周而復始。

//File1

#ifndef __ZHANGTYPE_H__

#define __ZHANGTYPE_H__

#define uint8 unsigned char

#define uint16 unsigned short int

#define uint32 unsigned long int

#define int8 signed char

#define int16 signed short int

#define int32 signed long int

#define uint64 unsigned long long int

#define int64 signed long long int

#endif

//File2

#ifndef __FUN_H__

#define __FUN_H__

#include “ZhangType.h”

#include

void Delay(uint16 time);

#endif

//File3

#include “fun.h”

void Delay(uint16 TIme)

{

while(TIme--);

}

//File4

#ifndef __1602_H__

#define __1602_H__

#include

#include “ZhangType.h” //變量類型

#include “fun.h” //常用函數

#define SETMODE 0x38 //16*2顯示,5*7點陣,8位數據接口

#define DISOPEN 0x0C //顯示開,不顯示光標,光標不閃爍

#define DISMODE 0x06 //讀寫字符后地址加1,屏顯不移動

#define SETADDR 0x80 //設置數據地址指針初始值

#define CLEAR 0x01 //清屏,數據指針清零

#define RET 0x02 //回車,數據指針清零

#define PORT P2 //I/O口

sbit RS = P1^0;

sbit RW = P1^1;

sbit E = P1^2;

void Init1602(void); //初始化1602

void Write1602_Com(uint8 com); //寫命令

void Write1602_Dat(uint8 dat); //寫數據

void CheckBusy(void); //檢查忙

void Write1602_One_Dat(uint8 X,uint8 Y,uint8 dat); //寫一個數據

void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf); //寫一個數據串

#endif//

//File5

#include “1602.h”

void Write1602_Com(uint8 com)

{

E=0;

RS=0; //命令

Delay(50); //延時

RW=0; //寫

Delay(50);

PORT=com; //端口賦值

Delay(50);

E=1; //高脈沖

Delay(50);

E=0;

}

void Write1602_Dat(uint8 dat)

{

E=0;

RS=1; //數據

Delay(50); //延時

RW=0; //寫

Delay(50);

PORT=dat; //端口賦值

Delay(50);

E=1; //高脈沖

Delay(50);

E=0;

}

void CheckBusy(void)

{

uint8 temp;

RS=0; //命令

RW=1; //讀

E=0;

while(1)

{

PORT=0xFF; //端口為輸入

E=1; //高脈沖

temp=PORT;

E=0;

if ((temp&0x80)==0) //檢查BF位是否為0

break;

}

}

void Init1602(void)

{

Write1602_Com(SETMODE); //模式設置

Delay(500);

Write1602_Com(DISOPEN); //顯示設置

Delay(500);

Write1602_Com(DISMODE); //顯示模式

Delay(500);

Write1602_Com(CLEAR); //清屏

Delay(500);

}

void Write1602_One_Dat(uint8 x,uint8 y,uint8 dat)

{

x&=0x0f;

y&=0x01;

if(y)

x|=0x40;

x|=0x80;

Write1602_Com(x);

Write1602_Dat(dat);

}

void Write1602_Str(uint8 addr,uint8 length,uint8 *pbuf)

{

uint8 i;

Write1602_Com(addr);

for(i=0;i

{

Write1602_Dat(pbuf[i]);

}

}

//File6

*******************************************************

*名稱:主文件(_main.c)

*功能:測試

*日期:2014/09/09

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

#include “1602.h”

#include “fun.h”

uint8 code hot[8]={ //攝氏溫度字模

0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00

};

uint8 code pi[8]={

0x00,0x1f,0x0a,0x0a,0x0a,0x13,0x00,0x00 //pai

};

uint8 code strMCU[]=“I love MCU!”;

uint8 code strTest[]=“LCD1602 Test!”;

uint8 code blog[]=“Welcome to my blog!”;

uint8 i;

void main()

{

Init1602(); //初始化1602

//自定義CGRAM

Write1602_Str(0x40,8,hot); //攝氏溫標

Write1602_Str(0x48,8,pi); //pai

Write1602_Str(0x80,strlen(strMCU),strMCU); //“I love MCU!”

Write1602_Str(0x80+0x40,strlen(strTest),strTest); //“LCD1602 Test!”

for(i=0;i《50;i++) //延時一段時間

Delay(10000);

Write1602_Com(CLEAR); //指令執(zhí)行時間較長

Delay(500); //多加一些延時

for(i=0;i《16;i++)

Write1602_Dat(0);

Write1602_Com(0xc0); //設置DDRAM地址

for(i=0;i《16;i++)

Write1602_Dat(1);

for(i=0;i《50;i++) //延時一段時間

Delay(10000);

Write1602_Com(CLEAR); //指令執(zhí)行時間較長

Delay(500); //多加一些延時

Write1602_Str(0x80+0x10,strlen(blog),blog); //寫在顯示之外

while(1)

{

Write1602_Com(0x18); //左移

for(i=0;i《20;i++) //延時

Delay(10000);

}

}

//####### THE END ######

lcd1602與單片機連接圖----LCD1602與8051單片機接線圖

下圖是LCD1602與8051單片機的接口圖,圖中LCD1602的數據線與8051的P2口相連,RS與8051的P1.7相連,R/W與8051的P1.6相連,E端與8051的P1.5相連。編程在LCD顯示器的第1行、第1列開始顯示“HOW”,第2行、第5列開始顯示“ARE YOU!”。

LCD1602與8051單片機接線圖

匯編語言程序:

RS BIT P1.7

RW BIT P1.6 E BIT P1.5 ORG 00H AJMP START

ORG 50H ;主程序

START: MOV SP,#50H ACALL INIT

MOV A,#10000000B ;寫入顯示緩沖區(qū)起始地址為第1行第1列 ACALL WC51R

MOV A,#‘H’ ;第1行第1列顯示字母‘H’ ACALL WC51DDR MOV A,#‘O’ ;第1行第2列顯示字母“O” ACALL WC51DDR MOV A,#‘W’ ;第1行第3列顯示字母‘W’

ACALL WC51DDR

MOV A,#11000100B ;寫入顯示緩沖區(qū)起始地址為第2行第5列 ACALL WC51R

MOV A,#‘A’ ;第2行第5列顯示字母‘A’ ACALL WC51DDR MOV A,#‘R’ ;第2行第6列顯示字母‘R’ ACALL WC51DDR MOV A,#‘E’ ;第2行第7列顯示字母‘E’ ACALL WC51DDR MOV A,#‘ ’ ;第2行第8列顯示字母‘ ’ ACALL WC51DDR MOV A,#‘Y’

;第2行第9列顯示字母‘Y’

ACALL WC51DDR

MOV A,#‘O’ ;第2行第10列顯示字母‘O’ ACALL WC51DDR MOV A,#‘U’ ;第2行第11列顯示字母‘U’ ACALL WC51DDR MOV A,#‘!’

;第2行第12列顯示字母‘!’

ACALL WC51DDR LOOP: AJMP LOOP ;初始化子程序

INIT: MOV A,#00000001H ;清屏

ACALL WC51R MOV A,#00111000B ;使用8位數據,顯示兩行,使用5×7的字型 LCALL WC51R MOV A,#00001100B ;顯示器開,光標關,字符不閃爍 LCALL WC51R MOV A,#00000110B

;字符不動,光標自動右移一格

LCALL WC51R RET ;檢查忙子程序 F_BUSY:PUSH ACC ;保護現場

MOV P2,#0FFH CLR RS SETB RW WAIT: CLR E SETB E JB P2.7,WAIT

;忙,等待

POP ACC ;不忙,恢復現場

RET ;寫入命令子程序 WC51R: ACALL F_BUSY CLR E CLR RS CLR RW SETB E MOV P2,ACC CLR E RET ;寫入數據子程序 WC51DDR:ACALL F_BUSY CLR E SETB RS CLR RW SETB E MOV P2,ACC CLR E RET END

C語言編程:

#include 《reg51.h》

#define uchar unsigned char sbit RS=P1^7; sbit RW=P1^6; sbit E=P1^5;

void init(void);

void wc51r(uchar i); void wc51ddr(uchar i); void fbusy(void);

//主函數

void main() {

SP=0x50; init();

wc51r(0x80); //寫入顯示緩沖區(qū)起始地址為第1行第1列 wc51ddr(’H’); //第1行第1列顯示字母’H’ wc51ddr(’O’); //第1行第2列顯示字母’O’ wc51ddr (’W’); //第1行第3列顯示字母’W’

wc51r(0xc4); //寫入顯示緩沖區(qū)起始地址為第2行第5列 wc51ddr(’A’); //第2行第5列顯示字母’A’ wc51ddr(’R’); //第2行第6列顯示字母’R’ wc51ddr(’E’); //第2行第7列顯示字母’E’ wc51ddr(’ ’); //第2行第8列顯示字母’ ’ wc51ddr(’Y’); //第2行第9列顯示字母’Y’ wc51ddr(’O’); //第2行第10列顯示字母’O’ wc51ddr(’U’); //第2行第11列顯示字母’U’ wc51ddr(’!’); //第2行第11列顯示字母’!’ while(1); }

//初始化函數 void init() {

wc51r(0x01); //清屏

wc51r(0x38); //使用8位數據,顯示兩行,使用5×7的字型 wc51r(0x0c); //顯示器開,光標關,字符不閃爍 wc51r(0x06); //字符不動,光標自動右移一格 }

//檢查忙函數 void fbusy() {

P2=0Xff;RS=0;RW=1; E=0; E=1;

while (P2&0x80){E=0;E=1;} //忙,等待 }

//寫命令函數

void wc51r(uchar j) {

fbusy();

E=0;RS=0;RW=0; E=1; P2=j; E=0; }

//寫數據函數

void wc51ddr(uchar j) {

fbusy();

E=0;RS=1;RW=0; E=1; P2=j; E=0; }

小編推薦閱讀:

總結

以上是生活随笔為你收集整理的单片机c语言1602怎么接线,lcd1602与单片机连接图 - lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。