📄 ts12864a.c
字号:
/*****************************************************************/
/*****************************************************************/
/*函数名称: TS12864A.c */
/*函数功能: 液晶显示启动 */
/*入口参数: P6---------------------------------------液晶数据传输
P3----------------------------------------液晶控制脚*/
/*有无返回: 无 */
/*修改记录: 无修改记录 */
/*编写作者: t483-4-19chenyong */
/*编写日期: 2007-4-06 */
/*****************************************************************/
#include "common.h"
#include "TS12864A.h"
#include "ziku.h"
#include "delay.h"
unsigned char temp;
/*****************************************************************/
/*判断状态 */
/*****************************************************************/
void LCD_Busy(void)
{
SFRPAGE=0x0f;
LCD_RS=0; // 状态标志位和地址计数读入DB7和DB6-DB0
delay_17us();
LCD_RW=1;
delay_17us();
LCD_DATA=0xff; //初始化
while (1)
{
LCD_EN=1;
delay_17us();
if (LCD_DATA<0x80)break;//判断是否忙
LCD_EN=0;
delay_17us();
}
LCD_EN=0;
delay_17us();
}
/*****************************************************************/
/*写数据 */
/*****************************************************************/
void LCD_Write_Data(uchar ddata)
{
LCD_Busy(); //检测是否处于忙的状态
LCD_RS = 1;
delay_17us();
LCD_RW = 0;
delay_17us();
temp=ddata;
SFRPAGE=0x0f;
LCD_DATA=temp;
LCD_EN = 1;
delay_17us();
LCD_EN = 0;
delay_17us();
}
/*****************************************************************/
/*写命令 */
/*****************************************************************/
void LCD_Write_Command(uchar command)
{
LCD_Busy(); //检测是否处于忙的状态
LCD_RS = 0;
delay_17us();
LCD_RW = 0;
delay_17us();
temp=command;
SFRPAGE=0x0f;
LCD_DATA=temp;
LCD_EN = 1;
delay_17us();
LCD_EN = 0;
delay_17us();
}
void CleanScreen(void)
{
uchar i, j, k;
for (i=0;i<8;i++)
{
LCD_CSA = 1;
delay_17us();
LCD_CSB = 1;
delay_17us();
LCD_Write_Command(0x40); //设置列地址
delay_17us();
LCD_Write_Command(0xb8+i); //设置页地址
delay_17us();
LCD_CSA = 1;
delay_17us();
LCD_CSB = 0;
delay_17us();
for(j=0;j<128;j++)
LCD_Write_Data(0x00);
delay_17us();
LCD_CSA = 0;
delay_17us();
LCD_CSB = 1;
delay_17us();
for(k=64;k<128;k++)
LCD_Write_Data(0x00);
delay_17us();
}
}
/*****************************************************************/
/* 清屏
y ------------------------------------------------------纵轴位置
yy------------按LCD显示4行字来计算,0,代表第一行,3,代表第四行;
mod---------------------------清屏方式,
0-------------------------------------------------------按行清屏;
1-------------------------------------------------------全部清屏;
*/
/*****************************************************************/
/*void LCD_Cls_xy(uchar mod, uchar yy)
{
uchar x, y;
uchar value_temp = 0;
value_temp = 2*yy;
switch(mod)
{
case 0: //按行清屏
{
for (y=value_temp;y<value_temp+1;y++)
for(x=0;x<128;x++)
Dis_Play(x,y,0);
}
case 1: //全部清屏
{
for (y=0;y<8;y++) //清屏
{
for(x=0;x<128;x++)
Dis_Play(x,y,0);
}
}
}
}
*/
/*****************************************************************/
/*设置x,y位置 */
/*****************************************************************/
void LCD_Set_xy(unsigned char x,unsigned char y)
{
LCD_CSA = 1;
delay_17us();
LCD_CSB = 1;
delay_17us();
LCD_Write_Command(0x40|x);
delay_17us();
LCD_Write_Command(0xb8|y);
delay_17us();
if (x>=64) //判断是否显示半面,如果大于64则全屏显示
{
LCD_CSA=0;
delay_17us();
LCD_CSB=1;
delay_17us();
}
else //小于64则半屏显示
{
LCD_CSA=1;
delay_17us();
LCD_CSB=0;
delay_17us();
}
LCD_DATA=0xff; //IO口将电平拉高
delay_17us();
}
/*****************************************************************/
/*函数名称: Dis_Play.c */
/*函数功能: 显示汉字,fb==1:反白显示 */
/*函数说明: 具体说明如下:
x---------------------------------------------横轴位置
y---------------------------------------------纵轴位置
n-------------------------------------数据在表中的位置
dis_value-----------------------------待显示汉字的代码
*/
/*修改记录: 无修改记录 */
/*编写日期: 2007-3-17 */
/*****************************************************************/
void Dis_Play(unsigned char x,unsigned char y,unsigned char dis_value)
{
LCD_Set_xy(x,y);
LCD_Write_Data(dis_value);
}
void LCD_Init(void)
{
LCD_CSA = 1;
delay_17us();
LCD_CSB = 1; //控制器全开
delay_17us();
LCD_Write_Command(0x3f); //开显示
delay_17us();
LCD_Write_Command(0xc0); //设置起始地址
delay_17us();
}
/*****************************************************************/
/*函数名称: Display_Character.c */
/*函数功能: 显示汉字,fb==1:反白显示 */
/*函数说明: 具体说明如下:
x---------------------------------------------横轴位置
y---------------------------------------------纵轴位置
n-------------------------------------数据在表中的位置
dis_table-----------------------------待显示数据代码表
dis_value-----------------------------待显示汉字的代码
*/
/*修改记录: 无修改记录 */
/*编写日期: 2007-3-17 */
/*****************************************************************/
void Display_Character(unsigned char x,unsigned char y,unsigned char n)
{
unsigned char i,dis_value;
for(i=0;i<16;i++)
{
switch(y)
{
case 1: dis_value=dis_table[i+n*32]; //确定显示的值,上半部分
Dis_Play(x*8+i,1,dis_value);
dis_value=dis_table[i+n*32+16]; //确定显示的值,上半部分
Dis_Play(x*8+i,2,dis_value);
break;
case 3: dis_value=dis_table[i+n*32]; //确定显示的值,上半部分
Dis_Play(x*8+i,3,dis_value);
dis_value=dis_table[i+n*32+16]; //确定显示的值,上半部分
Dis_Play(x*8+i,4,dis_value);
break;
case 5: dis_value=dis_table[i+n*32]; //确定显示的值,上半部分
Dis_Play(x*8+i,5,dis_value);
dis_value=dis_table[i+n*32+16]; //确定显示的值,上半部分
Dis_Play(x*8+i,6,dis_value);
break;
default:break;
}
}
}
/*****************************************************************/
/*函数名称: Display_Char.c */
/*函数功能: 显示字符,fb==1:反白显示 */
/*函数说明: 具体说明如下:
x---------------------------------------------横轴位置
y---------------------------------------------纵轴位置
n-------------------------------------数据在表中的位置
dis_table-----------------------------待显示数据代码表
dis_value-----------------------------待显示汉字的代码
*/
/*修改记录: 无修改记录 */
/*编写日期: 2007-3-17 */
/*****************************************************************/
void Display_Char(unsigned char x,unsigned char y,unsigned char n)
{
unsigned char i,dis_value;
for (i=0;i<8;i++)
{
dis_value=shuzi_table[i+n*16];
Dis_Play(x*8+i+1,y,dis_value);
dis_value=shuzi_table[i+n*16+8];
Dis_Play(x*8+i+1,y+1,dis_value);
}
}
void Display_Point(unsigned char px,unsigned char py,unsigned char pn)
{
unsigned char i,dis_value;
for (i=0;i<4;i++)
{
dis_value=Point_table[i+pn*8];
Dis_Play(px*8+i+1,py,dis_value);
}
}
/*****************************************************************/
/*函数名称: Display_Char.c */
/*函数功能: 清除字符 */
/*函数说明: 具体说明如下:
x---------------------------------------------横轴位置
y---------------------------------------------纵轴位置
n-------------------------------------清除字符的个数*/
/*修改记录: 无修改记录 */
/*编写日期: 2007-3-17 */
/*****************************************************************/
void Clear_Area(unsigned char x,unsigned char y,unsigned char n)
{
unsigned char ct=0;
for(ct=0;ct<n;ct++)
Display_Char(x+ct,y,64);
delay_nms(10);
}
/*****************************************************************/
/*函数名称: ten_n.c */
/*函数功能: 保留的小数取整 */
/*修改记录: 无修改记录 */
/*编写日期: 2007-3-17 */
/*****************************************************************/
unsigned int ten_n(unsigned char n)
{
unsigned int k;
if(n==0) return 1;
k=ten_n(n-1)*10;
return( k);
}
/*****************************************************************/
/* : end : */
/*****************************************************************/
void delay_17us()
{
unsigned char t=17;
while(--t)
{
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -