?? 可用的lcd6線(xiàn)法.txt
字號(hào):
/*-------------------------------------------------------
作者:陳曉濤
日期:2007 07 27
名稱(chēng):1602液晶六線(xiàn)接法驅(qū)動(dòng)程序
功能:調(diào)用showchar()與showstring()兩個(gè)函數(shù)可寫(xiě)字符或字符串
描述:RW接低電平,EN和RS為控制口 數(shù)據(jù)線(xiàn)只用到D7-D4
-------------------------------------------------------*/
#include <iom16.h>
#include <intrinsics.h>
#define LCD_EN_PORT PORTD
#define LCD_RW_PORT PORTD
#define LCD_RS_PORT PORTD
#define LCD_CON_DDR DDRD
#define LCD_DATA_PORT PORTA
#define LCD_DATA_DDR DDRA
#define LCD_DATA_PIN PINA
#define LCD_EN 0x10 //portd4 out
#define LCD_RS 0x40 //portd6 out
#define LCD_RW 0X20 //portd5 out
#define LCD_DATA 0xf0 //porta4/5/6/7 out 這里若要改用低四位則須改寫(xiě)程序的相應(yīng)內(nèi)容
/*--------------------------------------------------------------------------------------------------
Public function prototypes
--------------------------------------------------------------------------------------------------*/
void LCD_IO_init(void);
void LCD_init (void);
void LCD_en_write (void);
void LCD_write_char (unsigned command,unsigned data);
void LCD_set_xy (unsigned char x, unsigned char y);
void showchar(unsigned char X,unsigned char Y,unsigned char s);//顯示字符子函數(shù)
void showstring(unsigned char X,unsigned char Y,unsigned char *s);//顯示字符串子函數(shù)
void delay_nus (unsigned int n);
void delay_nms (unsigned int n);
void LCD_IO_init(void)
{
LCD_DATA_DDR|=LCD_DATA; // 數(shù)據(jù)為輸出
LCD_CON_DDR|=LCD_RS|LCD_EN|LCD_RW ; //控制端口設(shè)置為輸出
LCD_RW_PORT&=~LCD_RW;//RW置為低電平
}
void LCD_init(void) //液晶初始化
{
delay_nms(15);
LCD_write_char(0x28,0); //4位顯示
LCD_write_char(0x0c,0); //顯示開(kāi)
LCD_write_char(0x01,0); //清屏
}
void showchar(unsigned char X,unsigned char Y,unsigned char s)
{
LCD_set_xy( X, Y ); //寫(xiě)地址
LCD_write_char( 0, s );
}
void showstring(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_set_xy( X, Y ); //寫(xiě)地址
while (*s) // 寫(xiě)顯示字符
{
LCD_write_char( 0, *s );
s++;
}
}
void LCD_set_xy( unsigned char x, unsigned char y ) //寫(xiě)地址函數(shù)
{
unsigned char address;
if (y == 0) address = 0x80 + x;
else
address = 0xc0 + x;
LCD_write_char( address, 0 );
}
void LCD_en_write(void) //液晶使能
{
LCD_EN_PORT|=LCD_EN;
delay_nus(1);
LCD_EN_PORT&=~LCD_EN;
}
void LCD_write_char(unsigned command,unsigned data) // 寫(xiě)數(shù)據(jù)
{
unsigned command_temp,data_temp;
command_temp=command;
data_temp=data;
delay_nus(16);
if(command==0)
{
LCD_RS_PORT|=LCD_RS; //RS=1
LCD_DATA_PORT&=0X0f;
LCD_DATA_PORT|=data_temp&0xf0; //寫(xiě)高四位
LCD_en_write();
data_temp=data_temp<<4;
LCD_DATA_PORT&=0X0f;
LCD_DATA_PORT|=data_temp&0xf0; //寫(xiě)低四位
LCD_en_write();
}
else
{
LCD_RS_PORT&=~LCD_RS; //RS=0
LCD_DATA_PORT&=0X0f;
LCD_DATA_PORT|=command_temp&0xf0; //寫(xiě)高四位
LCD_en_write();
command_temp=command_temp<<4;
LCD_DATA_PORT&=0x0f;
LCD_DATA_PORT|=command_temp&0xf0; //寫(xiě)低四位
LCD_en_write();
}
}
void main(void)
{
LCD_IO_init();
LCD_init();
for(;;) //for循環(huán)
{
//LCD_write_char(0x01,0);
//delay_nms(2);
showchar(0,1,'A');
__delay_cycles(1000000);
showstring(0,0,"GOODLUCK TO HDU!!");
__delay_cycles(1000000);
showstring(0,0,"WELCOME TO HDU!!");
__delay_cycles(1000000);
showstring(0,1,"www.OURAVR.com!");
__delay_cycles(1000000);
showstring(0,0,"happy new year!");
__delay_cycles(1000000);
//showstring(0,1,"amork:everfriend");
//__delay_cycles(1000000);
showstring(0,0," ");
__delay_cycles(1000000);
showstring(0,1," ");
__delay_cycles(1000000);
}
}
/*-----------------------------------------------------------------------
延時(shí)函數(shù)
系統(tǒng)時(shí)鐘:8M
-----------------------------------------------------------------------*/
void delay_1us(void) //1us延時(shí)函數(shù)
{
__delay_cycles(1);
}
void delay_nus(unsigned int n) //N us延時(shí)函數(shù)
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延時(shí)函數(shù)
{
__delay_cycles(1000);
}
void delay_nms(unsigned int n) //N ms延時(shí)函數(shù)
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -