找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1040|回复: 5
打印 上一主题 下一主题
收起左侧

stm32f103单片机+LCD12864一直蓝屏,无任何显示 改如何调试?

[复制链接]
跳转到指定楼层
楼主

.h

#ifndef _LCD12864_H_
#define _LCD12864_H_

#include "stm32f10x.h"
#include "sys.h"

typedef struct{

        u8 c51 ;
        u8 num ;
        u8 *dat;

}LCD_InitTypeDef;

#define CS  GPIO_Pin_1 //RS
#define SID GPIO_Pin_2 //RW
#define CLK GPIO_Pin_3 //EN
#define PSB GPIO_Pin_4 //串并选择 H并 L串
#define CMD_PROT GPIOA

#define CS_HIGH GPIO_SetBits(CMD_PROT,CS)
#define CS_LOW GPIO_ResetBits(CMD_PROT,CS)

#define SID_HIGH GPIO_SetBits(CMD_PROT,SID)
#define SID_LOW GPIO_ResetBits(CMD_PROT,SID)

#define CLK_HIGH GPIO_SetBits(CMD_PROT,CLK)
#define CLK_LOW GPIO_ResetBits(CMD_PROT,CLK)

#define PSB_HIGH GPIO_SetBits (CMD_PROT,PSB)
#define PSB_LOW GPIO_ResetBits(CMD_PROT,PSB)

#define CMD 0XF8
#define DAT 0XFA



void LCD12864_UserConfig(void);
void LCD12864_Write_Init(void);
void LCD12864_Opne(void);
void LCD12864_Shut(void);
void LCD12864_Write_Cmd_Data(u8 cmd,u8 data);
void LCD12864_Write_Word(LCD_InitTypeDef LCD_InitStructure);
void LCD12864_Write_Number(u8 c51,u16 num);

#endif

.c


#include "stm32f10x.h"
#include "Delay.h"
#include "LCD12864.h"

void LCD12864_UserConfig(void){

        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

        GPIO_InitStructure.GPIO_Pin   = CS|SID|CLK|PSB; //CMD
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
        GPIO_Init(CMD_PROT,&GPIO_InitStructure);
}
void LCD12864_Write_Byte(u8 data){

        CS_HIGH;
        for(u8 i=0;i<8;i++){ // 1000 0000 << 0 >>

                ((data<<i)&0x80) ? SID_HIGH:SID_LOW;

                CLK_LOW;
                CLK_HIGH;
        }
        CS_LOW;
}
void LCD12864_Write_Cmd_Data(u8 cmd,u8 data){

        LCD12864_Write_Byte(cmd);
        LCD12864_Write_Byte(data&0xf0);//HIGH 0X38 1000 0000 & 1111 0000 1000 <<4
        LCD12864_Write_Byte((data<<4)&0xf0);
        Delay_ms(2);
}
void LCD12864_Write_Init(void){

        PSB_LOW;
        LCD12864_Write_Cmd_Data(CMD,0x30);
        LCD12864_Write_Cmd_Data(CMD,0x06);
        LCD12864_Write_Cmd_Data(CMD,0x0C);
        LCD12864_Write_Cmd_Data(CMD,0x01); //清屏
        LCD12864_Write_Cmd_Data(CMD,0x80);
}
void LCD12864_Opne(void){

        LCD12864_Write_Cmd_Data(CMD,0x0C);
}
void LCD12864_Shut(void){

        LCD12864_Write_Cmd_Data(CMD,0x08);
}
void LCD12864_Write_Word(LCD_InitTypeDef LCD_InitStructure){

        LCD12864_Write_Cmd_Data(CMD,LCD_InitStructure.c51);

        for(u8 i=0;i<LCD_InitStructure.num;i++){

                LCD12864_Write_Cmd_Data(DAT,*LCD_InitStructure.dat++);

                Delay_ms(200);
        }
}

void LCD12864_Write_Number(u8 c51,u16 num){

        const u8 number[] = {"0123456789"};

        LCD12864_Write_Cmd_Data(CMD,c51);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

        LCD12864_Write_Cmd_Data(DAT,number[num/1000]);    //1314 1
        LCD12864_Write_Cmd_Data(DAT,number[num%1000/100]);//1314 3
        LCD12864_Write_Cmd_Data(DAT,number[num%100/10]);  //1314 1
        LCD12864_Write_Cmd_Data(DAT,number[num%100%10]);  //1314 4        
}


main

#include "stm32f10x.h"
#include "LCD12864.h"
#include "Delay.h"


LCD_InitTypeDef LCD_InitStructure;

int main(void){

        LCD12864_UserConfig();
    LCD12864_Write_Init();

        LCD12864_Opne();

        LCD_InitStructure.c51 = 0X80; //0X80-0X8F 16 8
        LCD_InitStructure.num = 16;
        LCD_InitStructure.dat = (u8*)&"胜日寻芳泗水滨,";
        LCD12864_Write_Word(LCD_InitStructure);

        LCD_InitStructure.c51 = 0X90; //0X90-0X9F 16 8
        LCD_InitStructure.num = 16;
        LCD_InitStructure.dat = (u8*)&"无边光景一时新。";
        LCD12864_Write_Word(LCD_InitStructure);

        LCD_InitStructure.c51 = 0X88; //0X88-0X8F 16 8
        LCD_InitStructure.num = 16;
        LCD_InitStructure.dat = (u8*)&"等闲识得东风面,";
        LCD12864_Write_Word(LCD_InitStructure);

        LCD_InitStructure.c51 = 0X98; //0X98-0X9F 16 8
        LCD_InitStructure.num = 16;
        LCD_InitStructure.dat = (u8*)&"万紫千红总是春。";
        LCD12864_Write_Word(LCD_InitStructure);

        Delay_ms(500);

        LCD12864_Write_Cmd_Data(CMD,0x01);

        LCD12864_Write_Number(0x80,1314);//u8 0-255 u16 0-65535

        while(1){

                for(u8 i=0;i<200;i++){

                        LCD12864_Write_Number(0x90,i);//u8 0-255 u16 0-65535
                        Delay_ms(200);
                }
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:771630 发表于 2023-1-26 02:11 | 只看该作者
调一下对比度,你这是对比度有问题
回复

使用道具 举报

板凳
ID:1061573 发表于 2023-1-26 05:05 来自手机 | 只看该作者
我看csdn上 很多直接vo对比度空接  根本不管
回复

使用道具 举报

地板
ID:1061573 发表于 2023-1-26 06:45 来自手机 | 只看该作者
XLinliY.Zhang 发表于 2023-1-26 02:11
调一下对比度,你这是对比度有问题

我按照csdn 上例程来的  很多csdn博主都把VO对比度空接了
回复

使用道具 举报

5#
ID:1059013 发表于 2023-1-26 13:13 | 只看该作者
如何代码没有bug,那么调低单片机的主频试试
回复

使用道具 举报

6#
ID:965189 发表于 2023-1-26 14:19 | 只看该作者
有一些12864的背面有对比度调节电位器。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表