atmega8 例程:12864例程
/*****************************************************************
* 函數(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!='