📄 lcd_driver.c
字号:
//-----------------------------------------------------------------------------
/*
* Copyright (c) 2007,光电图像处理教研室
* All rights reserved.
*
* 文件名称:mylcd.c
* 文件标识:mylcd.c
* 摘 要:LCD init,LCD display,Chinese Display,Char Display
*
* 开发环境:Keil c51 750,EZ-USB FX2 Tools
*
* 当前版本:1.0
* 作 者:冯剑
* 完成日期:20070720 12:00
*
* 取代版本:
* 原 作 者:
* 完成日期:
*
* 修改记录:
*/
//-----------------------------------------------------------------------------
#include ".\cypress\fx2.h"
#include ".\cypress\fx2regs.h"
#include ".\cypress\fx2sdly.h"
//word bin file in the flash 0x20
void read_bytes(BYTE addr_h,BYTE addr_m,BYTE addr_l,const BYTE size,BYTE *const buf);
/*===============================================================================
液晶控制端口定义
================================================================================*/
/*============================================================
功能:使用12232液晶显示图片演示
作者: Mingtree ycxms88@163.com http://www.mcu123.com
==============================================================
硬件:TG12232B (122*32)模拟口线接线方式
连接线图:
请到这里下载:
http://www.mcu123.net/bbs/dispbbs.asp?boardID=23&ID=1062&page=1
本程序源码只供学习参考,如有需要请联系作者。
编译平台:Icc Avr 6.31A
//可能看起来有点乱,不过效果还是不错的,显示图形总的来说比显示汉字要简单,当然显示汉字也不难。
希望此程序能给你一些帮助。
有什么问题可以发email 给我或到我的论坛发问.
http://www.mcu123.net/bbs
=============================================================*/
#define E1_1 IOD5=1 //块1 左边
#define E1_0 IOD5=0 //块1 左边
#define E2_1 IOD6=1 //块1 左边
#define E2_0 IOD6=0 //块2 右边
#define RW_1 IOE|=0X80 //
#define RW_0 IOE&=0X7F //
#define A0_1 IOD4=1 //A0为1时是数据,0时为指令数据
#define A0_0 IOD4=0 //A0为1时是数据,0时为指令数据
#define DATA IOC //数据
//左页
//发送数据
void OUTMD(BYTE i)
{
A0_1; //写数据
EZUSB_Delay1ms();
E1_1;
EZUSB_Delay1ms();
DATA=i;
EZUSB_Delay1ms();
E1_0;
}
//左页
//发送命令
void OUTMI(BYTE i)
{
A0_0; //写指令
EZUSB_Delay1ms();
E1_1;
EZUSB_Delay1ms();
DATA=i;
EZUSB_Delay1ms();
E1_0;
}
//右页
//发送数据
void OUTSD(BYTE i)
{
A0_1; //写数据
EZUSB_Delay1ms();
E2_1;
EZUSB_Delay1ms();
DATA=i;
EZUSB_Delay1ms();
E2_0;
}
//右页
//发送命令
void OUTSI(BYTE i)
{
A0_0; //写指令
EZUSB_Delay1ms();
E2_1;
EZUSB_Delay1ms();
DATA=i;
EZUSB_Delay1ms();
E2_0;
}
//初始化
void lcdini(void)
{
RW_0;
OUTMI(0XE2);
OUTSI(0XE2);//复位
OUTMI(0XAE);
OUTSI(0XAE);//POWER SAVE
OUTMI(0XA4);
OUTSI(0XA4);//动态驱动
OUTMI(0XA9);
OUTSI(0XA9);//1/32占空比
OUTMI(0XA0);
OUTSI(0XA0);//时钟线输出
OUTMI(0XEE);
OUTSI(0XEE);//写模式
OUTMI(0X00);
OUTMI(0XC0);
OUTSI(0X00);
OUTSI(0XC0);
OUTMI(0XAF);
OUTSI(0XAF);
}
/*
函数说明:同时设置主从显示页为0-3页。(内函数,私有,用户不直接调用)
------------------------------------------------------------------------
*/
void SetPage(BYTE page0,BYTE page1)
{
OUTMI(0xB8|page1);OUTSI(0xB8|page0);
}
/*
--------------------------------------------------------------------------------
函数说明:同时设置主从列地址为0-121。(内函数,私有,用户不直接调用)
--------------------------------------------------------------------------------
*/
void SetAddress(BYTE address0,BYTE address1)
{
OUTMI(address1);OUTSI(address0);
}
/*
--------------------------------------------------------------------------------
调用方式:void PutChar0(BYTE ch)
函数说明:在右页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
--------------------------------------------------------------------------------
-*/
void PutCharR(BYTE ch)
{
OUTSD(ch);
}
/*
--------------------------------------------------------------------------------
调用方式:void PutChar1(BYTE ch)
函数说明:在左页当前地址画一个字节8个点。(内函数,私有,用户不直接调用)
--------------------------------------------------------------------------------
-*/
void PutCharL(BYTE ch)
{
OUTMD(ch);
}
/*
--------------------------------------------------------------------------------
调用方式:void DrawBmp(bit layer,BYTE width,BYTE *bmp)
函数说明:画一个图,layer表示上下层,width是图形的宽,高都是16,bmp是
图形指针
使用zimo3软件,纵向取模,字节倒序/240字节
--------------------------------------------------------------------------------
-*/
void DrawBmp(BYTE layer,BYTE width,BYTE const *bmp)
{
BYTE x,address,i=0; //address表示显存的物理地址
BYTE page=0; //page表示上下两页
BYTE window=0; //window表示左右两页
//putcharR //右边
//putcharL //左边
for (x=width;x>1;x--)
{
if (i>60) {window=1;address=i%61;}
else address=i;
if(layer==0) //显示一行八个字
{
SetPage(0,0);
SetAddress(address,address);
if(window==1)PutCharR(bmp[i]);
else PutCharL(bmp[i]);
SetPage(1,1);
SetAddress(address,address);
if(window==1)PutCharR(bmp[i+width]);
else PutCharL(bmp[i+width]);
}
else
{ //显示第二行八个汉字
SetPage(2,2);
SetAddress(address,address);
if(window==1)PutCharR(bmp[i]);
else PutCharL(bmp[i]);
SetPage(3,3);
SetAddress(address,address);
if(window==1)PutCharR(bmp[i+width]);
else PutCharL(bmp[i+width]);
}
i++;
}
}
/*
--------------------------------------------------------------------------------
调用方式:void clrscr(void)
函数说明:清屏
--------------------------------------------------------------------------------
-*/
void clrscr(void)
{
BYTE i;
BYTE page;
for (page=0;page<4;page++)
{
SetPage(page,page);
SetAddress(0,0);
for (i=0;i<61;i++){PutCharR(0);PutCharL(0);}
}
}
//---------------------------------------------------------------
//---------------------------------------------------------------
//采用zimo2 显示汉字,以汉字的显示方式
//void Draw_word(BYTE d_where,uint x_add,bit layer,BYTE width)
//d_where表示在码表中第几个汉字,x_add横坐标位置,layer显示的层, width显示的宽度。
//---------------------------------------------------------------
void Draw_word(BYTE d_where,uint x_add,BYTE layer,BYTE width)
{
BYTE x,i=0,address; //address表示显存的物理地址
BYTE page=0; //page表示上下两页
BYTE window=0; //window表示左右两页
//putcharR //右边
//putcharL //左边
d_where=d_where*32;
for (x=width;x>1;x--)
{
if (x_add>60) {window=1;address=x_add%61;}
else address=x_add;
if(layer==0) //显示一行八个字
{
SetPage(0,0);
SetAddress(address,address);
if(window==1)PutCharR(bmp001[d_where]);//右边
else PutCharL(bmp001[d_where]);//左边
SetPage(1,1);
SetAddress(address,address);
if(window==1)PutCharR(bmp001[d_where+width]);
else PutCharL(bmp001[d_where+width]);
}
else
{ //显示第二行八个汉字
SetPage(2,2);
SetAddress(address,address);
if(window==1)PutCharR(bmp001[d_where]);//右边
else PutCharL(bmp001[d_where]);//左边
SetPage(3,3);
SetAddress(address,address);
if(window==1)PutCharR(bmp001[d_where+width]);
else PutCharL(bmp001[d_where+width]);
}
x_add++;
d_where++;
}
}
//液晶显示规则
// M(左) S(右)
// page page
// 0 | 0
// 1 | 1
// 2 | 2
// 3 | 3
//显示动态的等待图标
void wait1(BYTE i)
{
clrscr(); //
DrawBmp1(0,60,Bmptc); //
for(;i>1;i--)
{EZUSB_Delay1ms();
DrawBmp1(76,19,Bmpt1); //
EZUSB_Delay1ms();
DrawBmp1(76,19,Bmpt2); //
EZUSB_Delay1ms();
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt3); //
EZUSB_Delay1ms();
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt4); //
EZUSB_Delay1ms();
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt5); //
EZUSB_Delay1ms();
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt6); //
EZUSB_Delay1ms();
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt7); //
}
}
void init_port(void)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -