芯圣样品开发板 试用小记, 点个ST7567的12864点阵屏
本帖最后由 芯圣电子官方QQ 于 2023-7-25 14:27 编辑摸索中........不习惯51的方式写程序...
搞了一下午....一直都点不亮这屏,换着方法找坛友的例程LED跑一下, 结果也不亮...晕死....
难怪我搞一下午都不行..........肯定那搞错了............特么的是我脑抽了, 没拔对供电方式....
程序初始化部份如下, 详细 见附件中的程序代码
#define ALLOCATE_EXTERN
#include "lcd.h"
void main()
{
WDTCCR = 0x00; //关闭看门狗
while((CLKCON & 0x20) != 0x20); //等待内部高频RC起振
CLKSWR = 0x51; //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
while((CLKSWR & 0xC0) != 0x40); //等待内部高频切换完成
CLKDIV = 0x01; //Fosc1分频得到Fcpu,Fcpu=16MHz
P0M1 = P0M1 & 0xF0 | 0x08; //P02推挽输出 MISO_DC_A0
P0M0 = P0M0 & 0xF0 | 0x08; //P00推挽输出 MOSI_SDI_SDA
P2M0 = P2M0 & 0xF0 | 0x08; //P20推挽输出 SCK_SCL
P0M3 = P0M3 & 0x0F | 0x80; //P07推挽输出 CS
P2M0 = P2M0 & 0x0F | 0x80; //P21推挽输出 BL_LED
P2M1 = P2M1 & 0xF0 | 0x08; //P22推挽输出 LCD_RST
LCD_Init();
LCD_Print(32, 8, "芯圣MCU", TYPE16X16, TYPE8X16);
LCD_Print(24, 24, "HC89S003F4", TYPE16X16, TYPE8X16);
LCD_Print(24, 40, "By: SkyGz", TYPE16X16, TYPE8X16);
while (1)
{
}
}
点屏效果如图
不错,收藏了 我的现在也遇到问题了,写数据的时候使用for循环就出现错误,直接写数据就可以的
char LCD12864_Write16Data(unsigned char x,unsigned char y,unsigned char j, unsigned char mod)
{
unsigned char k, x1, x2 ;
if(y>7)
{
return 0;
}
if(x>98)
{
return 0;
}
y = y+ 0xB0;//ÇóYµÄ×ø±ê
LcdSt7565_WriteCmd(y); ///дYµÄ×ø±êÖµ
x1 = (x >> 4) & 0x0F; //ÓÉÓÚX×ø±êÒªÁ½¾äÃüÁ·Ö¸ßµÍ4룬ËùÒÔÕâÀïÏÈÈ¡³ö¸ß4λ
x2 = x & 0x0F; //È¥µÍËÄλ
//--ÉèÖÃX×ø±ê--//
LcdSt7565_WriteCmd(0x10 + x1); //¸ß4λ
LcdSt7565_WriteCmd(0x00 + x2); //µÍ4λ
for(k=0;k<16;k++)
{
if(k==8) //ÓÉÓÚ8 X16Óõ½Á½¸öY×ø±ê£¬µ±´óÓÚµÈÓÚ16ʱ£¬Çл»×ø±ê Õâ¸ö´¦ÀíÓÐÎÊÌâ
{
LcdSt7565_WriteCmd(y+1); //--ÉèÖÃX×ø±ê--//
LcdSt7565_WriteCmd(0x10 + x1); //¸ß4λ
LcdSt7565_WriteCmd(0x00 + x2); //µÍ4λ}
}
if(mod == 1)
{
LcdSt7565_WriteData( DATA1 );
}
if(mod ==0)
{
LcdSt7565_WriteData(~DATA1 );
}
}
return 1;
}
这样写数据就不好用,直接写16个 LcdSt7565_WriteData( DATA1 );就可以 赞一个 看看,路过顶一下!
页:
[1]