當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]/****************************************************************** 函數(shù)庫(kù)說(shuō)明:ATMEGA8 NOKIA 12864LCD 驅(qū)動(dòng)* 版本: v1.02 * * 說(shuō)明: S

/*****************************************************************

* 函數(shù)庫(kù)說(shuō)明:ATMEGA8 NOKIA 12864LCD 驅(qū)動(dòng)

* 版本: v1.02

*

* 說(shuō)明: ST7920(帶字庫(kù))

* AVR只可以運(yùn)行在4Mhz晶振下,8Mhz就已經(jīng)無(wú)法顯示

atmega8的PB6和PB7為晶振引腳,使用外部晶振時(shí)這兩個(gè)口不能做IO口用

* 版本更新: 詳見(jiàn)readme.txt


*

******************************************************************

*注意: RS/CS PC0

* RW/SID PC1

* E/SCLK PC2

* PSB PC3

* RST PC4

* DATA PORTB

******************************************************************/

#include "includes.h"

int main(void)

{

//12864初始化

LCD_Init();

//清屏,全部填0

LCD12864_DisplayCLR();

while(1)

{

//漢字顯示

LCD_Pos(1,1);

// LCD_Write_String(dis1);

LCD_Write_String("蕪湖聯(lián)大");

Delay_MS(5);

LCD_Pos(2,1);

// LCD_Write_String(dis2);

LCD_Write_String("飛思卡爾工作室");

Delay_MS(5);

LCD_Pos(3,1);

// LCD_Write_String(dis3);

LCD_Write_String("20110808");

Delay_MS(5);

LCD_Pos(4,1);

// LCD_Write_String(dis4);

LCD_Write_String("龐輝");

Delay_MS(500);

}

return 0;

}


view plainprint?

#include "includes.h"

/***********************************************************

** 名稱:void Delay_MS(uint16 xms)

** 功能:LCD12864驅(qū)動(dòng)類延時(shí)函數(shù)

** 入口參數(shù):xms 需要延時(shí)的毫秒數(shù)

** 出口參數(shù):無(wú)

** 使用說(shuō)明:無(wú)

**********************************************************/

void Delay_MS(uint16 xms)

{

uint16 i,j;

for(j=0;i

{

for(i=0;i<1100;i++)

{

;

}

}

}

/***********************************************************

** 名稱:uint8 LCD_Busy(void)

** 功能:LCD忙檢測(cè)函數(shù)

** 入口參數(shù):無(wú)

** 出口參數(shù):result 狀態(tài)值

** 使用說(shuō)明:無(wú)

**********************************************************/

uint8 LCD_Busy(void)

{

uint8 result = 0;

uint8 temp = 0;

Part = 0xff;

//

DDR_DATA = 0x00;

LCD_RS=0;

LCD_RW=1;

LCD_EN= 1;

temp = Part_Pin;

result=(temp & 0x80);

LCD_EN=0;

//

DDR_DATA = 0xff;

return result;

}

/***********************************************************

** 名稱:void LCD_Write_Cmd(uint8 com)

** 功能:液晶寫一個(gè)命令函數(shù)

** 入口參數(shù):com 寫命令值

** 出口參數(shù):無(wú)

** 使用說(shuō)明:無(wú)

**********************************************************/

void LCD_Write_Cmd(uint8 com)

{

while(LCD_Busy());

LCD_RS=0; //選擇指令寄存器

LCD_RW=0; //寫

LCD_EN=0;

Part=com; //指令值賦給P0口

//這句延遲不能丟,不然有花屏

Delay_MS(1);

LCD_EN=1;

//Delay_MS(1);

LCD_EN=0;

}

/***********************************************************

** 名稱:uint8 LCD_Read_Dat(void)

** 功能:液晶讀一個(gè)字符數(shù)據(jù)函數(shù)

** 入口參數(shù):無(wú)

** 出口參數(shù):ReturnValue 讀字符數(shù)據(jù)

** 使用說(shuō)明:無(wú)

**********************************************************/

uint8 LCD_Read_Dat(void)

{

uint8 ReturnValue;

while(LCD_Busy());

Part = 0xff;

//

DDR_DATA = 0x00;

LCD_RS = 1;

LCD_RW = 1;

LCD_EN = 1;

//Delay_MS(1);

ReturnValue = Part_Pin;

LCD_EN = 0;

//

DDR_DATA = 0xff;

//Delay_MS(1);

return ReturnValue;

}

/***********************************************************

** 名稱:void LCD_Write_Dat(uint8 date)

** 功能:液晶寫一個(gè)字符數(shù)據(jù)函數(shù)

** 入口參數(shù):date 寫字符數(shù)據(jù)

** 出口參數(shù):無(wú)

** 使用說(shuō)明:無(wú)

**********************************************************/

void LCD_Write_Dat(uint8 date)

{

while(LCD_Busy());

LCD_RS=1; //選擇數(shù)據(jù)寄存器

LCD_RW=0; //寫

LCD_EN=0;

Part=date; //數(shù)據(jù)值賦給P0口

//Delay_MS(1);

LCD_EN=1;

//Delay_MS(1);

LCD_EN=0;

}

/***********************************************************

** 名稱:void LCD_Write_String(uint8 *str)

** 功能:液晶寫一個(gè)字符串函數(shù)

** 入口參數(shù):str 寫字符串

** 出口參數(shù):無(wú)

** 使用說(shuō)明:無(wú)

**********************************************************/

void LCD_Write_String(uint8 *str)

{

while(*str!='