18纯情男高中生 发表于 2023-11-11 08:55:19

LCD12864驱动程序 【C语言】


主控芯片:stc8h8k64u(打狗棒)

#include "stc8h.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define lcd P2
sbit rs=P0^0;
sbit rw=P0^1;
sbit e=P0^2;
sbit psb=P0^3;
uchar code tab1[]={"店铺链接:"};
uchar code tab2[]={"KCER001.taobao.c"};
uchar code tab3[]={"STC 国芯启航"};
uchar code tab4[]={"STCMCUAI.COM"};
void init_io()
{
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;
}
void Delay1000ms()      //@11.0592MHz
{
    unsigned char data i, j, k;
    i = 57;
    j = 27;
    k = 112;
    do
    {
      do
      {
            while (--k);
      } while (--j);
    } while (--i);
}
void Delay100ms()      //@11.0592MHz
{
    unsigned char data i, j, k;
    _nop_();
    i = 6;
    j = 157;
    k = 59;
    do
    {
      do
      {
            while (--k);
      } while (--j);
    } while (--i);
}
void delayus(uint us)
{
    while (us--);
}
void lcd_busy()
{
    rs=0;
    rw=1;
    e=1;
    lcd=0xff;
    while((lcd&0x80)==0x80);
    e=0;
}
void lcd_wcmd(uchar cmd)
{
    lcd_busy();
    rs=0;
    rw=0;
    e=0;
    delayus(10);
    lcd = cmd;
    delayus(10);
    e =1 ;
    delayus(10);
    e =0 ;
}
void lcd_wdat(uchar dat)
{
    lcd_busy();
    rs=1;
    rw=0;
    e=0;
    delayus(10);
    lcd = dat;
    delayus(10);
    e =1 ;
    delayus(10);
    e =0 ;
}
void lcd_pos(uchar x,uchar y)
{
    uchar pos;
    if (x==0) {x=0x80;}
    else if (x==1) {x=0x90;}
    else if (x==2) {x=0x88;}
    else if (x==3) {x=0x98;}
   
    if (y==0) {y=0x00;}
    else if (y==1) {y=0x01;}
    else if (y==2) {y=0x02;}
    else if (y==3) {y=0x03;}
    else if (y==1) {y=0x04;}
    else if (y==2) {y=0x05;}
    else if (y==3) {y=0x06;}   
    else if (y==3) {y=0x07;}
   
    pos=x+y;
   
    lcd_wcmd( pos );
}
void lcd_init()
{
    psb= 1;
    lcd_wcmd(0x34);
    delayus(50);
    lcd_wcmd(0x30);
    delayus(50);
    lcd_wcmd(0x0c);
    delayus(50);
    lcd_wcmd(0x01);
    delayus(50);
}
main()
{
    uchar i,z,x,j;
    init_io();
    lcd_init();
    z=0;j=0;
   
lcd_pos(z,j); i = 0;
while(tab1 != '\0'){lcd_wdat(tab1);Delay100ms(); i++ ;}   
z++;
lcd_pos(z,j); i = 0;
while(tab2 != '\0'){lcd_wdat(tab2);Delay100ms(); i++ ;}   
z++;
lcd_pos(z,j); i = 0;
while(tab3 != '\0'){lcd_wdat(tab3);Delay100ms(); i++ ;}   
z++;
lcd_pos(z,j); i = 0;
while(tab4 != '\0'){lcd_wdat(tab4);Delay100ms(); i++ ;}   
while(1);
}

18纯情男高中生 发表于 2023-11-11 08:57:41

此代码 实现效果原图片为:

wzaefd 发表于 2023-11-11 10:11:55

这个代码软件延迟是不是太长啦

18纯情男高中生 发表于 2023-11-11 10:58:23

wzaefd 发表于 2023-11-11 10:11
这个代码软件延迟是不是太长啦

体现“动态”的效果
不然速度太快 直接就显示在屏幕上了😋
当然可自行安排延时时间的

WangChong 发表于 2023-11-13 23:50:35

18纯情男高中生 发表于 2023-11-15 07:35:13

WangChong 发表于 2023-11-13 23:50
这一个屏多少钱?

10元左右

yanhui 发表于 2023-11-17 18:06:30

学习一下

Heanqiyang 发表于 2023-11-23 23:16:46

🤙🤙🤙

lateron88 发表于 2023-12-1 16:02:54

学习一下

hjx5548 发表于 2023-12-3 02:37:13

这个屏驱动芯片是什么型号?链接发一下。
页: [1] 2
查看完整版本: LCD12864驱动程序 【C语言】