发新帖本帖赏金 500.00元(功能说明)我要提问
返回列表
[通用8051核FLASH系列]

【HC89S001P芯片试用】2、彩色显示屏驱动--刷屏

[复制链接]
875|1
手机看帖
扫描二维码
随时随地手机跟帖
tlled|  楼主 | 2019-3-23 18:05 | 显示全部楼层 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-24 14:58 编辑

    使员工HC89S001P芯片驱动LCD显示屏,刷屏显示

    一、电路图

    P04 -- SCLK
    P03 -- SDA  
    P00 -- RES
    P02 -- RS
    03233.png

    二、程序
#include "config.h"
#include "lcd.h"
#include "oledfont.h"
//#include "delay.h"


//延时函数 1MS
void delay_ms(uchar dt)
{
        uchar di,dj,dk;

        for(dk=0;dk<dt;dk++)
        {
                for(dj=0;dj<16;dj++)
                {
                        for(di=0;di<196;di++);
                }
        }
}



u16 BACK_COLOR, POINT_COLOR;   //背景色,画笔色
void LCD_Writ_Bus(char dat)   //串行数据写入
{        
        u8 i;                          
        for(i=0;i<8;i++)
        {                          
                OLED_SCLK_Clr();
                if(dat&0x80)
                   OLED_SDIN_Set();
                else
                        OLED_SDIN_Clr();
                        OLED_SCLK_Set();
                dat<<=1;   
        }                        
}

void LCD_WR_DATA8(char da) //发送数据-8位参数
{        
        OLED_DC_Set();
        LCD_Writ_Bus(da);  

}  
void LCD_WR_DATA(int da)
{
        OLED_DC_Set();
        LCD_Writ_Bus(da>>8);
        LCD_Writ_Bus(da);

}         
void LCD_WR_REG(char da)         
{        
        OLED_DC_Clr();
        LCD_Writ_Bus(da);
//        OLED_CS_Set();
}
void LCD_WR_REG_DATA(int reg,int da)
{
        LCD_WR_REG(reg);
        LCD_WR_DATA(da);
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
        LCD_WR_REG(0x2a);
   LCD_WR_DATA8(x1>>8);
   LCD_WR_DATA8(x1);
   LCD_WR_DATA8(x2>>8);
   LCD_WR_DATA8(x2);
  
   LCD_WR_REG(0x2b);
   LCD_WR_DATA8(y1>>8);
   LCD_WR_DATA8(y1);
   LCD_WR_DATA8(y2>>8);
   LCD_WR_DATA8(y2);

   LCD_WR_REG(0x2C);                                                                                          
}

void lcd_port_init(void)
{
        
        P0M0 = P0M1&0xF0|0x08;                                        //P00设置为推挽输出
        P0M1 = P0M1&0xF0|0x08;                                        //P02设置为推挽输出
        P0M1 = P0M1&0x0F|0x80;                                        //P03设置为推挽输出
        P0M2 = P0M2&0xF0|0x08;                                        //P04设置为推挽输出               

}

void Lcd_Init(void)
{
        uint32_t i;
        lcd_port_init();
        
        OLED_RST_Clr();
        delay_ms(5);
        OLED_RST_Set();
        delay_ms(5);
        
        LCD_WR_REG(0x11);
        OLED_RST_Clr();
        delay_ms(5);
        OLED_RST_Set();
        delay_ms(5);
        

        //************* Start Initial Sequence **********//

        LCD_WR_REG(0x36);
        LCD_WR_DATA8(0x70);

        LCD_WR_REG(0x3A);
        LCD_WR_DATA8(0x05);

        LCD_WR_REG(0xB2);
        LCD_WR_DATA8(0x0C);
        LCD_WR_DATA8(0x0C);
        LCD_WR_DATA8(0x00);
        LCD_WR_DATA8(0x33);
        LCD_WR_DATA8(0x33);

        LCD_WR_REG(0xB7);
        LCD_WR_DATA8(0x35);  

        LCD_WR_REG(0xBB);
        LCD_WR_DATA8(0x19);

        LCD_WR_REG(0xC0);
        LCD_WR_DATA8(0x2C);

        LCD_WR_REG(0xC2);
        LCD_WR_DATA8(0x01);

        LCD_WR_REG(0xC3);
        LCD_WR_DATA8(0x12);   

        LCD_WR_REG(0xC4);
        LCD_WR_DATA8(0x20);  

        LCD_WR_REG(0xC6);
        LCD_WR_DATA8(0x0F);   

        LCD_WR_REG(0xD0);
        LCD_WR_DATA8(0xA4);
        LCD_WR_DATA8(0xA1);

        LCD_WR_REG(0xE0);
        LCD_WR_DATA8(0xD0);
        LCD_WR_DATA8(0x04);
        LCD_WR_DATA8(0x0D);
        LCD_WR_DATA8(0x11);
        LCD_WR_DATA8(0x13);
        LCD_WR_DATA8(0x2B);
        LCD_WR_DATA8(0x3F);
        LCD_WR_DATA8(0x54);
        LCD_WR_DATA8(0x4C);
        LCD_WR_DATA8(0x18);
        LCD_WR_DATA8(0x0D);
        LCD_WR_DATA8(0x0B);
        LCD_WR_DATA8(0x1F);
        LCD_WR_DATA8(0x23);

        LCD_WR_REG(0xE1);
        LCD_WR_DATA8(0xD0);
        LCD_WR_DATA8(0x04);
        LCD_WR_DATA8(0x0C);
        LCD_WR_DATA8(0x11);
        LCD_WR_DATA8(0x13);
        LCD_WR_DATA8(0x2C);
        LCD_WR_DATA8(0x3F);
        LCD_WR_DATA8(0x44);
        LCD_WR_DATA8(0x51);
        LCD_WR_DATA8(0x2F);
        LCD_WR_DATA8(0x1F);
        LCD_WR_DATA8(0x1F);
        LCD_WR_DATA8(0x20);
        LCD_WR_DATA8(0x23);

        LCD_WR_REG(0x21);
        LCD_WR_REG(0x11);
        LCD_WR_REG(0x29);

}

//清屏函数
//Color:要清屏的填充色
void LCD_Clear(u16 Color)
{
        u16 i,j;         
        Address_set(0,0,LCD_W-1,LCD_H-1);
    for(i=0;i<LCD_W;i++)
         {
          for (j=0;j<LCD_H;j++)
                   {
                LCD_WR_DATA(Color);                                 
            }

          }
}

//main.c

//main.c
#define ALLOCATE_EXTERN

#include "config.h"
#include "lcd.h"

//系统初始化
void SystemInit(void)
{
        /************************************系统初始化****************************************/
        WDTCCR = 0x00;                                                //关闭看门狗
        while((CLKCON&0x20)!=0x20);                        //等待内部高频RC起振
        CLKSWR = 0x51;                                                //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
        while((CLKSWR&0xC0)!=0x40);                        //等待内部高频切换完成
        CLKDIV = 0x01;                                                //Fosc1分频得到Fcpu,Fcpu=16MHz
}

void main(void)
{
        uint i;
        uchar j=0x01;
        uchar k=0;
        SystemInit();                //系统初始化
        Lcd_Init();
        LCD_Clear(BRRED);
        
        while(1)
        {
                LCD_Clear(BRRED);
                for(i=0;i<50000;i++);
                LCD_Clear(WHITE);
                for(i=0;i<50000;i++);
                LCD_Clear(BLUE);
                for(i=0;i<50000;i++);
                LCD_Clear(BRED);
                for(i=0;i<50000;i++);
                LCD_Clear(GRED);
                for(i=0;i<50000;i++);
                LCD_Clear(GBLUE);
                for(i=0;i<50000;i++);
                LCD_Clear(RED );
                for(i=0;i<50000;i++);
                LCD_Clear(MAGENTA);
                for(i=0;i<50000;i++);
        }
}

    三、执行结果

    03234.gif









使用特权

评论回复

打赏榜单

芯圣电子官方QQ 打赏了 500.00 元 2019-04-08
理由:001P试用一等奖

零三翟邢止胃| | 2019-3-25 11:23 | 显示全部楼层
真是不错的啊! 好帖子啊! 不顶,对不起啊!

使用特权

评论回复
发新帖 本帖赏金 500.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

125

主题

689

帖子

6

粉丝