找回密码
 立即注册
查看: 1975|回复: 20

LCD1602, LCD12864, 求助

[复制链接]

该用户从未签到

3

主题

8

回帖

45

积分

新手上路

积分
45
发表于 2023-4-3 10:23:03 | 显示全部楼层 |阅读模式
如何用STC32G12K128实现LCD1602的显示???
希望有大神可以帮帮忙,求求。
回复 送花

使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 30 天

    [LV.5]常住居民I

    11

    主题

    184

    回帖

    1808

    积分

    版主

    积分
    1808
    QQ
    发表于 2023-4-3 10:44:06 | 显示全部楼层
    本帖最后由 红心A 于 2023-4-3 10:45 编辑

    STC32G12K128 实验箱演示程序包 中有 LCD128*64, LCD1602的演示程序
    1.png
    https://www.stcai.com/syx
    QQ:1638975601
    手机:19952583876
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 30 天

    [LV.5]常住居民I

    11

    主题

    184

    回帖

    1808

    积分

    版主

    积分
    1808
    QQ
    发表于 2023-4-3 11:02:36 | 显示全部楼层
    STC-ISP V6.91N中的调试接口可以来模拟 :LCD12864显示,

    https://www.stcai.com/gjrj
    QQ:1638975601
    手机:19952583876
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    45

    积分

    新手上路

    积分
    45
     楼主| 发表于 2023-4-3 15:07:20 | 显示全部楼层
    红心A 发表于 2023-4-3 10:44
    STC32G12K128 实验箱演示程序包 中有 LCD128*64, LCD1602的演示程序

    https://www.stcai.com/syx

    哇!感谢!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    45

    积分

    新手上路

    积分
    45
     楼主| 发表于 2023-4-3 16:18:49 | 显示全部楼层
    哥,你可以帮我看看我的程序哪里出问题了么?
    我利用51在proteus上仿真好了,但是移植到32上lcd1602只亮但是不显示字母。
    #include <STC32G.h>
    #include <intrins.h>

    #define uchar unsigned char       
    #define uint  unsigned 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)
            {
            }
    }



    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9462

    回帖

    1万

    积分

    管理员

    积分
    14007
    发表于 2023-4-3 19:09:34 | 显示全部楼层
    前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子
    1.png

    下载下来后,例程包中第53个例程 是LCD1602, 第36个例程 是LCD12864
    2.png
    你将STC8H的头文件换成STC32G的头文件,编译器从 KEIL C51 改成 KEIL C251 应该就搞定
    1.png



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 175 天

    [LV.7]常住居民III

    9

    主题

    856

    回帖

    3361

    积分

    论坛元老

    积分
    3361
    发表于 2023-4-3 19:16:04 | 显示全部楼层
    延时函数 要根据MCU时钟频率 ,   你的STC32频率是多少?

    1. void Delay1ms()                //STC32@12.000MHz
    2. {
    3.         unsigned long i;
    4.         _nop_();
    5.         _nop_();
    6.         _nop_();
    7.         i = 2998UL;
    8.         while (i) i--;
    9. }
    复制代码
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    45

    积分

    新手上路

    积分
    45
     楼主| 发表于 2023-4-3 20:26:44 | 显示全部楼层
    angmall 发表于 2023-4-3 19:16
    延时函数 要根据MCU时钟频率 ,   你的STC32频率是多少?

    延时函数我改成这样的了


    1. #define MAIN_Fosc        24000000UL
    2. typedef         unsigned int        u16;
    3. void delay_ms(u16 ms)
    4. {
    5.     u16 i;
    6.     do{
    7.         i = MAIN_Fosc / 6000;
    8.         while(--i);
    9.     }while(--ms);
    10. }
    复制代码
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    45

    积分

    新手上路

    积分
    45
     楼主| 发表于 2023-4-3 20:27:37 | 显示全部楼层
    神农鼎 发表于 2023-4-3 19:09
    前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子

    感谢,我研究一下
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    8

    回帖

    45

    积分

    新手上路

    积分
    45
     楼主| 发表于 2023-4-3 21:08:37 | 显示全部楼层
    神农鼎 发表于 2023-4-3 19:09
    前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子

    我用的stc32的话,大部分程序应该都是通用的吧?我是不是改改引脚就行?

    点评

    管脚是一样的,其他的看下手册哦  详情 回复 发表于 2023-4-4 08:37
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-17 10:07 , Processed in 0.082264 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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