ICCAVR->8515和LCD的接口源程序
發(fā)布時間:2007/9/10 0:00:00 訪問次數(shù):826
AVR8515 和 HD74480字符LCD的接口程序
//
// 硬件連接方式:LCD的D0-D7接8515的c口,
// LCD的 RS ->PA0
// LCD的 RW ->PA1
// LCD的 E ->PA0
// 。!注意VEE,有時需要接負電源
---------------------------------------------------------------------
#include
#define RS_H asm("sbi 0x1B,0")
#define RS_L asm("cbi 0x1B,0")
#define RW_H asm("sbi 0x1B,1")
#define RW_L asm("cbi 0x1B,1")
#define E_H asm("sbi 0x1b,2")
#define E_L asm("cbi 0x1b,2")
//******************************************
void Delay()
{
unsigned char di;
for(di=0;di<20;di++);
}
//判斷l(xiāng)cd是否是內(nèi)部操作狀態(tài)
char Lcd_Busy()
{
char rb;
DDRC=0x0; //端口c設(shè)為輸入方式
E_L;
RS_L;
RW_H;
Delay();
E_H;
Delay();
rb=PINC;
rb=rb&0x80;
E_L;
DDRC=0xff; //端口c設(shè)為輸出方式
return rb;
}
//向Lcd發(fā)送命令程序
void Lcd_Command(unsigned char bComm)
{
while(Lcd_Busy());
E_L;
RS_L;
RW_L;
Delay();
E_H;
PORTC=bComm;
Delay();
E_L;
Delay();
}
//向lcd寫入一個字符
void Lcd_Write(char wb)
{
while(Lcd_Busy());
E_L;
RS_H;
RW_L;
Delay();
E_H;
PORTC=wb;
Delay();
E_L;
Delay();
}
//初始化時用的寫命令程序,和Lcd_Command的區(qū)別是不判斷忙標志
void Lcd_InitCommand(unsigned char bComm)
{
E_L;
RS_L;
RW_L;
Delay();
E_H;
PORTC=bComm;
Delay();
E_L;
}
//初始化:8位接口,2行x16字符的工作方式
void Lcd_Init()
{
char i;
Lcd_InitCommand(0x30);
for(i=0;i<100;i++) Delay();
Lcd_InitCommand(0x30);
for(i=0;i<10;i++) Delay();
Lcd_InitCommand(0x30);
Lcd_Command(0x38);
Lcd_Command(0x08);
Lcd_Command(0x01);
Lcd_Command(0x06);
Lcd_Command(0x02);
Lcd_Command(0x0E);
}
//一個測試LCD的小程序
int main()
{
const char *str="Hello,This is Dai in HIT.";
DDRA=0xFF;
DDRC=0xFF;
Lcd_Init();
while(*str) Lcd_Write( *str++ );
while(1);
AVR8515 和 HD74480字符LCD的接口程序
//
// 硬件連接方式:LCD的D0-D7接8515的c口,
// LCD的 RS ->PA0
// LCD的 RW ->PA1
// LCD的 E ->PA0
// 。!注意VEE,有時需要接負電源
---------------------------------------------------------------------
#include
#define RS_H asm("sbi 0x1B,0")
#define RS_L asm("cbi 0x1B,0")
#define RW_H asm("sbi 0x1B,1")
#define RW_L asm("cbi 0x1B,1")
#define E_H asm("sbi 0x1b,2")
#define E_L asm("cbi 0x1b,2")
//******************************************
void Delay()
{
unsigned char di;
for(di=0;di<20;di++);
}
//判斷l(xiāng)cd是否是內(nèi)部操作狀態(tài)
char Lcd_Busy()
{
char rb;
DDRC=0x0; //端口c設(shè)為輸入方式
E_L;
RS_L;
RW_H;
Delay();
E_H;
Delay();
rb=PINC;
rb=rb&0x80;
E_L;
DDRC=0xff; //端口c設(shè)為輸出方式
return rb;
}
//向Lcd發(fā)送命令程序
void Lcd_Command(unsigned char bComm)
{
while(Lcd_Busy());
E_L;
RS_L;
RW_L;
Delay();
E_H;
PORTC=bComm;
Delay();
E_L;
Delay();
}
//向lcd寫入一個字符
void Lcd_Write(char wb)
{
while(Lcd_Busy());
E_L;
RS_H;
RW_L;
Delay();
E_H;
PORTC=wb;
Delay();
E_L;
Delay();
}
//初始化時用的寫命令程序,和Lcd_Command的區(qū)別是不判斷忙標志
void Lcd_InitCommand(unsigned char bComm)
{
E_L;
RS_L;
RW_L;
Delay();
E_H;
PORTC=bComm;
Delay();
E_L;
}
//初始化:8位接口,2行x16字符的工作方式
void Lcd_Init()
{
char i;
Lcd_InitCommand(0x30);
for(i=0;i<100;i++) Delay();
Lcd_InitCommand(0x30);
for(i=0;i<10;i++) Delay();
Lcd_InitCommand(0x30);
Lcd_Command(0x38);
Lcd_Command(0x08);
Lcd_Command(0x01);
Lcd_Command(0x06);
Lcd_Command(0x02);
Lcd_Command(0x0E);
}
//一個測試LCD的小程序
int main()
{
const char *str="Hello,This is Dai in HIT.";
DDRA=0xFF;
DDRC=0xFF;
Lcd_Init();
while(*str) Lcd_Write( *str++ );
while(1);
熱門點擊
- AVR單片機在蓄電池剩余電量測試儀中的應(yīng)用
- BS2系統(tǒng)編程與應(yīng)用實例
- ASM5無參數(shù)化調(diào)用C51函數(shù)的實現(xiàn)
- 用PIC單片機實現(xiàn)50Hz鎖相信號發(fā)生器
- 便攜式動態(tài)心電信號數(shù)據(jù)采集器的設(shè)計
- 單片機控制的雙路有源濾波器設(shè)計
- SmartLock并口單片機軟件狗加密技術(shù)
- 單片機應(yīng)用PS/2鍵盤的實例
- ICCAVR->8515和LCD的接口源程序
- 增強型51
推薦技術(shù)資料
- 硬盤式MP3播放器終級改
- 一次偶然的機會我結(jié)識了NE0 2511,那是一個遠方的... [詳細]
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究