我是MCU编程的初学者,也非常渴望了解它。最近我获得了“Aptinex开发板rev.6”,它已经附加了许多功能。我还买了一块PIC18F4550将它插在电路板上。我已经设法理解I / O操作的基础知识是如何工作的,但是现在我偶然发现了连接到开发板的LCD。我在谷歌的许多教程页面之一中发现了这些代码,并决定试用它,因为它看起来很简单。代码工作没有问题。
//File name 'LCD_Display_String_Original.c'
#define _XTAL_FREQ 8000000
#define RS LATD0
#define EN LATD1
#define D4 LATD2
#define D5 LATD3
#define D6 LATD4
#define D7 LATD5
#include <xc.h>
#include "lcd.h"
void delay_ms(unsigned int delay_value)
{
while(delay_value-- > 0)
// While desired delay value is more than 0, decrement that value by 1 after each 10ms
{
__delay_ms(1);
// Wait 10ms
}
}
int main()
{
TRISD = 0b00000000;
Lcd_Init();
while(1)
{
Lcd_Clear();
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Hello world!");
delay_ms(1000);
}
}
我的问题是,有人可以请说明函数 Lcd_port(char a); 中的内容,位于lcd.h文件中。无法理解测试的条件以及它们的真假。
//File name 'lcd.h'
#include <xc.h>
#include <stdio.h>
void Lcd_Port(char a)
{
if(a & 1)
D4 = 1;
else
D4 = 0;
if(a & 2)
D5 = 1;
else
D5 = 0;
if(a & 4)
D6 = 1;
else
D6 = 0;
if(a & 8)
D7 = 1;
else
D7 = 0;
}
void Lcd_Cmd(char a)
{
RS = 0; // => RS = 0
Lcd_Port(a);
EN = 1; // => E = 1
__delay_ms(4);
EN = 0; // => E = 0
}
Lcd_Clear()
{
Lcd_Cmd(0);
Lcd_Cmd(1);
}
void Lcd_Set_Cursor(char a, char b)
{
char temp,z,y;
if(a == 1)
{
temp = 0x80 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
else if(a == 2)
{
temp = 0xC0 + b - 1;
z = temp>>4;
y = temp & 0x0F;
Lcd_Cmd(z);
Lcd_Cmd(y);
}
}
void Lcd_Init()
{
Lcd_Port(0x00);
__delay_ms(20);
Lcd_Cmd(0x03);
__delay_ms(5);
Lcd_Cmd(0x03);
__delay_ms(11);
Lcd_Cmd(0x03);
Lcd_Cmd(0x02);
Lcd_Cmd(0x02);
Lcd_Cmd(0x08);
Lcd_Cmd(0x00);
Lcd_Cmd(0x0C);
Lcd_Cmd(0x00);
Lcd_Cmd(0x06);
}
void Lcd_Write_Char(char a)
{
char temp,y;
temp = a&0x0F;
y = a&0xF0;
RS = 1; // => RS = 1
Lcd_Port(y>>4); //Data transfer
EN = 1;
__delay_us(40);
EN = 0;
Lcd_Port(temp);
EN = 1;
__delay_us(40);
EN = 0;
}
void Lcd_Write_String(char *a)
{
int i;
for(i=0;a[i]!='\0';i++)
Lcd_Write_Char(a[i]);
}
void Lcd_Shift_Right()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x0C);
}
void Lcd_Shift_Left()
{
Lcd_Cmd(0x01);
Lcd_Cmd(0x08);
}
如前所述,代码完美无缺。我真的需要有人来解释这部分是如何工作的。任何帮助将受到高度赞赏!