?? yj1602.c
字號:
/*******************************************
文件:YJ1602.C
環境:編譯為ICC AVR6.25A,仿真為AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驅動開發板上的1602液晶
備注:參考《AVR系列單片機C語言編程與應用實例》(清華大學出版社)
/******************************************/
#include <iom16v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#include <stdio.h> //標準輸入輸出頭文件
/*******************************************
函數名稱: LCD1602_portini
功 能: 初始化1602液晶用到的IO口
參 數: 無
返回值 : 無
/********************************************/
void LCD1602_portini(void)
{
LCDa_CTRL_DDR |= BIT(LCDa_RS)|BIT(LCDa_RW)|BIT(LCDa_E);//配置控制管腳為輸出
LCDa_DATA_DDR |= 0xFF;//配置數據管腳為輸出
}
/*******************************************
函數名稱: LCD1602_readbyte
功 能: 從1602液晶讀出一個字節數據或者指令
參 數: DatCmd--為iDat時是數據,為iCmd時是指令
返回值 : dByte--讀回的數據或者指令
/********************************************/
uchar LCD1602_readbyte(uchar DatCmd)
{
uchar dByte;
if (DatCmd == iCmd) //指令操作
LCDa_CLR_RS;
else
LCDa_SET_RS;
LCDa_SET_RW; //讀操作
LCDa_SET_E;
LCDa_DATA_DDR=0x00; //數據總線定義為輸入
dByte=LCDa_DI; //讀數據或者指令
Delayms(1); //時序調整
LCDa_CLR_E;
LCDa_DATA_DDR|=0xff; //數據總線還原為輸出
return dByte;
}
/*******************************************
函數名稱: LCD1602_sendbyte
功 能: 向1602液晶寫入一個字節數據或者指令
參 數: DatCmd--為iDat時是數據,為iCmd時是指令
dByte--為寫入1602的數據或者指令
返回值 : 無
/********************************************/
void LCD1602_sendbyte(uchar DatCmd, uchar dByte)
{
if (DatCmd == iCmd) //指令操作
LCDa_CLR_RS;
else
LCDa_SET_RS;
LCDa_CLR_RW; //寫操作
LCDa_SET_E;
LCDa_DO = dByte; //寫入數據
Delayms(1);
LCDa_CLR_E;
}
/*******************************************
函數名稱: LCD1602_sendstr
功 能: 向1602液晶寫入一個字符串
參 數: ptString--字符串指針
返回值 : 無
/********************************************/
void LCD1602_sendstr(uchar *ptString)
{
while((*ptString)!='\0') //字符串未結束
{
LCD1602_sendbyte(iDat, *ptString++);
}
}
/*******************************************
函數名稱: LCD1602_clear
功 能: 1602液晶清屏
參 數: 無
返回值 : 無
/********************************************/
void LCD1602_clear(void)
{
LCD1602_sendbyte(iCmd,LCDa_CLS);
Delayms(2);// 清屏指令寫入后,2ms 的延時是很必要的!!!
}
/*******************************************
函數名稱: LCD1602_readBF
功 能: 1602液晶清屏
參 數: 無
返回值 : busy--為1時忙,為0時可以接收指令
/********************************************/
uchar LCD1602_readBF(void)
{
uchar busy;
busy=LCD1602_readbyte(iCmd); //讀回BF標志和地址
if(busy&0x80) //忙
busy=1;
else //不忙,可以寫入
busy=0;
return busy;
}
/*******************************************
函數名稱: LCD1602_gotoXY
功 能: 移動到指定位置
參 數: Row--指定的行
Col--指定的列
返回值 : 無
/********************************************/
void LCD1602_gotoXY(uchar Row, uchar Col)
{
switch (Row) //選擇行
{
case 2:
LCD1602_sendbyte(iCmd, LCDa_L2 + Col); break; //寫入第2行的指定列
default:
LCD1602_sendbyte(iCmd, LCDa_L1 + Col); break; //寫入第1行的指定列
}
}
/*******************************************
函數名稱: LCD1602_initial
功 能: 1602液晶初始化
參 數: 無
返回值 : 無
/********************************************/
void LCD1602_initial(void)
{
Delayms(100); // 等待內部復位
LCD1602_portini(); //端口初始化
LCD1602_sendbyte(iCmd, LCDa_FUNCTION); // 功能、模式設定
while(LCD1602_readBF());
LCD1602_sendbyte(iCmd, LCDa_ON); //打開顯示
while(LCD1602_readBF());
LCD1602_clear(); //清屏
while(LCD1602_readBF());
LCD1602_sendbyte(iCmd, LCDa_ENTRY); // 輸入模式設定
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -