📄 lcdxianshi.c
字号:
/*
** Create : 2007 7 31
** Author : oDon
** email : yuanonline@hotmail.com
** Description:**
** This project is using for a library of solutions of CM12864
** functions will implements to display ZH_CN ASCII IMAGE on
** CM12864 LCD.etc..
*/
#include <intrins.h>
#include<func.h>
#include<reg52.h>
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;
sbit PSB = P2^3;
sbit RST = P2^4;
#define DATA P1
volatile uchar command; /*Command Word*/
/**************************************************
* Function Definations Below */
void check_busy(void);
void send_com(const unsigned char command);
void send_com_init(const unsigned char command_init);
void send_data(const unsigned char data_a);
void send_data(const unsigned char data_a);
void clear_LCD(void);
void initial_LCD(void);
void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length );
void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length );
/* Function Definations End *
**************************************************/
/*void xianshi(void)
{
clear_LCD();
smNop();
initial_LCD();
smNop();
clear_LCD();
smNop();
Display_ch(suc, 2, 1, 6);
while(1);
} */
/******************************************
功能:void check_busy( void )
功能:检查是否LCD忙碌的子程序
实参输入:void
返回值:void
******************************************/
void check_busy(void)
{
P1 = 0xff;
RS = 0;
RW = 1;
while (1)
{
smNop();
E =1;
smNop();
if( P1 < 0x80 )
break;
smNop();
E =0;
}
E = 0;
}
/*****************************************
名称:void send_com( unsigned char command )
功能:数据写命令
实参输入:unsigned char command
返回值:void
*****************************************/
void send_com(const unsigned char command)
{
check_busy();
RS = 0;
RW = 0;
P1 = command;
E = 1;
smNop();
E = 0;
}
/********************************************************
名称:void send_com_init( unsigned char command_init )
功能:LCD初始化时的送命令
实参输入:unsigned char command_init
返回值:void
********************************************************/
void send_com_init(const unsigned char command_init )
{
RS = 0;
RW = 0;
P1 = command_init;
E = 1;
smNop();
E = 0;
}
/*******************************************************
名称:void send_data( unsigned char data_a )
功能:写数据
实参输入:unsigned char data_a
返回值:void
*******************************************************/
void send_data(const unsigned char data_a)
{
check_busy();
RS = 1; //DB7-DB0为显示数据
RW = 0; //写入数据
P1 = data_a;
E = 1;
smNop();
E = 0; //下降沿
}
/*********************************************************
名称:void clear_LCD( void )
功能:清屏
实参输入:void
返回值:void
*********************************************************/
void clear_LCD(void)
{
send_com(0x01); //清除显示//
send_com(0x34); // 功能设定:扩充指令集动作 //
send_com(0x30); //功能设定:基本指令集动作//
}
/*************************************************************
名称:void initial_LCD( void )
功能:LCD初始化
实参输入:void
返回值:void
*************************************************************/
void initial_LCD(void)
{
PSB = 1; //水平显示
RST = 0; //复位
_nop_();
_nop_();
RST = 1; //不复位
_nop_();
delay_10us(10);
send_com_init(0x30);//30H--基本指令操作
delay_10us(4);
send_com_init(0x0c);//开显示,关光标,不闪烁。
delay_10us(10);
send_com_init(0x01);//清除显示
delay_ms(10);
send_com_init(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
}
/*********************************************************************
名称:void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
功能:显示字符串 2 1 6
参数输入:unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length
返回值:void
*********************************************************************/
void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
{
unsigned char ddram = 0x00;
unsigned char i1;
if(line == 1)
ddram = 0x80;
if(line == 2)
ddram = 0x90;
if(line == 3)
ddram = 0x88;
if(line == 4)
ddram = 0x98;
ddram = ddram + col - 1;
send_com( ddram ); //定位显示起始地址
for( i1 = 0;i1 < length;i1 ++ )
{
send_data( ptr[i1] );//输出单个字符
}
}
/********************************************************
名称: void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
功能:显示汉字子程序
实参输入:unsigned char *ptr, unsigned char line, unsigned char col, unsigned length
返回值:void
********************************************************/
void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
{
unsigned char ddram = 0x00;
unsigned char i1;
if(line == 1)
ddram = 0x80;
if(line == 2)
ddram = 0x90;
if(line == 3)
ddram = 0x88;
if(line == 4)
ddram = 0x98;
ddram = ddram + col - 1;
send_com( ddram ); //定位显示起始地址
for( i1 = 0;i1 < length;i1 ++ )
{
send_data(ptr[i1*2]);//输出单个字符
send_data(ptr[i1*2+1]);
}
}
/****************************************************************
-----------------------------------------------------------------
END OF MAIN.C
-----------------------------------------------------------------
****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -