找回密码
 立即注册
查看: 481|回复: 3

SPI-LCD12864, 单工: ST7920 AIP31020 串口模式

[复制链接]
  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 106 天

    [LV.6]常住居民II

    25

    主题

    304

    回帖

    1013

    积分

    荣誉版主

    Cyber Hamster

    积分
    1013
    发表于 2023-12-13 21:48:16 | 显示全部楼层 |阅读模式
    SPI-LCD12864, 单工 : ST7920,AIP31020 串口模式
    截图202312231548058220.jpg
    STC8F1K08

    #define         Write_Command                                                                        0xf8
    #define         Write_Data                                                                                0xfa
    #define         Read_Command                                                                        0xfc
    #define                Read_Data                                                                                0xfe
    #define                Setting_Basic_Instruction_Set                                        0x30
    #define                Setting_Extended_Instruction_Set_Drawing_Off        0x34
    #define                Setting_Extended_Instruction_Set_Drawing_On                0x36
    #define                Clear_Display                                                                        0x01
    #define                Entry_Mode_Cursor_Left                                                        0x04
    #define                Entry_Mode_Entire_Right                                                        0x05
    #define                Entry_Mode_Cursor_Right                                                        0x06
    #define                Entry_Mode_Entire_Left                                                        0x07
    #define                Display_Off                                                                                0x08
    #define                Display_On_Cursor_Off_Inverse_Off                                0x0c
    #define                Display_On_Cursor_Off_Inverse_On                                0x0d
    #define                Display_On_Cursor_On_Inverse_Off                                0x0e
    #define                Display_On_Cursor_On_Inverse_On                                        0x0f
    #define                Cursor_Move_Left                                                                0x10
    #define                Cursor_Move_Right                                                                0x14
    #define                Display_Move_Left                                                                0x18
    #define                Display_Move_Right                                                                0x1c

    /*----------------------------写1字节命令或数据----------------------------*/
    void LCD12864_Write_Byte(unsigned char temp)
    {
            unsigned char i;
            for(i=0;i<8;i++)
            {
                    if((temp<<i)&0x80)
                            LCD12864_SID=1;
                    else
                            LCD12864_SID=0;
                    LCD12864_SCLK=0;
                    LCD12864_SCLK=1;
            }
    }

    /*----------------------------传送数据或者命令----------------------------*/
    void LCD12864_Write(unsigned char Command,unsigned char temp)
    {
            LCD12864_Write_Byte(Command);
            LCD12864_Write_Byte(temp&0xf0);
            LCD12864_Write_Byte((temp<<4)&0xf0);
    }

    /*----------------------------清空GDRAM----------------------------*/
    void Clear_GDRAM(void)
    {
            unsigned char i,j,k;
            LCD12864_Write(Write_Command,Setting_Extended_Instruction_Set_Drawing_Off);
            k=0x80;
            for(i=0;i<32;i++)
            {
                    LCD12864_Write(Write_Command,k++);
                    LCD12864_Write(Write_Command,0x80);
                    for(j=0;j<16;j++)
                    {
                            LCD12864_Write(Write_Data,0x00);
                    }
            }
            k=0x80;
            for(i=0;i<32;i++)
            {
                    LCD12864_Write(Write_Command,k++);
                    LCD12864_Write(Write_Command,0x88);
                    for(j=0;j<16;j++)
                    {
                            LCD12864_Write(Write_Data,0x00);
                    }
            }
            LCD12864_Write(Write_Command,Setting_Extended_Instruction_Set_Drawing_On);
    }

    /*----------------------------整页显示字符----------------------------*/
    void Display_Text(unsigned char code *addr)
    {
            unsigned char i;
            LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
            LCD12864_Write(Write_Command,0x80);        //设置DDRAM地址
            Delay_10us();
            for(i=0;i<16;i++)
            {
                    LCD12864_Write(Write_Data,*addr);
                    addr++;
            }
            LCD12864_Write(Write_Command,0x90);        //设置DDRAM地址
            Delay_10us();
            for(i=0;i<16;i++)
            {
                    LCD12864_Write(Write_Data,*addr);
                    addr++;
            }
            LCD12864_Write(Write_Command,0x88);        //设置DDRAM地址
            Delay_10us();
            for(i=0;i<16;i++)
            {
                      LCD12864_Write(Write_Data,*addr);
                    addr++;
            }
            LCD12864_Write(Write_Command,0x98);        //设置DDRAM地址
            Delay_10us();
            for(i=0;i<16;i++)
            {
                    LCD12864_Write(Write_Data,*addr);
                    addr++;
            }
    }

    /*----------------------------指定位置显示字符----------------------------*/
    void Display_Data(unsigned char x,unsigned char y,unsigned char Data1,unsigned char Data2)
    {
            LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
            switch(y)
            {
                    case 0:
                            LCD12864_Write(Write_Command,0x80+x);        //设置DDRAM地址
                            Delay_10us();
                            LCD12864_Write(Write_Data,Data1);
                            LCD12864_Write(Write_Data,Data2);
                            break;
                    case 1:
                            LCD12864_Write(Write_Command,0x90+x);        //设置DDRAM地址
                            Delay_10us();
                            LCD12864_Write(Write_Data,Data1);
                            LCD12864_Write(Write_Data,Data2);
                            break;
                    case 2:
                            LCD12864_Write(Write_Command,0x88+x);        //设置DDRAM地址
                            Delay_10us();
                            LCD12864_Write(Write_Data,Data1);
                            LCD12864_Write(Write_Data,Data2);
                            break;
                    case 3:
                            LCD12864_Write(Write_Command,0x98+x);        //设置DDRAM地址
                            Delay_10us();
                            LCD12864_Write(Write_Data,Data1);
                            LCD12864_Write(Write_Data,Data2);
                            break;
            }
    }

    /*----------------------------初始化12864----------------------------*/
    void LCD12864_Init(void)
    {
            Delay_x10ms(4);                        //40mS延时
            LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
            Delay_x10us(10);                //100uS延时
            LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
            Delay_x10us(4);                        //40uS延时
            LCD12864_Write(Write_Command,Clear_Display);                                                //显示光标闪烁完全关闭
            Delay_x10us(10);                //100uS延时
            LCD12864_Write(Write_Command,Clear_Display);                                                //清除显示
            Delay_x10ms(1);                        //10mS延时
            LCD12864_Write(Write_Command,Entry_Mode_Cursor_Right);                                //光标右移模式
            Delay_x10us(10);                //100uS延时
            LCD12864_Write(Write_Command,Display_On_Cursor_Off_Inverse_Off);        //开显示,无光标,光标不闪烁
            Delay_x10us(10);                //100uS延时
            Clear_GDRAM();                        //清空GDRAM
            Delay_x10us(10);                //100uS延时
    }

    1702474411489.jpg

    1702474411501.jpg

    1702474411511.jpg

    1702474411539.jpg




    声明:该装置正常通过民航安检,没有在起飞降落阶段使用,没有任何锂电池处于充电状态,没有发射无线电信号的功能,没有导体意外接触裸露电极,没有影响其他人员或造成不良后果,请勿模仿。
    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    (=・ω・=)
    回复 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9232

    回帖

    1万

    积分

    管理员

    积分
    13938
    发表于 2023-12-14 08:16:09 | 显示全部楼层
    帮发几个 STC32G/STC8H, SPI/I2C 控制 LCD12864的例子
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 48 天

    [LV.5]常住居民I

    10

    主题

    28

    回帖

    216

    积分

    中级会员

    积分
    216
    发表于 2024-3-20 17:29:53 | 显示全部楼层
    你这个是用软件模拟SPI  能不能做内部SPI驱动

    点评

    有空一定弄(咕咕咕)  发表于 2024-3-21 11:47
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-28 15:15 , Processed in 0.065314 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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