⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 诺基亚3110显示屏的PIC单片机驱动程序
💻 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 + -