📄 display.c
字号:
/**********************************************************************************
Copyright(C)桂林电子科技大学电子工程系科技协会
all right reserved
文 件 名:diplay.c
描 述: 诺基亚3310液晶驱动程序(pic)
作 者: yeling
日 期: 15/11/2008
**********************************************************************************/
#include"pic.h"
#include"asscii.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define SEC RC1
#define RES RC0
#define DC RC2
#define CLK RC4
#define SDI RC3
void Delay(uchar i)
{
while(--i);
}
//==============================================//
// 发送一个数据到显示屏
//==============================================//
void send_data(uchar Dbyte,uchar dc)
{
uchar i;
SEC = 0;
DC = dc;
for(i=0;i<8;i++)
{
CLK = 0;
Dbyte=Dbyte<<1; //左移一位
SDI = CARRY; //移出的位给RW_SID
CLK = 1;
}
SEC = 1;
}
//==============================================//
// 清显示屏
//==============================================//
void LCD_clear(void)
{
unsigned int i;
send_data(0x0c, 0);
send_data(0x80, 0);
for (i=0; i<504; i++)
send_data(0, 1);
}
//==============================================//
// 设定显示屏地址 X:0-84, Y:0-5;
//==============================================//
void Send_XY(uchar X,uchar Y)
{
send_data(0x40 | Y, 0);
send_data(0x80 | X, 0);
}
//==============================================//
// 在当前位置显示一个6*8字符
//==============================================//
void DisOne_8X6(const uchar *One)
{
uchar i;
ulong tel;
tel = *One-32;
tel=tel*6;
for(i=0;i<6;i++)
{
send_data(font6x8[tel],1);
tel++;
}
}
//==============================================//
// 在当前位置显示一个6*8数字
//==============================================//
void DisOne_8X6mun(uchar mun)
{
uchar i;
ulong tel;
// tel = 96;
tel=mun*6+96;
for(i=0;i<6;i++)
{
send_data(font6x8[tel],1);
tel++;
}
}
//==============================================//
// 在当前位置显示一个6*8的数
//==============================================//
void Dis_mun(ulong dmun)
{
uchar temp;
do
{
temp = dmun%10;
DisOne_8X6mun(temp);
dmun /= 10;
}while(dmun!=0);
}
//==============================================//
// 在指定位置显示6*8的数
//==============================================//
void Dis_mun_At(uchar x,uchar y,ulong mun)
{
Send_XY(x,y);
Dis_mun(mun);
}
//==============================================//
// 在指定位置显示6*8字符串
//==============================================//
void DisMany_8X6(uchar x,uchar y,const uchar *Many)
{
Send_XY(x,y);
while(*Many!='\0')
{
DisOne_8X6(Many);
Many++;
}
}
//==============================================//
// 在指定位置显示串中文字符
//==============================================//
void Dis_chinese(uchar x,uchar y,const uchar *Spr,uchar en)
{
uchar i,j;
uchar t=0;
for(i=0;i<en;i++)
{
Send_XY(x,y);
for(j=0;j<12;j++)
{
send_data(Spr[t],1);
t++;
}
Send_XY(x,y+1);
for(j=0;j<12;j++)
{
send_data(Spr[t],1);
t++;
}
x+=12;
}
}
//==============================================//
// 初始化显示屏
//==============================================//
void Init_lcd()
{
uchar volbyte = (uchar)(4/0.06-51)|0X80;
TRISC=0B00000000; //打开必要的端口
RES = 0;
Delay(10);
RES = 1;
send_data(0x21, 0); // 使用扩展命令设置LCD模式
send_data(0x90, 0);
send_data(volbyte, 0); // 设置偏置电压
send_data(0x06, 0); // 温度校正
send_data(0x20, 0); // 使用基本命令
LCD_clear();
send_data(0x0c, 0); // 设定显示模式,正常显示
}
void main()
{
Init_lcd();
send_data(0x20, 0);
DisMany_8X6(0,1,"ASDFGHJKLZXCVBNMQWERTYUIO123456789");
DisOne_8X6("A");
send_data(0xc4, 0);
Dis_chinese(0,3,chinese,8);
while(1)
{
SEC = 0;
//send_data(0xff, 1);;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -