PIC单片机驱动LCD12864液晶显示闪动字体程序

发布者:灵感之翼最新更新时间:2015-04-27 来源: 51hei关键字:PIC单片机  LCD12864  液晶显示  闪动字体 手机看文章 扫描二维码
随时随地手机看文章
/**********************************************************************

*** 功能:12864LCD显示  显示闪动字体,各位同学可以自己修改。
*** 实验内容:0x81 0x90 0x88 0x98 分别是LCD四行的行首地址,我们操作LCD现实的字符就是分别放在这里面的
*** 开发板连接方法: 接上有字库LCD12864 注意调节对比度,LCD12864工作电流较大,请用外接电源供电。
****************************************************************************************************/
#include
__CONFIG(0xff32);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡

#define  rs          RA5                            //定义LCD的数据/命令控制口
#define  rw          RA4                            //定义LCD的读/写控制口
#define  e           RA3                            //定义LCD的使能口
#define  psb         RA2                            //定义通信方式控制口
#define  rst         RA1                            //定义复位口
#define  nop()  asm("nop")                  //定义空操作函数

const unsigned char TAB1A[ ] = {"中科技电子网"};
const unsigned char TAB1B[ ] = {***.*********.***"};
const unsigned char TAB1C[ ] = {"0755-110"};
const unsigned char TAB1D[ ] = {"HD-34 PIC 开发板"};

unsigned int lcd_x;                        //定义LCD页地址寄存器
unsigned int lcd_y;                        //定义LCD列地址寄存器
bit busy;                                 //定义LCD忙标志位

void init();                        //申明I/O口设置函数
void lcd_init();                    //申明LCD初始化函数
void clear_p();                     //申明清屏函数
void writelcd(const unsigned char *pt);                           //声明LCD写字符串函数
void wr_zb();                       //申明有关显示设置函数
void flash();                       //申明设置LCD显示闪烁函数
void send_d(unsigned char x);       //申明送一字节数据显示函数
void send_i(unsigned char x);       //申明送一字节控制命令函数
void chk_busy();                    //申明检测LCD是否工作繁忙函数
void delay();                       //申明延时函数1,供各命令之间的延时和决定显示快慢
void delay1();                      //申明延时函数2,用以决定显示闪烁快慢

/****************************************************************************
* 名    称:main()
* 功    能:主函数
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void main()
{
        init();                                                            //调用I/O口设置函数
        while (1)
        {
                lcd_init();                          //调用LCD初始化函数
                clear_p();                           //调用清屏函数
                send_i(0x81);                                         //第1行
                writelcd(TAB1A);
                send_i(0x90);                                        //第2行
                writelcd(TAB1B);
                send_i(0x88);                                        //第3行
                writelcd(TAB1C);
                send_i(0x98);                                        //第4行
                writelcd(TAB1D);
                delay();                             //延长显示一段时间
                flash();                             //调用显示闪烁函数
                clear_p();                           //调用清屏函数
        }
}

/****************************************************************************
* 名    称:init()
* 功    能:I/O口初始化
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void init()
{        
        ADCON1 = 0X07;                      //设置A口为普通I/O口
        TRISA = 0X00;                       //设置A口为输出
        TRISD = 0X00;                       //设置D口为输出
  PORTA = 0X00000001;
}


/****************************************************************************
* 名    称:lcd_init()
* 功    能:LCD初始化
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void lcd_init()
{
        rst = 0;                            //复位LCD
        delay();                                  //保证复位所需要的时间
        rst = 1;                            //恢复LCD正常工作
        nop();
        psb = 1;                            //设置LCD为8位并口通信
        send_i(0x30);                             //基本指令操作
        send_i(0x01);                             //清除显示
        send_i(0x06);                             //指定在写入或读取时,光标的移动方向
        send_i(0x0c);                             //开显示,关光标,不闪烁
}[page]

/****************************************************************************
* 名    称:wr_zb()
* 功    能:显示设置
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void wr_zb()
{
        send_i(lcd_y);
        send_i(lcd_x);
}

/****************************************************************************
* 名    称:flash()
* 功    能:显示闪烁
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void flash()
{
        send_i(0x08);                  //关显示
        delay1();                      //延长一定时间
        send_i(0x0c);                  //开显示
        delay1();delay1();             //延长关显示两倍的时间
        send_i(0x08);                  //关显示
        delay1();
        send_i(0x0c);                  //开显示
        delay1();delay1();
        send_i(0x08);                  //关显示
        delay1();
        send_i(0x0c);                  //开显示
        delay1();delay1();
        
}

/****************************************************************************
* 名    称:clear_p()
* 功    能:清屏
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void clear_p()
{
        send_i(0x1);                   //清除所有显示
        send_i(0x34);                  //扩展指令操作
        send_i(0x30);                  //基本指令操作
}

/****************************************************************************
* 名    称:send_d()
* 功    能:写一个字节数据到LCD
* 入口参数:unsigned char x 字符
* 出口参数:
* 说    明:
****************************************************************************/
void send_d(unsigned char x)
{
        chk_busy();                          //检测LCD是否工作繁忙
        rs = 1;                                //设置该字节数据是显示数据
        rw = 0;                                //设置该次操作为写
        PORTD = x;                             //送数据口PORTD
        e = 1;                                 //使能
        nop();
        nop();
        nop();
        e = 0;                                 //禁止
}

/****************************************************************************
* 名    称:send_i()
* 功    能:写一个字节命令到LCD
* 入口参数:unsigned char x 字符
* 出口参数:
* 说    明:
****************************************************************************/
void send_i(unsigned char x)
{
        chk_busy();                          //检测LCD是否工作繁忙
        rs = 0;                        //设置该字节数据为控制命令
        rw = 0;                        //设置此次操作为写
        PORTD = x;                     //送数据口PORTD
        e = 1;                         //使能
        nop();
        nop();
        nop();
        e = 0;                         //禁止
}

/****************************************************************************
* 名    称:chk_busy()
* 功    能:检测LCD是否工作繁忙
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void chk_busy()
{
        busy = 1;                      //先置位繁忙标志位
        TRISD = 0XFF;                  //更改通信为输入
        rs = 0;                        //设置该字节数据为命令代码
        rw = 1;                        //设置此次操作为读
        while (busy)
        {
                nop();nop();nop();
                e = 1;                           //使能
                nop();nop();nop();
                if (!RD7) busy = 0;               //检测LCD是否工作繁忙
                nop();nop();nop();
                e = 0;                           //禁止
        }
        e = 0;                                 //禁止
        TRISD = 0X00;                          //恢复通信为输出
}

/****************************************************************************
* 名    称:delay()
* 功    能:延时
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void delay()
{
        int i;
        for (i = 0;i < 5000;i++);
}

/****************************************************************************
* 名    称:delayl()
* 功    能:延时
* 入口参数:
* 出口参数:
* 说    明:
****************************************************************************/
void delay1()
{
        int i;
        for (i = 0;i < 10;i++)
        {
                delay();               //调用延时函数
        }
}

/****************************************************************************
* 名    称: writelcd()
* 功    能: 在LCD上显示字符串
* 入口参数:const unsigned char *pt 字符串的首地址
* 出口参数:
* 说    明:
****************************************************************************/
void writelcd(const unsigned char *pt)
{
    while(*pt)                        //检测是否达到了字符串最后
        send_d(*pt++);  //发送数据给lcd
}

关键字:PIC单片机  LCD12864  液晶显示  闪动字体 引用地址:PIC单片机驱动LCD12864液晶显示闪动字体程序

上一篇:PIC单片机键盘矩阵扫描C语言程序
下一篇:PIC16F877A和AVR的单片机的PWM输出程序

推荐阅读最新更新时间:2024-03-16 13:59

液晶显示模块DMF-50081在单片机系统中的应用
香港精电公司的DMF-50081点阵图形液晶显示模块是由大屏幕LCD液晶显示器、SED1335控制器、CCFL背光逆变器和DC-DC显示驱动电源四部分组成。它与同类液晶显示模块相比,具有显示信息量大、亮度高、微功耗、体积小、质量轻、超薄等诸多优点,在移动通讯、仪器仪表、电子设备、家用电器等各方面有着十分广泛的用途。 下面以DMF-50081在某工程项目中进行实时监控的实际应用系统为例,详细阐述DMF-50081液晶显示模块的应用方法。 1 DMF-50081模块说明 DMF-50081液晶显示器为320×240点阵,能容纳16×16点阵的汉字共20行×15列,且具有较高分辨率(点为0.27×0.27mm)。该器件的外型尺寸为
[单片机]
stm32专题二十二:液晶显示中英文 字符编码
字符编码 字符编码及转换测试:http://www.qqxiuzi.cn/daohang.htm 这个网站可以查询汉字字符编码,如下图所示: 输入汉字,就可以查询字符编码: ASCII 编码 ASCII编码(单字节),标准ASCII编码只使用了0 ~ 127,而128 ~ 255属于扩展编码,不属于标准ASCII。 不可见编码(0 ~ 31): 可见字符编码(32 ~ 127): GB2312编码 全角和半角的区别(一般都使用半角,很少使用全角): 角就是字母和数字等与汉字占等宽位置的字。 半角就是ASCII方式的字符,在没有汉字输入法起作用的时候输入的字母数字和字符都是半角的。 例
[单片机]
stm32专题二十二:<font color='red'>液晶显示</font>中英文 字符编码
PIC单片机开发环境--MPLAB X IDE
熟悉开发环境是学习单片机的第一步,现在介绍下PIC得开发环境,PIC的开发环境有老的 MPLAB IDE, 和最新的MPLAB X IDE. MPLAB X IDE 比老的MPLAB IDE, 编写代码的起来更方便,出错的概率也低因为MPLAB X IDE 时时的检测书写错误。 MPLAB X IDE 的安装: 第一步 安装JAVA 的运行环境(因为MPLAB X IDE是用JAVA程序写的) 安装jdk 6.1(在jdk 当中包含了运行环境jre,当然只安装jre也行) 双击jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe安装jdk 6.1 第二步 安装开发环境
[单片机]
<font color='red'>PIC单片机</font>开发环境--MPLAB X IDE
手机、相机、液晶显示屏抗电磁干扰特性的实现
随着手机中LCD及相机的视频分辨率越高,数据工作的频率将超过40MHz,对抑制无线EMI与ESD而言,传统的滤波器方案已达到它们的技术极限。为适应数据速率的增加且不中断视频信号,设计者可以选择本文讨论的新型低电容、高滤波性能EMI滤波器。 随着无线市场的继续发展,下一代手机将拥有更多的功能特性,例如带多个彩屏(每部手机至少有两个彩屏)以及百万像素以上的高分辨率相机等。 图1:LCD模块周围的噪声与ESD传输路径 仍旧受紧凑设计趋势的推动,实现高分辨率LCD及相机将使设计者面临多种挑战,其中一个主要设计考虑便是这些新模块对电
[电源管理]
手机、相机、<font color='red'>液晶显示</font>屏抗电磁干扰特性的实现
PIC单片机的BCD码处理程序
#define PAGE EJECT TITLE BCD ArithmeTIc RouTInes : Ver 1.0 ;******************************************************************* ; BCD ArithmeTIc Routines ;******************************************************************* LIST columns=120, WRAP, L=0 include 17c42.h CBLOCK 0x20 Lbyte, Hbyte R2,
[单片机]
关于PIC单片机的14个问题及解答
关于PIC单片机的14个问题及解答 对于一个高可靠性的系统设计,晶体的选择非常重要,尤其设计带有睡眠唤醒(往往用低电压以求低功耗)的系统。这是因为低供电电压使提供给晶体的激励功率减少,造成晶体起振很慢或根本就不能起振。这一现象在上电复位时并不特别明显,原因时上电时电路有足够的扰动,很容易建立振荡。在睡眠唤醒时,电路的扰动要比上电时小得多,起振变得很不容易。在振荡回路中,晶体既不能过激励(容易振到高次谐波上)也不能欠激励(不容易起振)。晶体的选择至少必须考虑:谐振频点、负载电容、激励功率、温度特性、长期稳定性。 2、如何判断电路中晶振是否被过分驱动? 电阻RS常用来防止晶振被过分驱动。过分驱动晶振会渐渐损耗减少晶振的接触电
[单片机]
关于<font color='red'>PIC单片机</font>的14个问题及解答
PIC单片机实例四:温度测量系统的设计与仿真
引言 网上有很多一线总线的产品,我觉得这项技术的前景不错,自己用C也写了一个测温的程序. 并通过PROTEUS进行了仿真. 搞了很多天,终于搞出来了,心里高兴的很,拿出来晒一下! 一. 原理介绍 说明: 1.单片机采用PIC16F877A,主要是由于液晶显示需要自己写字库,所以需要大容量的EEPROM,而他有8K字节. 2.液晶使用的是KS0108控制器系列,他的指令比较简单,性价比较高. 3.温度传感器采用的是1-WIRE总线技术的DS18B20,测的温度分辨率高. 附另外两张效果图 二. 器件介绍 DS18B20的相关资料 读写
[单片机]
<font color='red'>PIC单片机</font>实例四:温度测量系统的设计与仿真
厦门天马微组建省级新型液晶显示技术工程研究中心
集微网消息(文/春夏)日前,福建发改委发布公告正式同意29个平台组建省级工程研究中心。 这些省级工程研究中心的研究方向包括新材料、高端装备、节能环保、生物医药、新能源、新一代信息技术、新能源汽车等。 在新一代信息技术方向上共有4家研究中心被批准同意组建,除2所高校、科研院所外,仅两家企业被批准组建省级工程研究中心,它们分别为厦门天马微电子有限公司和福建兆元光电有限公司。 其中,厦门天马微电子有限公司被批准成立福建省新型液晶显示技术工程研究中心。 据厦门天马微公司官网介绍,该公司总投资190亿元人民币,拥有国内第一条低温多晶硅薄膜晶体管液晶显示器件生产线及彩色滤光膜生产线,公司G6低温多晶硅薄膜晶体管液晶显示器件生产线及彩
[手机便携]
厦门天马微组建省级新型<font color='red'>液晶显示</font>技术工程研究中心
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved