📄 lcddriver.c
字号:
#include "lcddriver.h"
const uint8 hanzi816[176]=
{/*-- 宽度x高度=8x16 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*-- 文字: 0 --*/
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*-- 文字: 1 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,/*-- 文字: 2 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*-- 文字: 3 --*/
0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,/*-- 文字: 4 --*/
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*-- 文字: 5 --*/
0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*-- 文字: 6 --*/
0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,/*-- 文字: 7 --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*-- 文字: 8 --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,/*-- 文字: 9 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,/*-- 文字: . --*/
};
/*
*******************************************************************************
** 函数名称:delay_ms()
** 函数功能:毫秒延时
** 入口参数:n:延时n毫秒
** 出口参数:无
*******************************************************************************
*/
void delay_ms(uint16 n)
{ unsigned int i;
while (n--)
{ for(i=0;i<7000;i++);
}
}
/******************************************************************************
* * 名称: delay_ns()
* * 描述: 短延时
* * 入口: 延时系数 n
* * 出口: (无)
******************************************************************************/
void delay_ns(uint16 n)
{ unsigned char i;
while(n)
{ for(i=0;i<2;i++);
n--;
}
}
/*
*********************************************************************************************************
** 函数名称 :IO_Init()
** 函数功能 :I/O口输入、输出初始化
** 入口参数 :PA、PB、PC、PD、PE、PG、PF口
* 电机使能总线:STEP_EN
* 电机高低压总线:POWER_CP
* 电机方向总线:STEP_DIR
* 沙嘴高低压总线:YARN_COTR
* 沙嘴使能总线:YARN_EN
* 摇床使能总线:RACK_CP
** 出口参数 :
*********************************************************************************************************
*/
void LCD_IO_Init(void)
{
PINSEL0= 0x820000c5;//a0008055,a2008055//0xa2000055
PINSEL1= 0x0c000301;//0x00000301
/*---P1.16~P1.23口作为camer1输入---*/
IO0DIR = 0xdfee33e0;//0x81ee3d85;0xc0ee3cc0//3bc0.0xffee33c0//0xffee33e0
IO1DIR = 0x87000000;//0x00ff0000; //
}
/************************************************************************************************************************
** 函数名称:IO_ShuJu_P()
** 函数功能:将数据送到P口
** 入口参数:datt
** 出口参数:
*************************************************************************************************************************/
void IO_send_Data(uint8 datt)
{
uint32 datt0;
datt0 = ((datt&0x0f)<<25);
datt0 |= (datt&0x10)<<2;
datt0 |= (datt&0xe0)<<16;
/*datt0 = (datt<<8);*/
IO0SET = datt0;
IO0CLR = (~datt0)&0x1ee00040;//0x00e03c40;
}
/************************************************************************************************************************
** 函数名称:IO_Snd_Date()
** 函数功能:发送数据
** 入口参数:dat
** 出口参数:
*************************************************************************************************************************/
void IO_Snd_Date(uint8 datt)
{
IO_send_Data(datt);
IO0CLR = WR;
IO0SET = WR;
}
/************************************************************************************************************************
** 函数名称:IO_CMD()
** 函数功能:写命令
** 入口参数:(x,y)坐标
** 出口参数:
*************************************************************************************************************************/
void IO_CMD(uint16 x,uint16 y)
{
uint16 addr;
uint16 add_h_l[2];
addr = y*320+x;
add_h_l[0] = addr%256;
add_h_l[1] = addr/256;
IO0CLR = CS;
IO0CLR = RS;
IO_Snd_Date(0x00);
IO0SET = RS;
IO_Snd_Date(add_h_l[0]);
if((y>204)||((y==204)&(x>255)))
{
IO0CLR = RS;
IO_Snd_Date(0x05);
IO0SET = RS;
IO_Snd_Date(add_h_l[1]);
IO0CLR = RS;
IO_Snd_Date(0x06);
}
else
{
IO0CLR = RS;
IO_Snd_Date(0x01);
IO0SET = RS;
IO_Snd_Date(add_h_l[1]);
IO0CLR = RS;
IO_Snd_Date(0x02);
}
IO0SET = CS;
}
/************************************************************************************************************************
** 函数名称:IO_Clear()
** 函数功能:清屏
** 入口参数:dat1
** 出口参数:
*************************************************************************************************************************/
void LCD_clear(uint8 dat1)
{
uint16 i,j;
IO_CMD(00,00);
IO0CLR = CS;
IO0SET = RS;
for(i=00; i<234; i++)
for(j=0; j<320; j++)
{
IO_Snd_Date(dat1);
}
IO0SET = CS;
}
/*******************************************************************************************
**函数名称:LCD_hz816(unsigned char x, unsigned char y,unsigned char no)
**函数功能:在显示8*16电阵字符。
**入口参数:x 指定显示字符的横坐标
* y 指定显示字符的纵坐标
* no 字的序号
**返 回 值:返回值为1时表示操作成功,为0时表示操作失败。
**说 明:操作失败原因是指定地址超出缓冲区范围。
*******************************************************************************************/
void LCD_hz816(uint8 x, uint8 y,uint8 no)
{ uint16 addr;
uint8 i,j,m,k;
uint8 num[16];
for(i=0;i<16;i++)
{ num[i] = hanzi816[no*16 + i]; // 取出要写的汉字
}
addr = y*30 + (x>>3); // 计算地址
IO0CLR = CS; // 开LCD片选
for(i=y,k=0; i<y+16; i++,k++)
for(j=0; j<1; j++)
{
IO_CMD((x+8*j),i);
IO0CLR = CS;
IO0SET = RS;
for(m=0; m<8; m++)
{
if((num[k]&(0x80>>m))>0)
{
IO_Snd_Date(0xe0);
}
else
{
IO_Snd_Date(0x30);
}
}
}
IO0SET = CS; // 关片选
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -