EDN首页   博客首页

日志档案

发表于 2008-5-1 9:27:17

12

标签: 液晶驱动  C程序  学习  开发板  

[原创]字库12864液晶ST7920驱动C文件!(含原理图)

    今天五一节,大家是不是出去旅游去了,我今天没有事情,也没有出去游玩,传些原创资料给大家参考!

   记得我刚开始用含字库12864液晶时,找一找现成的C程序吧,可惜没有找到,后来干脆自己写一个吧。现在公开给大家参考,可能不是最好的,但我用着很好用!

/*
***************************************************************************
*     (C) Copyright 2007,单片机初学者园地
*                          All Rights reserved.
*项目名称:             
*本文件名称:LCD12864.c  
* 完成作者 : 单片机初学者 QQ:50501160  
ahai0306@sina.com
* 当前版本 : V1.0       
* 完成日期 : 2006年9月9日
* 描    述 : 
*                此程序实现,完成液晶ST7920的驱动程序
*            
我的博客:http://blog.ednchina.com/ahai0306/
*  开发板介绍:http://blog.ednchina.com/ahai0306/84416/message.aspx
淘宝网店铺地址:http://shop35284066.taobao.com/
我的论坛:http://dianzi.5d6d.com/?fromuser=mcu_51          
****************************************************************************
*/

#include "Lcd12864.h"
#include <INTRINS.H>      //调用头文件

/******本段为硬件I/O口定义********/
sbit  EN="P3"^4;
sbit  RW="P3"^3;
sbit  RS="P3"^2;
sbit  Lcd_RST=P3^1;

#define NOP  _nop_(); _nop_()

//延时函数

void delay(uint16 data i)
{
  while(i--);
}

//检测液晶忙状态函数

uint8 CheckBusy(void)
{
  uint8 a;
  RS=0;
  RW=1;
 NOP;
  EN=1;
 NOP;
 P2=0xff;
  a=P2;
 EN=0;
      if(a&0x80)
    return OK;
       else
          return NOK;
}

//向液晶发送命令
void SendLcdCommand (uint8 command)
{
 NOP;NOP;
 
// delay(500);
 while(CheckBusy());
 RS=0;
  RW=0;
  P2=command;
  EN=1;
  NOP;NOP;
  EN=0;

 //向液晶发送数据
void SendLcdData (uint8 dat)
{
 NOP;NOP;
 while(CheckBusy());
// delay(500);
 RS=1;
  RW=0;
  P2=dat;
  EN=1;
  NOP;NOP;
  EN=0;
}

//液晶初始化

void LCD_init(void)

 Lcd_RST = 0;
 delay(5000);
    Lcd_RST = 1;
 delay(500);
  
 SendLcdCommand(0x34); //扩充指令操作
 SendLcdCommand(0x30); //基本指令操作
 SendLcdCommand(0x01); //清除显示
 SendLcdCommand(0x06); //指定在资料写入或读取时,光标的移动方向
 SendLcdCommand(0x0c); //开显示,关光标,不闪烁
}

//清屏

void Clear_display(void)
{
  SendLcdCommand(0x01); //清除显示
}

//从第几行,第几列显示字符串(汉字),x代表行,y代表列

void  Disp_lcd( uint8  x, uint8  y, uint8 *chinese )
{
  uint8  xtemp;;
  switch(x)
  {
    case 0: xtemp="0x80"+y; break;
 case 1: xtemp="0x90"+y; break;
 case 2: xtemp="0x88"+y; break;
 case 3: xtemp="0x98"+y; break;
 default:break;
 }
// xtemp== x%2*0x10 + x/2*0x08 + y + 0x80;     地址公式
   SendLcdCommand(xtemp);
   do
 {
  SendLcdData(*chinese);
  chinese++;
 }while(*chinese!=0);
 }

点击看大图

系统分类: 单片机   |   用户分类: 单片机程序   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(2414)    回复(2)  

投一票您将和博主都有获奖机会!

  • megood

    2008-5-8 0:49:22

    top!不过ST7930对字符的反白选择显示,以及显示图像的支持不怎么好,操作复杂。

  • ahai0306

    2008-5-8 11:21:07

    楼上说的是,对汉字菜单还是比较方便的