📄 nokia5110.c
字号:
DC_H();//命令OR数据
else
DC_L();
for (i=0;i<8;i++)
{
SCLK_L();//NOKIA_SCLK= LOW;
if ((lcd_byte&0x80) == 0x80)
SDIN_H();//NOKIA_SDIN = 1;
else
SDIN_L();//NOKIA_SDIN = 0;
lcd_byte = lcd_byte<<1;
SCLK_H();//NOKIA_SCLK= HIGH;
}
}
/*********************************
函数名称: WriteNokia(uchar cmd_data,uchar lcd_byte)写指令
功能:写入一个字符串
入口参数:cmd_data,lcd_cmd
返回参数:无
*********************************/
void WriteNokia(uchar cmd_data,uchar *lcd_byte)
{
uchar i;
SCE_L();//NOKIA_SCE = LOW;
RST_H();//NOKIA_RST = HIGH;
if(cmd_data)//NOKIA_DC = cmd_data;
DC_H(); //命令OR数据
else
DC_L();
while ((*lcd_byte) != '\0')
{
for (i=0;i<8;i++)
{
SCLK_L();//NOKIA_SCLK= LOW;
if (((*lcd_byte)&0x80) == 0x80)
SDIN_H();//NOKIA_SDIN = 1;
else
SDIN_L();//NOKIA_SDIN = 0;
*lcd_byte = (*lcd_byte)<<1;
SCLK_H();//NOKIA_SCLK= HIGH;
}
lcd_byte++;
}
}
/*********************************
函数名称: SetAddr(uchar addr_x,uchar addr_y)
功能:设定RAM地址
入口参数:uchar addr_x,uchar addr_y
返回参数:无
*********************************/
void SetAddr(uchar addr_x,uchar addr_y)
{
WriteByteNokia(CMD,0x80+addr_x);//加上0x80和0x40是设置地址所必须的控制字
WriteByteNokia(CMD,0x40+addr_y);
}
/*********************************
函数名称: ClearLcd(void)清除RAM
入口参数:无
返回参数:无
*********************************/
void ClearLcd(void)
{
uint i;
WriteByteNokia(CMD,0x80); //将地址指向原点
WriteByteNokia(CMD,0x40);
for (i=0;i<504;i++)
{
WriteByteNokia(DAT,0x00);
}
}
/*********************************
函数名称: LCD_init(void)
功能:清屏
入口参数:无
返回参数:无
*********************************/
void LCD_init(void){
DAT_IN_OUT|=0xff;//设置为输出管脚
OUTPUT|=0xff;
//LED_L(); //打开背光
WriteByteNokia(0,0x21);//初始化Lcd,功能设定使用扩充指令
WriteByteNokia(0,0xC6);//设定液晶偏置电压
WriteByteNokia(0,0x06);//温度校正
WriteByteNokia(0,0x13);;//1:48
WriteByteNokia(0,0x20);//使用基本指令
WriteByteNokia(0,0x0C);//设定显示模式,正常显示
/*
WriteByteNokia(CMD,EXT_INSTRUCTION); //选择扩展指令集
WriteByteNokia(CMD,VOP_SET); //设置Vop
WriteByteNokia(CMD,TEMP); //温度校正
WriteByteNokia(CMD,BS); //设置偏置系统 1:48
//WriteByteNokia(CMD,STD_INSTRUCTION|VER_ADDR); //选择标准指令集
WriteByteNokia(CMD,STD_INSTRUCTION|HOR_ADDR);
WriteByteNokia(CMD,STD_DISPLAY); //选择标准显示模式
ClearLcd();
SetAddr(0,0); */
}
/*********************************
函数名称: DisplayHz(uchar addr_x,uchar addr_y,uchar *hz)
功能:显示汉字
入口参数:uchar addr_x,uchar addr_y,uchar *hz
返回参数:无
*********************************/
void DisplayHz(uchar addr_x,uchar addr_y,const unsigned char *hz)//汉字宽度为12,高度为12
{
uchar i=0,ch_with=12;
SetAddr(addr_x,addr_y);
for (i=0; i<ch_with*2;i++)
{
if (i==ch_with)
{
// if (i==0)
SetAddr(addr_x,addr_y+1);
// else
// SetAddr((addr_x+(ch_with+row)*i),addr_y+1);
}
WriteByteNokia(DAT,hz[i]);
}
}
/*********************************
函数名称: DisplayZf(uchar addr_x,uchar addr_y,uchar *zf)
功能: 显示字符
入口参数:uchar addr_x,uchar addr_y,uchar *hz
返回参数:无
*********************************/
void LCD_char_string(uchar addr_x,uchar addr_y,uchar *zf)//字符宽度为6,高度为8
{
uchar j,i=0; //每行最多写14个字符
while (*zf != '\0')
{
for (j=0;j<6;j++)
{
SetAddr(addr_x+i*6+j,addr_y);
WriteByteNokia(DAT,zifu6x8[*zf-0x20][j]);
}
zf++;
i++;
}
}
/*********************************
函数名称: LCD_write_char(uchar addr_x,uchar addr_y,uchar c)
功能: 在指定的位置显示一个英文字符
入口参数:uchar addr_x,uchar addr_y,uchar c
返回参数:无
*********************************/
void LCD_one_char(uchar addr_x,uchar addr_y,uchar c)
{
unsigned char j;
for (j=0; j<6; j++){
SetAddr(addr_x+j,addr_y);
WriteByteNokia(DAT,zifu6x8[c-0x20][j]);
}
}
/*********************************
函数名称: LCD_num(uchar addr_x,uchar addr_y,unsigned int num)
功能: 在指定的位置显示数据
入口参数:uchar addr_x,uchar addr_y,unsigned int num
返回参数:无
*********************************/
void LCD_num(uchar addr_x,uchar addr_y,unsigned int num)
{
unsigned char dat[7],i;
dat[0]=num/10000+48;
dat[1]=num%10000/1000+48;
dat[2]=num%1000/100+48;
dat[3]=num%100/10+48;
dat[4]=num%10+48;
dat[5]=32;
dat[6]='\0';
for(i=0;i<4;i++)
{
if(dat[i]==48)
dat[i]=32;
else break;
}
LCD_char_string(addr_x,addr_y,dat);
}
/*-----------------------------------------------------------------------
LCD_draw_map : 位图绘制函数
输入参数:X、Y :位图绘制的起始X、Y坐标;
*map :位图点阵数据;
Pix_x :位图像素(长)
Pix_y :位图像素(宽)
-----------------------------------------------------------------------*/
void LCD_draw_bmp(uchar addr_x,uchar addr_y,const unsigned char *map,
uchar Pix_x,uchar Pix_y)
{
unsigned int i,n;
unsigned char row;
if (Pix_y%8==0) row=Pix_y/8; //计算位图所占行数
else
row=Pix_y/8+1;
for (n=0;n<row;n++)
{
SetAddr(addr_x,addr_y);
for(i=0; i<Pix_x; i++)
{
WriteByteNokia(DAT,map[i+n*Pix_x]);
}
addr_y++; //换行
}
}
void welcome_screen(void)//显示图片部分
{ int i=56000;
/*LCD_draw_bmp(0,0,welcome,84,48);
while(i--)i=i;
while(i--)i=i;
while(i--)i=i;
ClearLcd();
LCD_draw_bmp(0,0,join,84,48);
while(i--)i=i;
while(i--)i=i;
while(i--)i=i;
ClearLcd();
LCD_draw_bmp(0,0,TE,84,48);
while(i--)i=i;
while(i--)i=i;
while(i--)i=i;
ClearLcd();
LCD_draw_bmp(0,0,CFE,84,48);
while(i--)i=i;
while(i--)i=i;
while(i--)i=i;
ClearLcd();
LCD_draw_bmp(17,0,bmp,40,40);
while(i--)i=i;
while(i--)i=i;
while(i--)i=i;
ClearLcd();
LCD_draw_bmp(0,0,mr,84,48);
while(i--)i=i;
while(i--)i=i;
while(i--)i=i;
ClearLcd();*/
LCD_draw_bmp(0,0,ceshi,84,48);
while(1);
/*while(i--)i=i;
while(i--)i=i;
while(i--)i=i;
ClearLcd();*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -