?? lcd1602.c
字號:
#include <pic.h>
#include <stdio.h>
#include <string.h>
#define LcdRs RA2
#define LcdRw RA3
#define LcdEn RA4
#define DBPort PORTB
#define _nop_() asm("nop")
__CONFIG(0X2F50);
volatile unsigned int Count=0;
volatile unsigned char TempBuffer[10];
bank1 volatile unsigned char name[]="The 1602LCD Test",
name1[]="GO: by XuF";
//內(nèi)部等待函數(shù)**************************************************************************
void interrupt TMR(void)
{
#asm
CLRWDT
#endasm
TMR2IF=0;
}
void delay(unsigned int n)
{
unsigned int j;
for(j=0;j<n;j++);
}
void IntToStr(unsigned int t, unsigned char *str, unsigned char n)
{
unsigned char a[5];
char i, j;
a[0]=(t/10000)%10; //取得整數(shù)值到數(shù)組
a[1]=(t/1000)%10;
a[2]=(t/100)%10;
a[3]=(t/10)%10;
a[4]=(t/1)%10;
for(i=0;i<5;i++)
{
*str=a[i]+'0';
str++;
}
*str='\0';
str=str-5;
if(*str=='0')
{
*str=' ';
str++;
if(*str=='0')
{
*str=' ';
str++;
if(*str=='0')
{
*str=' ';
str++;
if(*str=='0')
{
*str=' ';
str++;
if(*str=='0')
{
*str=' ';
str++;
}
}
}
}
}
/*for(i=0; i<5; i++) //轉(zhuǎn)成ASCII碼
a[i]=a[i]+'0';
for(i=0; a[i]=='0' && i<=3; i++);
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; }
for(; i<5; i++)
{ *str=a[i]; str++; } //加入有效的數(shù)字
*str='\0'; */
}
unsigned char LCD_Wait(void)
{
LcdRs=0;
LcdRw=1;
_nop_();
LcdEn=1;
_nop_();
LcdEn=0;
return DBPort;
}
//向LCD寫入命令或數(shù)據(jù)************************************************************
#define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光標(biāo)返回原點(diǎn)
void LCD_Writedata(unsigned char input)
{
LcdRs=1;
LcdRw=0;
LcdEn=0;
_nop_();
DBPort=input;
_nop_();
LcdEn=1;
_nop_();
LcdEn=0;
_nop_();
delay(1000);
}
void LCD_Writecommand(unsigned char input)
{
LcdRs=0;
LcdRw=0;
LcdEn=0;
_nop_();
DBPort=input;
_nop_();
LcdEn=1;
_nop_();
LcdEn=0;
_nop_();
delay(1000);
}
//設(shè)置顯示模式************************************************************
#define LCD_SHOW 0x04 //顯示開
#define LCD_HIDE 0x00 //顯示關(guān)
#define LCD_CURSOR 0x02 //顯示光標(biāo)
#define LCD_NO_CURSOR 0x00 //無光標(biāo)
#define LCD_FLASH 0x01 //光標(biāo)閃動(dòng)
#define LCD_NO_FLASH 0x00 //光標(biāo)不閃動(dòng)
void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Writecommand(0x08|DisplayMode);
}
//設(shè)置輸入模式************************************************************
#define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default
#define LCD_MOVE 0x01 // 畫面可平移
#define LCD_NO_MOVE 0x00 //default
void LCD_SetInput(unsigned char InputMode)
{
LCD_Writecommand(0x04|InputMode);
}
void LCD_Initial()
{
LcdEn=0;
delay(1500);
LCD_Writecommand(0x38); //8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣
LCD_Writecommand(0x38);
LCD_Writecommand(0x38);
LCD_Writecommand(0x38);
//LCD_Writecommand(0x08);//顯示關(guān)
//LCD_Writecommand(0x01);//清屏
//LCD_Writecommand(0x06);//AC遞增, 畫面不動(dòng)
//LCD_Writecommand(0x0c);//開啟顯示, 無光標(biāo)
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //開啟顯示, 無光標(biāo)
LCD_Writecommand(LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC遞增, 畫面不動(dòng)
}
//************************************************************************
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Writecommand(0x80|x);//寫地址
if(y==1)
LCD_Writecommand(0x80|(x+0x40));
}
void Print(unsigned char *str)
{
while((*str)!='\0')
{
LCD_Writedata(*str);
str++;
}
}
void systeminitial()
{
OSCCON=0X62;
OSCTUNE=0X00;
OPTION=0X1F;
CMCON=0X07;
//CCPR1L=0;
//PR2=255;
//TMR2=0X00;
//T2CON=0X0C;
//PORTB=0X00;
TRISB=0X00;
PORTA=0X00;
TRISA=0X00;
ANSEL=0X00;
PIR1=0;
PIE1=0;
INTCON=0;
//WDTCON=0X00;
}
void main()
{
systeminitial();
LCD_Initial();
GotoXY(0,0);
Print(name);
GotoXY(0,1);
Print(name1);
while(1)
{
IntToStr(Count++,&TempBuffer[0],5);
GotoXY(3,1);
Print(&TempBuffer[0]);
delay(1000);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -