找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1727|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

stm32f103單片機(jī)+LCD12864一直藍(lán)屏,無任何顯示 改如何調(diào)試?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

.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*)&"無邊光景一時(shí)新。";
        LCD12864_Write_Word(LCD_InitStructure);

        LCD_InitStructure.c51 = 0X88; //0X88-0X8F 16 8
        LCD_InitStructure.num = 16;
        LCD_InitStructure.dat = (u8*)&"等閑識(shí)得東風(fēng)面,";
        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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:771630 發(fā)表于 2023-1-26 02:11 | 只看該作者
調(diào)一下對(duì)比度,你這是對(duì)比度有問題
回復(fù)

使用道具 舉報(bào)

板凳
ID:1061573 發(fā)表于 2023-1-26 05:05 來自觸屏版 | 只看該作者
我看csdn上 很多直接vo對(duì)比度空接  根本不管
回復(fù)

使用道具 舉報(bào)

地板
ID:1061573 發(fā)表于 2023-1-26 06:45 來自觸屏版 | 只看該作者
XLinliY.Zhang 發(fā)表于 2023-1-26 02:11
調(diào)一下對(duì)比度,你這是對(duì)比度有問題

我按照csdn 上例程來的  很多csdn博主都把VO對(duì)比度空接了
回復(fù)

使用道具 舉報(bào)

5#
ID:1059013 發(fā)表于 2023-1-26 13:13 | 只看該作者
如何代碼沒有bug,那么調(diào)低單片機(jī)的主頻試試
回復(fù)

使用道具 舉報(bào)

6#
ID:965189 發(fā)表于 2023-1-26 14:19 | 只看該作者
有一些12864的背面有對(duì)比度調(diào)節(jié)電位器。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表