微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机驱动LCD12864液晶显示闪动字体程序

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

时间:12-02 来源:互联网 点击:
/**********************************************************************

*** 功能: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(); //申明有关显示设置函数
voidflash(); //申明设置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初始化
* 入口参数:
* 出口参数:
* 说 明:
****************************************************************************/
voidlcd_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); //开显示,关光标,不闪烁
}

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

/****************************************************************************
* 名 称:flash()
* 功 能:显示闪烁
* 入口参数:
* 出口参数:
* 说 明:
****************************************************************************/
voidflash()
{
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();

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top