打印

新人求解,STM32F103的LCD12864串行模式的问题

[复制链接]
4881|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yiyanfenghua|  楼主 | 2022-10-4 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何定义,这程序是否有问题,问题出在那?


#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LCD.h"


#define RST_0                GPIO_SetBits(GPIOB,GPIO_Pin_15)
#define RST_1                GPIO_ResetBits(GPIOB,GPIO_Pin_15)

#define PSB_0                GPIO_SetBits(GPIOB,GPIO_Pin_14)
#define PSB_1                GPIO_ResetBits(GPIOB,GPIO_Pin_14)

#define CS_0                GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define CS_1                GPIO_ResetBits(GPIOB,GPIO_Pin_13)

#define SID_0                GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define SID_1                GPIO_ResetBits(GPIOB,GPIO_Pin_12)

#define SCLK_0                GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define SCLK_1                GPIO_ResetBits(GPIOB,GPIO_Pin_11)


#define WRITE_CMD        0xF8//写命令  
#define WRITE_DAT        0xFA//写数据


void lcd12864_Init(void)
{       
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        SID_1;
        SCLK_1;
       
}


void send_dat(u8 dat)
{
        u8 i;
        for(i = 0;i < 8;i++)
    {
        if((dat& 0x80)==0x80)
                    SID_1;
                if((dat& 0x80)==0x00)
                        SID_0;
                SCLK_0;
                Delay_ms(50);
                SCLK_1;
                dat<<=1;
        }   
}

/*!
*  @brief      LCD写指令
*  @param  Cmd   要写入的指令
*/
void send_cmd(u8 Cmd )
{
     Delay_ms(1);   
     send_dat(WRITE_CMD);   
     send_dat(Cmd&0xf0);
     send_dat((Cmd&0x0f)<<4);
}

/*!
*  @brief      LCD写数据
*  @param  Dat   要写入的数据
*/
void write_char(u8 Dat )
{
         Delay_ms(1);
     send_dat(WRITE_DAT);
     send_dat(Dat&0xf0);
     send_dat((Dat&0x0f)<<4);
}
/*!
*  @brief      LCD初始化
*  @param  None
*/
void Lcd_Init(void)
{
        RST_0;
        Delay_ms(50);
        RST_1;
        Delay_ms(50);
        CS_1;
    Delay_ms(50);
        send_cmd(0x30);
    Delay_ms(1);
    send_cmd(0x0c);
    Delay_ms(1);
    send_cmd(0x01);
    Delay_ms(30);
        send_cmd(0x02);
    Delay_ms(30);
        send_cmd(0x80);
        PSB_0;
}
void lcd_addr(uint8_t y_add,uint8_t x_add)
{
        switch(y_add)
        {
                case 1:
                send_cmd(0x80|x_add);break;
                case 2:
                send_cmd(0x90|x_add);break;
                case 3:
                send_cmd(0x88|x_add);break;
                case 4:
                send_cmd(0x98|x_add);break;
        default:break;
        }
}

/*!
*  @brief      显示字符或汉字
*  @param  x: row(0~3)
*  @param  y: line(0~7)
*  @param         str: 要显示的字符或汉字
*/
void LCD_Display_Words(uint8_t y_add,uint8_t x_add , char *str)
{
        uint8_t i;
        lcd_addr(y_add,x_add);
        for(i=0;str!='\0';i++)
        {
                write_char(str);
        }
}

/*!
*  @brief      清屏函数
*  @param  None
*/
void LCD_Clear(void)
{
        send_cmd(0x01);
        Delay_ms(2);
}

使用特权

评论回复
沙发
LcwSwust| | 2022-10-4 12:41 | 只看该作者
这是在问问题还是在出题?

使用特权

评论回复
评论
LcwSwust 2022-10-4 14:49 回复TA
@yiyanfenghua :这哪能看出来问题,谁闲得没事。 这得靠你自己动手去试,编译、烧写到单片机里运行才能看到效果。 “程序是否有问题”得问你自己,遇到了具体的问题才好拿出来问。 
yiyanfenghua 2022-10-4 14:42 回复TA
问,才疏学浅,不够能力 
板凳
yiyanfenghua|  楼主 | 2022-10-4 15:00 | 只看该作者
本帖最后由 tyw 于 2022-10-4 15:48 编辑
LcwSwust 发表于 2022-10-4 12:41
这是在问问题还是在出题?

编译过了,烧进单片机没有效果,万般无奈才来这问大家,可能发帖的词语用的不太准确,对不起了。


STM32F101xx和STM32F103xx固件函数库 368页 2.8M 超清书签版.pdf (2.79 MB)
stm32F103 完整版 463页 4.2M 超清书签版.pdf (4.19 MB)
零死角玩转 STM32F103-指南者 692页 24.6M 高清书签版.pdf (24.07 MB)

                   tyw  注


使用特权

评论回复
评论
ningling_21 2022-10-9 09:26 回复TA
高低电平定义没错? 延时时间正确? 
地板
LcwSwust| | 2022-10-4 15:41 | 只看该作者
本帖最后由 LcwSwust 于 2022-10-4 15:44 编辑
yiyanfenghua 发表于 2022-10-4 15:00
编译过了,烧进单片机没有效果,万般无奈才来这问大家,可能发帖的词语用的不太准确,对不起了。 ...

代码是LCD12864的卖家给的吗?是开发板配套的显示屏吗?有示波器吗?是否可以看看相关引脚波形?
这些代码不够啊,main都没看到,确定程序写对了?

LCD屏有多种型号,并非随便找个代码都能用,特别是初始化。

使用特权

评论回复
5
yiyanfenghua|  楼主 | 2022-10-4 16:05 | 只看该作者
LcwSwust 发表于 2022-10-4 15:41
代码是LCD12864的卖家给的吗?是开发板配套的显示屏吗?有示波器吗?是否可以看看相关引脚波形?
这些代码 ...

代码是我移植的,我自己在找找,看那出现的问题。

使用特权

评论回复
6
guixi12| | 2022-10-4 19:12 | 只看该作者
咔咔咔咔咔咔扩扩

使用特权

评论回复
7
jekey| | 2022-10-5 12:32 | 只看该作者
似乎你对set和reset的输出都搞反了。
GPIO_SetBits,输出高电平。

使用特权

评论回复
8
GlenX| | 2022-10-8 19:58 | 只看该作者

新人求解,STM32F103的LCD12864串行模式的问题

你的问题一定是LCD12864的应用问题,我做过很多失败的例子,各种通讯方式,最终都失败了,原因是这些LCD的所谓的串口,都是特定方式的特定字节(包括长度),一般直接USART、IIC、SPI基本都不能直接满足编程,只能用所谓的IO仿真的通讯方式,才能实现。不甘心失败,但这是事实,也许国内的LCD都是以前的老版,接口有待改善!

使用特权

评论回复
9
elec921| | 2022-10-8 21:43 | 只看该作者
ding

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝