lcd1602.c
//???pmlab x??????????????gb2312??
/*
lcd1602.c?lcd1602.h?????????????
DisplayListChar(unsigned charx, unsigned char y,unsigned char* str)???????
DisplayOneChar(unsigned charx, unsigned char y,unsigned char str)??????
x???y???ch?????'a'?str??????"i am a string"?
????????????lcd1602.h???#define??????
??lcd1602.c???void LCD1602_GPIO_Init(void)???????
*/
#include <pic.h> //??PIC16F87XA???????
#include "lcd1602.h"
//1602???????
//---------------------------------------
void delay(void)
{
int i;
for (i = 0;i < 200;i++);
}
//---------------------------------------
//???1602?????
//---------------------------------------
void LCD1602_Write_Instruction(unsigned char combuf)
{
Lcd_Date=combuf; //??????RD???DB
RS=0; //???????
// RW=0; //?????
E=0;
delay(); //?????
E=1; //E?????????1602??
asm("NOP"); //????????????????1us
E=0; //???????E???
}
//---------------------------------------
//???1602?????
//---------------------------------------
void LCD1602_Write_data(unsigned char databuf)
{
Lcd_Date=databuf; //??????RD???DB
RS=1; //???????
// RW=0; //?????
E=0;
delay(); //?????
E=1; //E?????????1602??
asm("NOP"); //????????????????1us
E=0; //???????E???
}
//---------------------------------------
//???1602???????
//---------------------------------------
void LCD1602_init(void)
{
LCD1602_Write_Instruction(0x38); //8?????????????5*7????
LCD1602_Write_Instruction(0x08); //?????????
LCD1602_Write_Instruction(0x01); //??
LCD1602_Write_Instruction(0x06); //???????????????????
LCD1602_Write_Instruction(0x0C); //?????????
}
/****************??????????????*************/
void DisplayOneChar(unsigned char X,unsigned char Y,const unsigned char DData)
{
Y&=1;
X&=15;
if(Y)X|=0x40; //?y?1???????????+0X40
X|=0x80; //???????+0X80
LCD1602_Write_Instruction(X);
LCD1602_Write_data(DData);
}
/***********??????????????***********/
void DisplayListChar(unsigned char X,unsigned char Y,const unsigned char *DData)
{
unsigned char ListLength=0;
Y&=0x01;
X&=0x0f;
while(X<16 && DData[ListLength])
{
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++;
X++;
}
}
void LCD1602_GPIO_Init(void)
{
ADCON1=0X07;//??A?????????????????IO
TRISE=0B11111001; //RA5 RA2 RA3??
TRISD=0B00000000; //RD7-RD0??
PORTA=0B00000000; //???RA7-RA0???
PORTD=0B00000000; //???RD7-RD0???
}
|