atmega8 例程:12864例程
扫描二维码
随时随地手机看文章
/*****************************************************************
* 函数库说明:ATMEGA8 NOKIA 12864LCD 驱动
* 版本: v1.02
*
* 说明: ST7920(带字库)
* AVR只可以运行在4Mhz晶振下,8Mhz就已经无法显示
atmega8的PB6和PB7为晶振引脚,使用外部晶振时这两个口不能做IO口用
* 版本更新: 详见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("芜湖联大");
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驱动类延时函数
** 入口参数:xms 需要延时的毫秒数
** 出口参数:无
** 使用说明:无
**********************************************************/
void Delay_MS(uint16 xms)
{
uint16 i,j;
for(j=0;i { for(i=0;i<1100;i++) { ; } } } /*********************************************************** ** 名称:uint8 LCD_Busy(void) ** 功能:LCD忙检测函数 ** 入口参数:无 ** 出口参数:result 状态值 ** 使用说明:无 **********************************************************/ 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) ** 功能:液晶写一个命令函数 ** 入口参数:com 写命令值 ** 出口参数:无 ** 使用说明:无 **********************************************************/ 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) ** 功能:液晶读一个字符数据函数 ** 入口参数:无 ** 出口参数:ReturnValue 读字符数据 ** 使用说明:无 **********************************************************/ 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) ** 功能:液晶写一个字符数据函数 ** 入口参数:date 写字符数据 ** 出口参数:无 ** 使用说明:无 **********************************************************/ void LCD_Write_Dat(uint8 date) { while(LCD_Busy()); LCD_RS=1; //选择数据寄存器 LCD_RW=0; //写 LCD_EN=0; Part=date; //数据值赋给P0口 //Delay_MS(1); LCD_EN=1; //Delay_MS(1); LCD_EN=0; } /*********************************************************** ** 名称:void LCD_Write_String(uint8 *str) ** 功能:液晶写一个字符串函数 ** 入口参数:str 写字符串 ** 出口参数:无 ** 使用说明:无 **********************************************************/ void LCD_Write_String(uint8 *str) { while(*str!='