sujingliang 发表于 2023-11-26 11:12:13

51单片机四线spi驱动UC1601液晶屏

#include <STC89C5xRC.H>

/*
丝印:HEM12864-12,驱动IC:UC1601
        接线:1-CS;2-RST;3-DC;4-RW;5-SCK;8-SDA;13-VDD;14-BL-;15-BL+;16-GND
        51单片机四线spi驱动UC1601液晶屏
        焊盘1(BM0)\焊盘4(BM1)接地,BM:"LL":S8(四线spi)
*/


#define uchar unsigned char
#define uint unsigned int


#define Disp_On 0xaf // Display Enable
#define Disp_Off 0xae // Display Disable
#define Page_Add 0xb0 // Page Address Start
//#define Row_Add 0x40 // Scroll Line Start


sbit CD = P2^5; // Control or Data Select
sbit CS0 = P2^7; // Chip select
sbit RST = P2^6; // System reset
sbit SCK=P2^3;
sbit SDA=P2^2;


uchar row,col; // 全局变量

unsigned char code peom[]={
0x02,0xE2,0x22,0x22,0x22,0xFE,0x22,0x22,
0x22,0xFE,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x08,0x06,0x01,0x16,0x08,
0x06,0x01,0x02,0x4C,0x80,0x7F,0x00,0x00,/*"两",0*/

0x80,0x80,0x40,0x20,0x10,0x08,0x04,0xC3,
0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"个",1*/

0x10,0x10,0x12,0xD2,0x52,0x5F,0x52,0xF2,
0x52,0x5F,0x52,0xD2,0x12,0x10,0x10,0x00,
0x00,0x00,0x00,0x9F,0x52,0x32,0x12,0x1F,
0x12,0x32,0x52,0x9F,0x00,0x00,0x00,0x00,/*"黄",2*/

0xF2,0x12,0x12,0xF2,0x02,0xF2,0x12,0x12,
0xF2,0x00,0xFC,0x16,0x25,0x84,0xFC,0x00,
0xFF,0x01,0x82,0xFF,0x00,0xFF,0x01,0x82,
0xFF,0x10,0x13,0x12,0x52,0x82,0x7E,0x00,/*"鹂",3*/

0x00,0xFC,0x04,0x04,0xFC,0x00,0x00,0xFC,
0x04,0x16,0x65,0x04,0x84,0xFC,0x00,0x00,
0x00,0x0F,0x04,0x04,0x0F,0x00,0x10,0x13,
0x12,0x12,0x12,0x52,0x92,0x42,0x3E,0x00,/*"鸣",4*/

0x00,0x22,0x26,0x1A,0x12,0x02,0x7E,0x80,
0x22,0x26,0x1A,0x12,0x02,0x7E,0x00,0x00,
0x20,0x21,0x29,0x25,0x23,0x25,0x29,0xF1,
0x29,0x25,0x23,0x25,0x29,0x21,0x20,0x00,/*"翠",5*/

0x10,0x10,0xD0,0xFF,0x90,0x10,0xFC,0x04,
0x02,0xF8,0x00,0xFC,0x04,0x04,0xFC,0x00,
0x04,0x03,0x00,0xFF,0x00,0x01,0x8F,0x44,
0x32,0x0F,0x00,0xFF,0x04,0x08,0x07,0x00,/*"柳",6*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",7*/

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",8*/

0x00,0x10,0x88,0xC4,0x33,0x00,0x40,0x42,
0x42,0x42,0xC2,0x42,0x42,0x42,0x40,0x00,
0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,
0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,/*"行",9*/

0x00,0x00,0xF8,0x08,0x08,0x0C,0x0A,0x09,
0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0x00,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,
0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00,/*"白",10*/

0x00,0x80,0xEE,0x8A,0xFA,0xAA,0xAE,0x14,
0x12,0xF7,0xAA,0xAA,0xF6,0x12,0x10,0x00,
0x00,0x40,0x40,0x5E,0x52,0x53,0x56,0x5A,
0x52,0x5A,0x1E,0x50,0x90,0x70,0x00,0x00,/*"鹭",11*/

0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,
0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"上",12*/

0x40,0x44,0x54,0x54,0x54,0x54,0x54,0x7F,
0x54,0x54,0x54,0x54,0x54,0x44,0x40,0x00,
0x00,0x00,0x00,0xFF,0x15,0x15,0x15,0x15,
0x15,0x55,0x95,0x7F,0x00,0x00,0x00,0x00,/*"青",13*/

0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,
0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,
0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*"天",14*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"。",15*/

0x10,0x0C,0xC4,0x54,0x4C,0x64,0xD5,0x46,
0x44,0x44,0x4C,0x54,0xC4,0x14,0x0C,0x00,
0x00,0x00,0xFF,0x40,0x44,0x62,0x55,0x49,
0x55,0x43,0x40,0x40,0xFF,0x00,0x00,0x00,/*"窗",0*/

0x40,0x40,0x20,0x20,0x90,0x88,0x94,0xE3,
0x84,0x88,0x90,0x20,0x20,0x40,0x40,0x00,
0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x44,
0x46,0x45,0x44,0xFC,0x00,0x00,0x00,0x00,/*"含",1*/

0x02,0x02,0xE2,0x22,0x22,0xFE,0x22,0x22,
0x22,0xFE,0x22,0x22,0xE2,0x02,0x02,0x00,
0x00,0x00,0xFF,0x48,0x44,0x43,0x40,0x40,
0x40,0x43,0x44,0x44,0xFF,0x00,0x00,0x00,/*"西",2*/

0x00,0xF0,0x00,0xFF,0x00,0xF0,0x40,0x20,
0x10,0x0C,0x23,0xCC,0x10,0x20,0x40,0x00,
0x00,0x1F,0x10,0x0F,0x08,0x1F,0x00,0x01,
0x09,0x11,0x21,0xD1,0x0D,0x03,0x00,0x00,/*"岭",3*/

0x80,0x80,0x84,0x84,0x84,0x84,0x84,0xFC,
0x82,0x82,0x82,0x83,0x82,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"千",4*/

0x24,0x24,0xA4,0xFE,0x23,0x22,0x80,0x70,
0x00,0xFF,0x00,0x80,0x40,0x30,0x00,0x00,
0x08,0x06,0x01,0xFF,0x01,0x86,0x40,0x30,
0x0E,0x01,0x06,0x18,0x20,0x40,0x80,0x00,/*"秋",5*/

0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,
0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,
0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,/*"雪",6*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",7*/

0x00,0xF8,0x01,0x06,0x00,0x00,0x02,0x02,
0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,/*"门",8*/

0x10,0x60,0x02,0x0C,0xC0,0x00,0xF8,0x08,
0x0C,0x0B,0x08,0x08,0x08,0xF8,0x00,0x00,
0x04,0x04,0x7C,0x03,0x00,0x00,0xFF,0x41,
0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,/*"泊",9*/

0x00,0x08,0x88,0x48,0x28,0x18,0x0F,0xE8,
0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x20,0x11,0x09,0x05,0x41,0x81,0x7F,
0x01,0x01,0x05,0x09,0x11,0x20,0x00,0x00,/*"东",10*/

0x00,0x00,0x80,0x9E,0x92,0x92,0x92,0x92,
0x92,0x92,0x92,0x9E,0x80,0x00,0x00,0x00,
0x84,0x84,0x44,0x44,0x24,0x14,0x0C,0x07,
0x0C,0x14,0x24,0x44,0x44,0x84,0x84,0x00,/*"吴",11*/

0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,
0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,
0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,
0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,/*"万",12*/

0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,
0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,
0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,/*"里",13*/

0x80,0x80,0xFC,0x96,0xE5,0x84,0xFC,0x80,
0x40,0x3E,0x02,0x02,0x7E,0x40,0x40,0x00,
0x80,0x60,0x1F,0x02,0x4C,0x80,0x7F,0x00,
0xFE,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,/*"船",14*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"。",15*/



};
/*------------------延时子程序1----------------------------*/

void delay(uint i)
{
        while(i--);
}

/*------------------延时子程序2----------------------------*/

void delay1s(uint t)
{
        uint i,j;
        for(i=0;i<t;i++)
        for(j=0;j<10000;j++)
        ;
}


void write_byte(uchar byte)
{
        uchar i=0x80;
        SCK=0;
        delay(10);
        SDA=0;
       
        while(i){
                if(byte&i) SDA=1;
                else SDA=0;
                SCK=1;
                delay(10);
                SCK=0;
                i>>=1;
        }       
       
        SCK=0;
        delay(10);
        SDA=1;
}
/*------------------写命令到LCD-----------------------------*/

void write_com(uchar cmdcode)
{
        CD = 0;
        CS0 = 0;
        write_byte(cmdcode);
        CS0 = 1;
}

/*-------------------写数据到LCD----------------------------*/

void write_data(uchar Dispdata)
{
        CD = 1;
        CS0 = 0;
        write_byte(Dispdata);
        CS0 = 1;
}

/*-------------------清屏-----------------------------------*/
void Clr_Scr()
{
        uchar j,k;
        for(k=0;k<8;k++)
        {
                write_com(Page_Add+k);
                write_com(0x10);
                write_com(0x00);
                for(j=0;j<132;j++)
                        write_data(0x00);
        }
}

/*------------------初始化LCD屏-----------------------------*/
void Init_lcd()
{
        delay(6000);
        RST=0;
        delay(6000);
        RST=1;
        delay(6000);
        write_com(0xe2); // Set System Reset
        delay(6000);
        write_com(0x2f); // Set Power Control loading 15-24nF

        write_com(0xa6); // Set 正常 Display
        write_com(0xc4); // Set Mapping Control
        write_com(0xa0); // Set Frame Rate
        write_com(0x89); // Set RAM Address Control
        write_com(0xe8); // Set Bias Ratio : 1/6
        write_com(0x81);
        write_com(0xaf); // Set Vbias : 7.99V 0xff
        write_com(0xf1);
        write_com(0x3f); // Set COM End (63) 3f
        write_com(0xf2);
        write_com(0x00); // Set Partial Display Start (0)0x20
        write_com(0xf3);
        write_com(0x3f); // Set Partial Display End (63) 3f
        write_com(0x85); // Set Partial Display Control
        write_com(Disp_On); // Set Display Enable
}


//-------LCD设置坐标---------------------------------------

void LCD_SetPos(uint page, uint column)
{
    column = column - 1; //我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1.
    page = page - 1;
                write_com(0xb0 + page);
                write_com(column & 0x0f);
    column >>= 4;
    column=column|0x10;
                write_com(column);                //取高4位行地址
}


//显示 16x16 点阵图像、汉字、生僻字或 16x16
void display_graphic_16x16(uint page, uint column,uchar fs,signed char *dp)
{
                uchar i;//;
    LCD_SetPos(page, column);                //发送地址,第一页
    for (i = 0; i < 16; i++)                              //第一页的数据16字节,列号自动累加
    {
      if(fs==0)write_data( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。
                                if(fs==1)write_data(~*dp); //反色
      dp++;
    }
    LCD_SetPos(page + 1, column);                //发送地址,第二页
    for (i = 0; i < 16; i++)                              //第二页的数据16字节
    {
                        if(fs==0)write_data( *dp); //写数据到LCD,如果要反色显示,就在*P前用~取反。
                        if(fs==1)write_data(~*dp); //反色
      dp++;
    }
}


void main()
{
        int i;
        Init_lcd();
        Clr_Scr();
        while(1)
        {
                Clr_Scr();

                for(i=0;i<32;i++)
                {
                        display_graphic_16x16(1+(int)(i/8)*2, i*16%128+1, 0, peom+i*32);
                }
                delay1s(50);

                for(i=0;i<1024;i++)
                {
                        display_graphic_16x16((1+(int)(i/8)%8*2)%8, i*16%128+1, 0, peom+(i%32)*32);
                        write_com(0x40|i%64); // Set Scroll Line
            delay1s(1);
                }

                delay1s(50);

        }
}

选择与判断 发表于 2023-12-1 08:39:01

用的isp
页: [1]
查看完整版本: 51单片机四线spi驱动UC1601液晶屏