| 
 
   
- 帖子
 - 41 
 - 主题
 - 10 
 - 精华
 - 0 
 - 积分
 - 21 
 - 在线时间
 - 20 小时 
 - 注册时间
 - 2010-10-6 
 
  | 
stm32上驱动1602液晶的代码(keil平台)
 
 本帖最后由 panfeng881112 于 2010-12-13 19:24 编辑  
 
#define SET_LE  GPIO_SetBits(GPIOD, GPIO_Pin_8) 
#define CLE_LE  GPIO_ResetBits(GPIOD, GPIO_Pin_8) 
#define LCD_Read GPIO_SetBits(GPIOD, GPIO_Pin_9) 
#define LCD_Write GPIO_ResetBits(GPIOD, GPIO_Pin_9) 
#define SET_SC  GPIO_SetBits(GPIOD, GPIO_Pin_10) 
#define CLE_SC  GPIO_ResetBits(GPIOD, GPIO_Pin_10) 
/******************************************************/ 
void lcd_init( void )  //初始化 
{   
    SysTickDelay(15); 
    Lcd_Write_Command( 0x38,0);            //  
    SysTickDelay(5);  
    Lcd_Write_Command( 0x38,0);            //  
    SysTickDelay(5);  
    Lcd_Write_Command( 0x38,0);            //    
    Lcd_Write_Command( 0x38,1);            //  
    Lcd_Write_Command( 0x08,1); 
    Lcd_Write_Command( 0x01,1);            //  
    Lcd_Write_Command( 0x06,1);            //  
    Lcd_Write_Command( 0x0d,1);  
}  
/******************************************************/ 
void Lcd_Write_Command(unsigned char x,char bz) //向液晶里面写入指令  
{  
    if(bz) lcd_bz(); 
    CLE_SC;  
    LCD_Write; 
    Delay(40);   // delay>30us 
    SET_LE; 
    Delay(40);   // delay>30us 
    Gpio_data(x);  
    Delay(20);   // delay 20us  
    CLE_LE;  
    Delay(300);   // delay>400us     
} 
/******************************************************/ 
void Lcd_Write_Data( char x) //向液晶里面写入数据  
{  
     lcd_bz(); 
     SET_SC; 
     LCD_Write; 
     Delay(40); // DELAY>30US 
     SET_LE; 
     Delay(40); // DELAY>40US 
     Gpio_data(x); 
     Delay(20); // 20US 
     CLE_LE; 
     Delay(300);  //400US 
}  
/******************************************************/ 
void lcd_bz()//判断忙 
{ 
     GPIO_InitTypeDef GPIO_InitStructure; 
     GPIO_InitStructure.GPIO_Pin =          GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //  DB0~DB7 
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度 
     GPIO_Init(GPIOD, &GPIO_InitStructure); 
     CLE_SC;  
     LCD_Read;  
     CLE_LE; 
     Delay(40);   // delay>30us 
     SET_LE; 
     Delay(100);  //delay>100us 
     while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_0)); 
     CLE_LE; 
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //  DB0~DB7 
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度 
     GPIO_Init(GPIOD, &GPIO_InitStructure); 
}  
/******************************************************/ 
void Gpio_data(unsigned char x) 
{   
GPIO_ResetBits(GPIOD, GPIO_Pin_7);  //DB0 
GPIO_ResetBits(GPIOD, GPIO_Pin_6);  //DB1 
GPIO_ResetBits(GPIOD, GPIO_Pin_5);  //DB2 
GPIO_ResetBits(GPIOD, GPIO_Pin_4);  //DB3 
GPIO_ResetBits(GPIOD, GPIO_Pin_3);  //DB4 
GPIO_ResetBits(GPIOD, GPIO_Pin_2);  //DB5 
GPIO_ResetBits(GPIOD, GPIO_Pin_1);  //DB6 
GPIO_ResetBits(GPIOD, GPIO_Pin_0);  //DB7 
if(x&0X01)GPIO_SetBits(GPIOD, GPIO_Pin_7);//DB0 
if(x&0X02)GPIO_SetBits(GPIOD, GPIO_Pin_6);//DB1 
if(x&0X04)GPIO_SetBits(GPIOD, GPIO_Pin_5);//DB2 
if(x&0X08)GPIO_SetBits(GPIOD, GPIO_Pin_4);//DB3 
if(x&0X10)GPIO_SetBits(GPIOD, GPIO_Pin_3);//DB4 
if(x&0X20)GPIO_SetBits(GPIOD, GPIO_Pin_2);//DB5 
if(x&0X40)GPIO_SetBits(GPIOD, GPIO_Pin_1);//DB6 
if(x&0X80)GPIO_SetBits(GPIOD, GPIO_Pin_0);//DB7 
} 
/******************************************************/ 
void set_position(unsigned char x,unsigned char y)   //字符初始位置设定,x表示列,y表示行  
{  
     unsigned char addr;  
     if(y==0)  
          addr=0x80+x;  
     else if(y==1) 
          addr=0xC0+x;  
     Lcd_Write_Command(addr,1) ;  
}  
/******************************************************/ 
void write_string(unsigned char x,unsigned char y, unsigned char *string) //向1602写一个字符串  
{  
   int i=0; 
   set_position(x,y);  
   while(string!='\0')  
   {  
       Lcd_Write_Data(string);  
       i++;  
   }  
}  
/******************************************************/ 
char wel1[]="www.hymcu.com"; 
int main(void) 
{  
    ChipHalInit();   //片内硬件初始化 
    ChipOutHalInit();  //片外硬件初始化 
    lcd_init(); 
    write_string(2,0,wel1); 
    write_string(3,1,wel1); 
} |   
 
 
 
 |