打印

stm32串行驱动12864

[复制链接]
1213|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangyc173|  楼主 | 2014-10-16 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人菜鸟一枚,初次用stm32f103rc的芯片串行驱动12864,一直显示不出字,问一下问题在哪里?
硬件上定义的pc口的6,7,8,9,10分别定义的RS,SID,CLK,PSB,RST,硬件上电压5V没问题。

下面是程序:

#include"stm32f10x.h"
#include"stm32f10x_gpio.h"
#include"stm32f10x_rcc.h"

#define Line1 0x80 //液晶显示第一行
#define Line2 0x90 //液晶显示第二行
#define Line3 0x88 //液晶显示第三行
#define Line4 0x98 //液晶显示第四行

#define LCD_IO GPIOC
#define RS GPIO_Pin_6
#define SID GPIO_Pin_7
#define CLK GPIO_Pin_8
#define PSB GPIO_Pin_9
#define RST GPIO_Pin_10

#define SET(n) GPIO_SetBits(GPIOC,n)
#define RESET(n) GPIO_ResetBits(GPIOC,n)
#define CMD (uint32_t)0xf8000000
#define DATE (uint32_t)0xfa000000

GPIO_InitTypeDef    GPIO_InitStructure;



void LCD_IOinit_OUT(void);
void LCD_Write(uint32_t cmd,uint8_t ddate);
void Display(uint8_t addr,uint8_t *hz);
void LCD_init(void);
void delay_ms(unsigned int ms);
void delay_us(unsigned int us);


int main(void)
  {
        LCD_IOinit_OUT();
        LCD_init();
        while(1)
        {

                Display(Line1,"1111");
                Display(Line2,"2222");
                Display(Line3,"3333");
                Display(Line4,"4444");

       
        }

  }



void LCD_IOinit_OUT(void)
{
         SystemInit();
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
         GPIO_InitStructure.GPIO_Pin =RS|SID|CLK|PSB|RST;   
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(LCD_IO, &GPIO_InitStructure);


}


void LCD_Write(uint32_t cmd,uint8_t ddata)
{
        uint32_t temp = cmd;
        uint32_t i;
        RESET(RS);
        temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12);
        SET(RS);
        for(i=0;i<24;i++)
        {
                if(temp&0x80000000)
                        SET(SID);
                else
                        RESET(SID);
                SET(CLK);
                Dalay(2);
                RESET(CLK);
                temp=temp<<1;
        }
        RESET(RS);
}

void Display(uint8_t addr,uint8_t *hz)
{
        LCD_Write(CMD,addr);
        Dalay(3);
        while(*hz!='\0')
        {
                LCD_Write(DATE,*hz);
                hz++;
                Dalay(3);
       
        }

}


void LCD_init(void)
{
        delay_ms(40);
        RESET(RS);
        RESET(PSB);
        RESET(RST);
        delay_us(100);
        SET(RST);
        delay_us(40);
        LCD_Write(CMD,0x30);
        delay_us(40);
        LCD_Write(CMD,0x0c);
        delay_us(40);
        LCD_Write(CMD,0x01);
        delay_us(40);
        LCD_Write(CMD,0x06);
        delay_us(40);

       

}



void delay_us(unsigned int us)
{
unsigned char i;
    us=us*5/4;
    for( i=0;i<us;i++);
}

void delay_ms(unsigned int ms)
{
   unsigned int i,j;
    for( i=0;i<ms;i++)
    for(j=0;j<1141;j++);
}



相关帖子

沙发
lu50211| | 2014-11-1 16:51 | 只看该作者
这个是我用STM8S写的,你看看吧。

XZ-STM8S105K4-UART.rar

285.23 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝