LCD1602, LCD12864, 求助
如何用STC32G12K128实现LCD1602的显示???希望有大神可以帮帮忙,求求。 本帖最后由 红心A 于 2023-4-3 10:45 编辑
STC32G12K128 实验箱演示程序包 中有 LCD128*64, LCD1602的演示程序
https://www.stcai.com/syx
STC-ISP V6.91N中的调试接口可以来模拟 :LCD12864显示,
https://www.stcaimcu.com/data/attachment/forum/202304/01/181935cnahzrylll4r555g.png
https://www.stcai.com/gjrj
红心A 发表于 2023-4-3 10:44
STC32G12K128 实验箱演示程序包 中有 LCD128*64, LCD1602的演示程序
https://www.stcai.com/syx
哇!感谢! 哥,你可以帮我看看我的程序哪里出问题了么?
我利用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)
{
}
}
前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子
下载下来后,例程包中第53个例程 是LCD1602, 第36个例程 是LCD12864
你将STC8H的头文件换成STC32G的头文件,编译器从 KEIL C51 改成 KEIL C251 应该就搞定
https://www.stcaimcu.com/data/attachment/forum/202304/03/230408bp3urkyvuczjrhf2.png
延时函数 要根据MCU时钟频率 , 你的STC32频率是多少?
void Delay1ms() //STC32@12.000MHz
{
unsigned long i;
_nop_();
_nop_();
_nop_();
i = 2998UL;
while (i) i--;
}
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);
} 神农鼎 发表于 2023-4-3 19:09
前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子
感谢,我研究一下{:4_196:} 神农鼎 发表于 2023-4-3 19:09
前面都是给的 LCD12864的参考例子,其实STC8H8K64U的实验箱例程直接提供了LCD1602的例子
我用的stc32的话,大部分程序应该都是通用的吧?我是不是改改引脚就行?