初级会员

- 积分
- 70
- 金钱
- 70
- 注册时间
- 2015-7-24
- 在线时间
- 19 小时
|
5金钱
#include"lcd1602.h"
#include"stm32f10x.h"
#include"stm32f10x_rcc.h"
#include"stm32f10x_gpio.h"
#include<string.h>
#define NUMn
#define RS_H GPIO_SetBits(GPIOC,GPIO_Pin_2)
#define RS_L GPIO_ResetBits(GPIOC,GPIO_Pin_2)
#define RW_H GPIO_SetBits(GPIOC,GPIO_Pin_0)
#define RW_L GPIO_ResetBits(GPIOC,GPIO_Pin_0)
#define EN_low GPIO_ResetBits(GPIOF,GPIO_Pin_9)
#define EN_high GPIO_SetBits(GPIOF,GPIO_Pin_9)
#define LED_H GPIO_SetBits(GPIOF,GPIO_Pin_6)
#define LED_L GPIO_ResetBits(GPIOF,GPIO_Pin_6)
void LCD_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能或者失能APB2外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);//使能或者失能APB2外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能或者失能APB2外设时钟
GPIO_DeInit(GPIOE);//将外设GPIOx寄存器重设为缺省值
GPIO_DeInit(GPIOF);//将外设GPIOx寄存器重设为缺省值
GPIO_DeInit(GPIOC);//将外设GPIOx寄存器重设为缺省值
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_15|GPIO_Pin_2|GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高输出速率50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化外设GPIOx寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高输出速率50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化外设GPIOx寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高输出速率50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化外设GPIOx寄存器
}
void LCD_WriteBits(Write_TypeDef data_cmd,u8 value)
{
if(data_cmd==0) RS_L ;
else RS_H ;
EN_low;
RW_L;
Delay_2us(1);
GPIO_WriteBit(GPIOE,GPIO_Pin_4,(BitAction)((value&0x80)>>7)); //D7
GPIO_WriteBit(GPIOE,GPIO_Pin_6,(BitAction)((value&0x40)>>6)); //D6
GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)((value&0x20)>>5)); //D5
GPIO_WriteBit(GPIOC,GPIO_Pin_15,(BitAction)((value&0x10)>>4)); //D4
GPIO_WriteBit(GPIOF,GPIO_Pin_1,(BitAction)((value&0x08)>>3)); //D3
GPIO_WriteBit(GPIOF,GPIO_Pin_3,(BitAction)((value&0x04)>>2)); //D2
GPIO_WriteBit(GPIOF,GPIO_Pin_5,(BitAction)((value&0x02)>>1)); //D1
GPIO_WriteBit(GPIOF,GPIO_Pin_7,(BitAction)((value&0x01))); //D0
Delay_1ms(10);
EN_high;
Delay_1ms(10);
EN_low;
}
void LCD_Write(char*data)
{
u8 i;
for(i=0;i<strlen(data);i++)
{
LCD_Busy();
LCD_WriteBits(DATA,data);
}
}
void LCD_Busy(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RS_L;
RW_H;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE, &GPIO_InitStructure);
while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4)==0x08)//忙信号检测关键 D7接在E4
{
EN_low;
Delay_1ms(1);
EN_high;
Delay_1ms(1);
}
EN_low;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//最高输出速率50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
void LCD_Init(void)
{
Delay_1ms(15);
LCD_WriteBits(CMD,0X38);
Delay_1ms(5);
LCD_WriteBits(CMD,0X38);
Delay_1ms(5);
LCD_WriteBits(CMD,0X38);
LCD_Busy();
LCD_WriteBits(CMD,0X38);
LCD_Busy();
LCD_WriteBits(CMD,0x08);
LCD_Busy();
LCD_WriteBits(CMD,0x01);
LCD_Busy();
LCD_WriteBits(CMD,0x06);
LCD_Busy();
LCD_WriteBits(CMD,0X0c);
}
void Delay_2us(u32 time)
{
u8 i;
while(time--)
for(i=0;i<10;i++);
}
void Delay_1ms(u32 time)
{
u32 i;
while(time--)
for(i=0;i<8000;i++);
}
int main(void)
{
LCD_Configuration();
LCD_Init();
LCD_WriteBits(CMD,0X80);
LCD_Write("A");
while(1)
{
LCD_Write("A");
Delay_1ms(1000);
}
}
|
|