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

📄 main.c

📁 诺基亚5110 LCD资料
💻 C
字号:
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
* File Name          : main.c
* Author             : MCD Application Team
* Version            : V2.0.2
* Date               : 07/11/2008
* Description        : Main program body
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void sclk(u8 value)
{
  GPIO_WriteBit(GPIOA,GPIO_Pin_9,(BitAction)value);
}

void sdin(u8 value)
{
  GPIO_WriteBit(GPIOC,GPIO_Pin_9,(BitAction)value);
}

void dc(u8 value)
{
  GPIO_WriteBit(GPIOC,GPIO_Pin_7,(BitAction)value);
}

void sce(u8 value)
{
  GPIO_WriteBit(GPIOD,GPIO_Pin_15,(BitAction)value);
}

void res(u8 value)
{
  GPIO_WriteBit(GPIOD,GPIO_Pin_13,(BitAction)value);
}

unsigned char Key_up(void)
{
   return (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8));
}

unsigned char Key_down(void)
{
   return (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13));
}

void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11 | GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_15 | GPIO_Pin_13 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  GPIO_WriteBit(GPIOA,GPIO_Pin_11,(BitAction)1);
  GPIO_WriteBit(GPIOD,GPIO_Pin_11,(BitAction)0);
  sclk(1);

}

void Key_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC,ENABLE);

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}


const unsigned char icon12x12[][24] =
{
/* "0*/
{0x00,0x00,0xF8,0xFC,0x06,0x02,0x02,0x06,0xFC,0xF8,0x00,0x00,0x00,0x00,0x03,0x07,
0x0C,0x08,0x08,0x0C,0x07,0x03,0x00,0x00,
},
/* "1*/
{0x00,0x00,0x00,0x00,0x08,0x0C,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,},
/* "2*/
{0x00,0x00,0x18,0x1C,0x06,0x82,0xC6,0x7C,0x38,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,
0x0B,0x09,0x08,0x08,0x08,0x00,0x00,0x00,
},
/* "3*/
{0x00,0x00,0x0C,0x0E,0x02,0x42,0x42,0xFE,0xBC,0x00,0x00,0x00,0x00,0x00,0x06,0x0E,
0x08,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,
},
/* "4*/
{0x00,0x00,0x80,0xC0,0x70,0x38,0x0C,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
0x01,0x01,0x01,0x0F,0x0F,0x01,0x00,0x00,
},
/* "5*/
{0x00,0x00,0x3E,0x3E,0x12,0x12,0x12,0xF2,0xE2,0x00,0x00,0x00,0x00,0x00,0x06,0x0E,
0x08,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,
},
/* "6*/
{0x00,0x00,0xF8,0xFC,0x66,0x22,0x22,0xEE,0xCC,0x00,0x00,0x00,0x00,0x00,0x03,0x07,
0x0C,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,
},
/* "7*/
{0x00,0x00,0x02,0x02,0x02,0x82,0xF2,0x7E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,},
/* 8*/
{0x00,0x00,0x18,0xBC,0xE6,0x42,0x42,0xE6,0xBC,0x18,0x00,0x00,0x00,0x00,0x03,0x07,
0x0C,0x08,0x08,0x0C,0x07,0x03,0x00,0x00,},
/* "9*/
{0x00,0x00,0x7C,0xFE,0x82,0x82,0xC6,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x06,0x0E,
0x08,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,},	
/* "短信*/
{0xFF,0x83,0x45,0x29,0x11,0x21,0x21,0x11,0x29,0x45,0x83,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,},
 /* "其他*/
{0x00,0xFE,0x01,0xF9,0x05,0x05,0xFE,0x04,0xF8,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x05,0x04,0x04,0x03,0x00,0x00,0x00,}, 
//{0xDF,0x50,0x50,0x50,0x90,0x00,0xFC,0x02,0x01,0x01,0x01,0x00,0x0F,0x02,0x06,0x0A,0x09,0x08,0x03,0x04,0x08,0x08,0x08,0x00}  //lRC
/* 喇叭*/
{0x00,0xF0,0x90,0xF0,0x08,0x04,0xFE,0x00,0x64,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x07,0x00,0x02,0x01,0x00,0x00,},
/* 时间*/
{0x70,0x8C,0x02,0x02,0x01,0x39,0x21,0x22,0x22,0x8C,0x70,0x00,0x00,0x01,0x02,0x02,0x04,0x04,0x04,0x02,0x02,0x01,0x00,0x00},
/* 音乐*/
{0x00,0x00,0x00,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0xFE,0x00,0x06,0x07,0x07,0x03,0x00,0x00,0x00,0x06,0x07,0x07,0x03,0x00},
/* 设置*/
{0x00,0x00,0x80,0xC0,0xEC,0xFE,0xE7,0x43,0xC3,0xE1,0x78,0x3C,0x0E,0x0B,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,},
/*  文件*/
{0x00,0xFE,0x02,0x02,0x02,0x02,0x0A,0x0E,0x0C,0xF8,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x07,0x00,0x00},
/* 文件夹*/
{0xF8,0x08,0x84,0x64,0x24,0x2C,0x28,0x28,0x28,0x28,0x38,0xA0,0x07,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x00,},
};

void delay_1ms(void)//1ms延时函数
{
	unsigned int i;
	for (i=0;i<250;i++)	  ;
;
}

/*--------------------------------------------
LCD_write_byte: 使用SPI接口写数据到LCD
输入参数:dt:写入的数据;
command :写数据/命令选择;
编写日期:20080918 
----------------------------------------------*/
void LCD_write_byte(unsigned char dt, unsigned char command)
{
	unsigned char i; 
	sce(0);	
	dc(command);
	for(i=0;i<8;i++)
	{ 
		if(dt&0x80)
			sdin(1);
		else
			sdin(0);
		dt=dt<<1;		
		sclk(0); 		
		sclk(1); 
	}	
	dc(1);	
	sce(1);	
	sdin(1);
}
/*---------------------------------------
LCD_init: 3310LCD初始化
编写日期:20080918 
-----------------------------------------  */
void LCD_init(void)
{
	res(0);  	
  	delay_1ms();
  	res(1);  
	LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
	delay_1ms();
	LCD_write_byte(0xC0,0);//设定液晶偏置电压
	delay_1ms();
	LCD_write_byte(0x06,0);
	delay_1ms();
	LCD_write_byte(0x13,0);
	delay_1ms();
	LCD_write_byte(0x20,0);//使用基本指令
	delay_1ms();
	LCD_write_byte(0x0C,0);//设定显示模式,正常显示
	delay_1ms();
}
/*-------------------------------------------
LCD_set_XY: 设置LCD坐标函数
输入参数:X:0-83  Y:0-5
编写日期:20080918 
---------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
	LCD_write_byte(0x40 | Y, 0);// column
	LCD_write_byte(0x80 | X, 0);// row
} 
/*------------------------------------------
LCD_clear: LCD清屏函数
编写日期:20080918 
--------------------------------------------*/
void LCD_clear(void)
{
	unsigned char t;
	unsigned char k;
	LCD_set_XY(0,0);
	for(t=0;t<6;t++)
	{ 
		for(k=0;k<84;k++)
		{ 
			LCD_write_byte(0x00,1);
				
		} 
	}
}
/*---------------------------------------------
LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
编写日期:20080918 
-----------------------------------------------*/
#if 0
void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
	unsigned char i;  	
	
	LCD_set_XY(row*8, page);// 列,页 
	for(i=0; i<8;i++) 
	{
		LCD_write_byte(shuzi[c*16+i],1); 
	}
	
    LCD_set_XY(row*8, page+1);// 列,页 
	for(i=8; i<16;i++) 
	{
		LCD_write_byte(shuzi[c*16+i],1);
	}	 	
}
#endif

void Lcd_display(unsigned char row, unsigned char page,unsigned char c)
{
      unsigned char i;  	
	  LCD_set_XY(row, page);// 列,页
	  for(i=0; i<12;i++)
	  {
		  LCD_write_byte(icon12x12[c][i],1);
	  }
	  LCD_set_XY(row, page+1);// 列,页
	  for(i=12; i<24;i++) 
	  {
		  LCD_write_byte(icon12x12[c][i],1);
	  }
}

#define START_X  36
#define OFFSET_X 16

void Meuu_set(unsigned char offset)
{
   unsigned char k;
   const unsigned char  TestY[8] = {0,1,2,3,4,3,2,1,};
   const unsigned char  TestX[8] = { START_X+0,
	                                 START_X-OFFSET_X,
	                                 START_X-OFFSET_X*2+2,
				                     START_X-OFFSET_X,
							         START_X+0,
				                     START_X+OFFSET_X,
				                     START_X+OFFSET_X*2-2,
							         START_X+OFFSET_X,
 								   };
   for(k=0;k<8;k++)
   {
       if((k+offset)<8)
	      Lcd_display(TestX[k+offset],TestY[k+offset],k+10);
	   else
	      Lcd_display(TestX[k+offset-8],TestY[k+offset-8],k+10);
   }
   Lcd_display(START_X,2,offset);
}
								  


main()
{	
    unsigned char k,temp=0;
	LED_Init();
	Key_Init();
	res(0);
	for(k=0;k<10;k++);
	res(1);  	
  	LCD_init();  //初始化LCD模块  
	LCD_clear(); //清屏幕
	Meuu_set(temp);
  	while(1)
	{
	    if(Key_up()==0)
		{
		   while(Key_up()==0);
		   temp++;
		   if(temp>7)
			 temp=0;

		   Meuu_set(temp);
		}
		if(Key_down()==0)
		{
		   while(Key_down()==0);
		   temp--;
		   if(temp>7)
		      temp=7;
		   Meuu_set(temp);
		}
	}
	
 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -