📄 main.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 + -