Yh117227 发表于 2023-4-3 10:23:03

LCD1602, LCD12864, 求助

如何用STC32G12K128实现LCD1602的显示???
希望有大神可以帮帮忙,求求。

芯征程 发表于 2023-4-3 10:44:06

本帖最后由 红心A 于 2023-4-3 10:45 编辑

STC32G12K128 实验箱演示程序包 中有 LCD128*64, LCD1602的演示程序

https://www.stcai.com/syx

芯征程 发表于 2023-4-3 11:02:36

STC-ISP V6.91N中的调试接口可以来模拟 :LCD12864显示,
https://www.stcaimcu.com/data/attachment/forum/202304/01/181935cnahzrylll4r555g.png
https://www.stcai.com/gjrj

Yh117227 发表于 2023-4-3 15:07:20

红心A 发表于 2023-4-3 10:44
STC32G12K128 实验箱演示程序包 中有 LCD128*64, LCD1602的演示程序

https://www.stcai.com/syx


哇!感谢!

Yh117227 发表于 2023-4-3 16:18:49

哥,你可以帮我看看我的程序哪里出问题了么?
我利用51在proteus上仿真好了,但是移植到32上lcd1602只亮但是不显示字母。{:4_184:}
#include <STC32G.h>
#include <intrins.h>

#define uchar unsigned char       
#define uintunsigned int       

sbit LcdRs_P   = P7^2;                             
sbit LcdRw_P   = P7^1;                       
sbit LcdEn_P   = P7^0;               



void DelayMs(uint time)
{
        uint i,j;
        for(i=0;i<time;i++)
                for(j=0;j<112;j++);
}



void LcdWriteCmd(uchar cmd)
{
        LcdRs_P = 0;
        LcdRw_P = 0;
        LcdEn_P = 0;
        P0=cmd;
        DelayMs(2);
        LcdEn_P = 1;   
        DelayMs(2);
        LcdEn_P = 0;       
}


void LcdWriteData(uchar dat)
{
        LcdRs_P = 1;
        LcdRw_P = 0;
        LcdEn_P = 0;
        P0=dat;
        DelayMs(2);
        LcdEn_P = 1;   
        DelayMs(2);
        LcdEn_P = 0;
}


void LcdGotoXY(uchar line,uchar column)
{
       
        if(line==0)      
                LcdWriteCmd(0x80+column);
       
        if(line==1)      
                LcdWriteCmd(0x80+0x40+column);
}




void LcdPrintStr(uchar *str)
{
        while(*str!='\0')
                        LcdWriteData(*str++);
}



void LcdInit()
{
        LcdWriteCmd(0x38);      
        LcdWriteCmd(0x0C);      
        LcdWriteCmd(0x06);      
        LcdWriteCmd(0x01);      
}


void LcdOn()   
{
        LcdWriteCmd(0x0c);
}

void LcdOff()
{
        LcdWriteCmd(0x08);
}


void LcdShowInit()
{
        LcdGotoXY(0,0);                                                                 
        LcdPrintStr("   LCD Test");
        LcdGotoXY(1,0);                                                                 
        LcdPrintStr("ABCDEFGHIJKLMNOP");       
}



void main()
{
          WTST = 0;//ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È
       
        P0M0 = 0x00;         
        P0M1 = 0x00;
    P7M1 = 0x00;
    P7M0 = 0x00;
       
//        P0 = 0xff
        //P0PU = 0xff;   
        //P7PU = 0xff;
       
        LcdInit();                                                       
        LcdShowInit();
       
        while(1)
        {
        }
}



神农鼎 发表于 2023-4-3 19:09:34

前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子


下载下来后,例程包中第53个例程 是LCD1602, 第36个例程 是LCD12864

你将STC8H的头文件换成STC32G的头文件,编译器从 KEIL C51 改成 KEIL C251 应该就搞定


https://www.stcaimcu.com/data/attachment/forum/202304/03/230408bp3urkyvuczjrhf2.png

angmall 发表于 2023-4-3 19:16:04

延时函数 要根据MCU时钟频率 ,   你的STC32频率是多少?

void Delay1ms()                //STC32@12.000MHz
{
        unsigned long i;

        _nop_();
        _nop_();
        _nop_();
        i = 2998UL;
        while (i) i--;
}

Yh117227 发表于 2023-4-3 20:26:44

angmall 发表于 2023-4-3 19:16
延时函数 要根据MCU时钟频率 ,   你的STC32频率是多少?

延时函数我改成这样的了


#define MAIN_Fosc      24000000UL
typedef         unsigned int        u16;
void delay_ms(u16 ms)
{
    u16 i;
    do{
      i = MAIN_Fosc / 6000;
      while(--i);
    }while(--ms);
}

Yh117227 发表于 2023-4-3 20:27:37

神农鼎 发表于 2023-4-3 19:09
前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子




感谢,我研究一下{:4_196:}

Yh117227 发表于 2023-4-3 21:08:37

神农鼎 发表于 2023-4-3 19:09
前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子




我用的stc32的话,大部分程序应该都是通用的吧?我是不是改改引脚就行?
页: [1] 2 3
查看完整版本: LCD1602, LCD12864, 求助