|
最近在網(wǎng)上查資料的時候找到了個LCD1602顯示代碼,但是我好像看不懂里面p0=dat;代表什么,在前面沒有定義p0這個全局變量,也沒有指明p0指向那個腳位,我想的是這個是不是指p0^0~p0^7的所有腳位,代碼如下(看不懂的那個在寫命令和寫數(shù)據(jù)函數(shù)里)
/*------------------------
功能:LCD1602顯示兩行數(shù)據(jù)
Author: Zhang Kaizhou
Date: 2019-6-3 12:42:22
------------------------*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table0[] = {"0123456789ABCDEF"}; // 每行的字符數(shù)據(jù)
uchar code table1[] = {"0123456789abcdef"};
sbit lcdrs = P1^2; // LCD數(shù)據(jù)/命令選擇端
sbit lcdrw = P1^3; // LCD讀寫選擇端
sbit lcden = P1^4; // LCD使能端,高脈沖有效
uchar num;
void init();
void writeCommand(uchar command);
void delay(uchar xms);
void writeData(uchar dat);
void main()
{
init();
writeCommand(0x80); // 將數(shù)據(jù)指針定位到第一行的首地址
for(num = 0; num < 16; num++)
{
writeData(table0[num]);
delay(5);
}
writeCommand(0x80 + 0x40); // 將數(shù)據(jù)指針定位到第二行的首地址
for(num = 0; num < 16; num++)
{
writeData(table1[num]);
delay(5);
}
while(1);
}
/*初始化LCD1602的設置*/
void init()
{
lcden = 0; // 拉低使能端,準備產(chǎn)生使能高脈沖信號
writeCommand(0x38); // 顯示模式設置(16x2, 5x7點陣,8位數(shù)據(jù)接口)
writeCommand(0x0c); // 開顯示,不顯示光標
writeCommand(0x06); // 寫一個字符后地址指針自動加1
writeCommand(0x01); // 顯示清零,數(shù)據(jù)指針清零
}
/*寫指令函數(shù)*/
void writeCommand(uchar command)
{
lcdrs = 0; // 命令選擇
lcdrw = 0;
P0 = command;
delay(5);
lcden = 1; // 產(chǎn)生一個正脈沖使能信號
delay(5);
lcden = 0;
}
/*寫數(shù)據(jù)函數(shù)*/
void writeData(uchar dat)
{
lcdrs = 1; // 數(shù)據(jù)選擇
lcdrw = 0;
P0 = dat;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
/*延時函數(shù)*/
void delay(uchar xms)
{
uint i, j;
for(i = xms; i > 0; i--)
for(j = 110; j > 0; j--);
}
|
-
2.jpg
(168.67 KB, 下載次數(shù): 99)
下載附件
2021-3-10 12:58 上傳
|