找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2249|回复: 0
打印 上一主题 下一主题
收起左侧

0.96英寸OLED单片机程序 显示中文和阿拉伯数字

[复制链接]
跳转到指定楼层
楼主
ID:140644 发表于 2022-3-28 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/******************************************************
STC15W408ASP10提升机板测试0.96英寸OLED程序
2022 3 28  07:00 PAST  L301 CODE1439
    测试显示中文和阿拉伯数字通过
******************************************************/
              #include  "reg52.h"
              #include  "intrins.h"
              #define   uchar unsigned char
              #define   uint unsigned int
              uint        Value,A1,A2,A3;            //个位 十位 百位
              #define   high 1
              #define   low 0
/*************Pin Define***************/
              sbit      SCL=P3^1;
              sbit      SDA=P3^0;
              void      Initial_LY096BG30();
              void      Delay_50ms(unsigned int Del_50ms);
              void      Delay_1ms(unsigned int Del_1ms);
              void      fill_picture(unsigned char fill_Data);
              void      Picture_1();
              void      Picture();
              void      IIC_Start();
              void      IIC_Stop();
              void      Write_IIC_Command(unsigned char IIC_Command);
              void      Write_IIC_Data(unsigned char IIC_Data);
              bit       Write_IIC_Byte(unsigned char IIC_Byte);
/***********************Initial code*********************/
              void      Initial_LY096BG30()
              {
              Write_IIC_Command(0xAE);   //display off
              Write_IIC_Command(0x20);    //Set Memory Addressing Mode   
              Write_IIC_Command(0x10);    //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
              Write_IIC_Command(0xb0);    //Set Page Start Address for Page Addressing Mode,0-7
              Write_IIC_Command(0xc8);     //Set COM Output Scan Direction
              Write_IIC_Command(0x00);   //---set low column address
              Write_IIC_Command(0x10);   //---set high column address
              Write_IIC_Command(0x40);   //--set start line address
              Write_IIC_Command(0x81);   //--set contrast control register
              Write_IIC_Command(0x7f);
              Write_IIC_Command(0xa1);   //--set segment re-map 0 to 127
              Write_IIC_Command(0xa6);   //--set normal display
              Write_IIC_Command(0xa8);   //--set multiplex ratio(1 to 64)
              Write_IIC_Command(0x3F);   //
              Write_IIC_Command(0xa4);   //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
              Write_IIC_Command(0xd3);   //-set display offset
              Write_IIC_Command(0x00);   //-not offset
              Write_IIC_Command(0xd5);   //--set display clock divide ratio/oscillator frequency
              Write_IIC_Command(0xf0);   //--set divide ratio
              Write_IIC_Command(0xd9);   //--set pre-charge period
              Write_IIC_Command(0x22);   //
              Write_IIC_Command(0xda);   //--set com pins hardware configuration
              Write_IIC_Command(0x12);
              Write_IIC_Command(0xdb);   //--set vcomh
              Write_IIC_Command(0x20);   //0x20,0.77xVcc
              Write_IIC_Command(0x8d);   //--set DC-DC enable
              Write_IIC_Command(0x14);   //
              Write_IIC_Command(0xaf);   //--turn on oled panel
             }
/***********************0--A字符表*************************/
unsigned char code show1[]=
{
0x00,0xF0,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0X00,/*0CODE*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0X00,/*1CODE*/
0x00,0x70,0x08,0x08,0x08,0x08,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*2CODE*/
0X00,0X30,0X08,0X88,0X88,0X48,0X28,0X00,0X00,0X18,0X20,0X20,0X20,0X11,0X0E,0X00,/*3CODE*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*4CODE*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x18,0x21,0x20,0x20,0x11,0x0E,0x00,/*5CODE*/
0x00,0xE0,0x10,0x88,0x88,0x08,0x10,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*6CODE*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*7CODE*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*8CODE*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x10,0x21,0x22,0x22,0x11,0x0F,0x00,/*9CODE*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x1F,0x01,0x01,0x01,0x01,0x1F,0x00,/*ACODE*/
};     
/***********测试字符表*阴码 逆向 列行*************************/
unsigned char code show2[]=
{
0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,
0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00,/*"爱",0*/
0x00,0x00,0xE0,0x9F,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x08,0x00,0x00,
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x48,0x80,0x40,0x3F,0x00,0x00,0x00,/*"与",1*/
0x04,0x04,0x04,0xE4,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,
0x20,0x20,0x10,0x11,0x09,0xFD,0x43,0x21,0x03,0x05,0x09,0x11,0x28,0x44,0x40,0x00,/*"哀",2*/
0x10,0x92,0x52,0x32,0xFF,0x51,0x91,0x20,0x18,0xC0,0x3F,0xC0,0x10,0x0C,0x00,0x00,
0x01,0x40,0x30,0x00,0x77,0x80,0x84,0x8A,0xB1,0x80,0xE0,0x00,0x11,0x62,0x04,0x00,/*"愁",3*/
0x20,0x20,0x24,0xA4,0xAC,0xB4,0xA5,0xA6,0xA4,0xB4,0xAC,0xA4,0x24,0x20,0x20,0x00,
0x80,0x80,0xA0,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0xA0,0x80,0x80,0x00,/*"童",4*/
0x80,0x90,0x8C,0x84,0x84,0x84,0xF5,0x86,0x84,0x84,0x84,0x84,0x94,0x8C,0x80,0x00,
0x00,0x80,0x80,0x84,0x46,0x49,0x28,0x10,0x10,0x2C,0x23,0x40,0x80,0x00,0x00,0x00,/*"安",5*/
0x10,0x10,0xD0,0xFF,0x90,0x20,0x10,0x18,0xA7,0x44,0xA4,0x14,0x0C,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x05,0x02,0xFD,0x44,0x44,0x44,0x45,0xFD,0x02,0x02,0x00,/*"格",6*/
};
/*******************IIC Start******************/
              void IIC_Start()
              {
               SCL=high;
//Delay_us(1);        
               SDA=high;
               _nop_();
               SDA=low;
               _nop_();_nop_();
               SCL=low;
              }
/*************IIC Stop*************************/
              void IIC_Stop()
              {
              SDA=low;
              _nop_();
              SCL=high;
              _nop_();_nop_();
              SDA=high;
              }
/*****************IIC Write byte***************/
              bit Write_IIC_Byte(unsigned char IIC_Byte)
              {
              unsigned char i;
               bit Ack_Bit;                    //应答信号
               for(i=0;i<8;i++)        
               {
               if(IIC_Byte & 0x80)        //1?0?
               SDA=high;
               else
               SDA=low;
//Delay_us(1);
               SCL=high;
               _nop_();_nop_();
               SCL=low;
//Delay_us(1);
               IIC_Byte<<=1;            //loop
               }
              SDA=high;                        //释放IIC SDA总线为主器件接收从器件产生应答信号   
              _nop_();_nop_();
              SCL=high;                     //第9个时钟周期
              _nop_();_nop_();
              Ack_Bit=SDA;                    //读取应答信号
              SCL=low;
              return Ack_Bit;   
              }  
/*************IIC Write Command*****************/
              void Write_IIC_Command(unsigned char IIC_Command)
              {
              IIC_Start();
              Write_IIC_Byte(0x78);            //Slave address,SA0=0
              Write_IIC_Byte(0x00);            //write command
              Write_IIC_Byte(IIC_Command);
              IIC_Stop();
              }
/****************IIC Write Data*****************/
              void Write_IIC_Data(unsigned char IIC_Data)
              {
              IIC_Start();
              Write_IIC_Byte(0x78);            
              Write_IIC_Byte(0x40);            //write data
              Write_IIC_Byte(IIC_Data);
              IIC_Stop();
              }
/*******************fill_Picture*****************/
              void fill_picture(unsigned char fill_Data)
              {
              unsigned char m,n;
                for(m=0;m<8;m++)
               {
               Write_IIC_Command(0xb0+m);        //page0-page1
               Write_IIC_Command(0x00);        //low column start address
               Write_IIC_Command(0x10);        //high column start address
                for(n=0;n<128;n++)
                {
                Write_IIC_Data(fill_Data);
                }
               }
              }
/********************picture**********************/
              void cleardisp()
              {
              unsigned char x,y;
              
               for(y=0;y<8;y++)
               {
               Write_IIC_Command(0xb0+y);
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x10);
                for(x=0;x<128;x++)          //横向像素
                {
                Write_IIC_Data(0X00);
                }
               }
              }
/********************picture**********************/
              void picture_1()
              {
              unsigned char x,y;
              unsigned int i=0;
               for(y=0;y<2;y++)
               {
               Write_IIC_Command(0xb0+y); //竖向第一行    童
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x12);      //横向第一个字
                for(x=0;x<16;x++)          //横向像素
                {
                Write_IIC_Data(show2[x+y*16+128]);
                }
               }

               for(y=0;y<2;y++)
               {
               Write_IIC_Command(0xb0+y); //竖向第一行    安
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x13);      //横向第二个字
                for(x=0;x<16;x++)          //横向像素
                {
                Write_IIC_Data(show2[x+y*16+160]);
                }
               }

               for(y=0;y<2;y++)
               {
               Write_IIC_Command(0xb0+y); //竖向第一行    格
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x14);      //横向第二个字
                for(x=0;x<16;x++)          //横向像素
                {
                Write_IIC_Data(show2[x+y*16+192]);
                }
               }

               for(y=0;y<2;y++)               //爱
               {
               Write_IIC_Command(0xb2+y); //竖向第二行
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x12);      //横向第一个字
                for(x=0;x<16;x++)          //横向像素
                {
                Write_IIC_Data(show2[x+y*16]);
                }
               }

               for(y=0;y<2;y++)               //与
               {
               Write_IIC_Command(0xb2+y); //竖向第二行
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x13);      //横向第二个字
                for(x=0;x<16;x++)          //横向像素
                {
                Write_IIC_Data(show2[x+y*16+32]);
                }
               }

               for(y=0;y<2;y++)              //哀
               {
               Write_IIC_Command(0xb2+y); //竖向第二行
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x14);      //横向第一个字
                for(x=0;x<16;x++)          //横向像素
                {
                Write_IIC_Data(show2[x+y*16+64]);
                }
               }

               for(y=0;y<2;y++)               //愁
               {
               Write_IIC_Command(0xb2+y); //竖向第二行
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x15);      //横向第二个字
                for(x=0;x<16;x++)          //横向像素
                {
                Write_IIC_Data(show2[x+y*16+96]);
                }
               }
/***************以上显示中文”测试”两字“************/
               for(Value=0;Value<1000;Value++)
              {
               A1=Value/100;
               A2=(Value-A1*100)/10;
               A3=Value-A1*100-A2*10;
               for(y=0;y<2;y++)              //百位显示
               {
               Write_IIC_Command(0XB5+y); //纵向页
               Write_IIC_Command(00);      //横向离左部边缘开始的距离
               Write_IIC_Command(0X13);      //横向第四个字
                for(x=0;x<8;x++)          //横向像素
                {
                Write_IIC_Data(show1[x+y*8+A1*16]);
                }
               }
                for(y=0;y<2;y++)          //十位显示
                {
                Write_IIC_Command(0XB5+y);//纵向页
                Write_IIC_Command(00);      //横向离左部边缘开始的距离
                Write_IIC_Command(0X14);  //横向第五个字
                 for(x=0;x<8;x++)          //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A2*16]);
                }
                }
                for(y=0;y<2;y++)          //个位显示
                {
                Write_IIC_Command(0XB5+y);//纵向页
                Write_IIC_Command(00);      //横向离左部边缘开始的距离
                Write_IIC_Command(0X15);  //横向第六个字
                 for(x=0;x<8;x++)          //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A3*16]);
                }
                }
                Delay_50ms(3);
               }
              }
/**************Delay*******************************/
              void Delay_50ms(unsigned int Del_50ms)        //
              {
              unsigned int m;
              for(;Del_50ms>0;Del_50ms--)
              for(m=62450;m>0;m--);
              }
/**************Delay_1ms***************************/
              void Delay_1ms(unsigned int Del_1ms)               //
              {
                 unsigned char j;
              while(Del_1ms--)
               {   
               for(j=0;j<123;j++);
               }
              }
/*******************************Main*******************************/
              void main(void)        // Value,A1,A2;
              {
              Initial_LY096BG30();    //初始化显示屏
              Delay_1ms(5);
              while(1)
               {
               Value=0;
               cleardisp();
               fill_picture(0xff);    //全部填充显示屏
               Delay_50ms(40);
               cleardisp();
               fill_picture(0x02);    //全部填充显示屏
               Delay_50ms(40);
               cleardisp();
               Picture_1();            //
               }
              }                        //L301 CODE1439 2022 3 28提升机板测试0.96  inch OLED
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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