|
我的LCD1602是帶轉(zhuǎn)接板的,DATA 8PIN 同時(shí) 也存在 4PIN接口。開始時(shí)只寫8PIN狀態(tài)下的程序,液晶顯示是錯(cuò)誤的,研究好久才發(fā)現(xiàn)要把4PIN的存在
同時(shí)寫進(jìn)去,用或不用就用#ifndef #else #endif 來解決。
P0口對應(yīng)數(shù)據(jù)總線
一下是我寫的
#include<reg52.h>
//#ifndef __LCD_H_
//#define __LCD_H_
/**********************************
當(dāng)使用的是4位數(shù)據(jù)傳輸?shù)臅r(shí)候定義,
使用8位取消這個(gè)定義
**********************************/
#define LCD1602_4PINS
//---重定義關(guān)鍵詞---//
//#ifndef uchar
#define uchar unsigned char
//#endif
//#ifndef uint
#define uint unsigned int
//#endif
uchar code table[]="I LOVE MCU!";
uchar code table1[]="WWW.XTLCU.COM";
sbit lcde=P2^7;
sbit lcdrs=P2^6;
sbit lcdwr=P2^5;
void delay(uint z);
/*******************************************************************************
* 函 數(shù) 名 : Write_Com
* 函數(shù)功能 : 向LCD寫入一個(gè)字節(jié)的命令
* 輸 入 : com
* 輸 出 : 無
*******************************************************************************/
#ifndef LCD1602_4PINS //當(dāng)沒有定義這個(gè)LCD1602_4PINS時(shí)
void write_com(uchar com)
{
lcde=0;
lcdrs=0; //選擇發(fā)送命令
lcdwr=0;
P0=com; //放入命令
delay(5);
lcde=1; //寫入時(shí)序
delay(5); //保持時(shí)間
lcde=0;
}
#else
void write_com(uchar com)
{
lcde=0;
lcdrs=0; //選擇發(fā)送命令
lcdwr=0;
P0=com; //放入命令
delay(5);
lcde=1; //寫入時(shí)序
delay(5); //保持時(shí)間
lcde=0;
P0=com << 4; //發(fā)送低四位
delay(5);
lcde=1; //寫入時(shí)序
delay(5);
lcde=0;
}
#endif
/*******************************************************************************
* 函 數(shù) 名 : Write_Data
* 函數(shù)功能 : 向LCD寫入一個(gè)字節(jié)的數(shù)據(jù)
* 輸 入 : dat
* 輸 出 : 無
*******************************************************************************/
#ifndef LCD1602_4PINS
void write_data(uchar date)
{ lcde=0;
lcdrs=1; //選擇輸入數(shù)據(jù)
lcdwr=0;
P0=date; //寫入數(shù)據(jù)
delay(5);
lcde=1; //寫入時(shí)序
delay(5); //保持時(shí)間
lcde=0;
}
#else
void write_data(uchar date)
{ lcde=0;
lcdrs=1; //選擇輸入數(shù)據(jù)
lcdwr=0;
P0=date; //寫入數(shù)據(jù)
delay(5);
lcde=1; //寫入時(shí)序
delay(5); //保持時(shí)間
lcde=0;
P0=date<<4; //寫入低四位
delay(5);
lcde=1; //寫入時(shí)序
delay(5); //保持時(shí)間
lcde=0;
}
#endif
/*******************************************************************************
* 函 數(shù) 名 : LcdInit()
* 函數(shù)功能 : 初始化LCD屏
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
#ifndef LCD1602_4PINS
void init()
{
lcde=0;
write_com(0x38);//設(shè)置16x2顯示,5x7點(diǎn)陣,8位數(shù)據(jù)接口
write_com(0X0c);//開顯示,顯示光標(biāo),光標(biāo)閃爍
write_com(0X06);//寫一個(gè)字符后地址針加一,光標(biāo)加一
write_com(0X01);//數(shù)據(jù)指針清零,所有顯示清零
write_com(0X80);
}
#else
void init()
{
lcde=0;
write_com(0x32);//將8位總線轉(zhuǎn)為4位總線
write_com(0X28); //在四位線下的初始化
write_com(0X0c);
write_com(0X06);
write_com(0X1);
write_com(0X80);
}
#endif
void main()
{ uchar num;
init();
//write_com(0x80);//設(shè)置數(shù)據(jù)地址指針 液晶顯示RAM 有 80個(gè)字節(jié) 00H~27H 40H~67H,第一行第一個(gè)字處
for(num=0;num<11;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80+0x40);//第二行第一個(gè)字處
for(num=0;num<13;num++)
{
write_data(table1[num]);
delay(5);
}
delay(5);
while(1);
}
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
|
評分
-
查看全部評分
|