历史上的今天
返回首页

历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2020年10月10日 | 51单片机和OLED仿真 芯片SSD1306

2020-10-10 来源:51hei

用的是7Pin的OLED,就那个宝买的那种。用的是不是中景园的程序我就不知道了。芯片应该是用SSD1306,但是用仿真里面的SSD1306总是不对。我随便试了试SSD1308到时对了!


单片机源程序如下

#include "xianshispi.h"

#include "oledfont.h"


void delay_ms(unsigned int ms)

{                        

        unsigned int a;

        while(ms)

        {

                a=1800;

                while(a--);

                ms--;

        }

        return;

}


void OLED_WR_Byte(unsigned char dat,unsigned char cmd)                                           //写数据 或 指令

{                                                   //        数据                          指令

        unsigned char i;                          

        if(cmd) {OLED_DC(1);}

        else  {OLED_DC(0);        }          

        OLED_CS(0);

        for(i=0;i<8;i++)

        {                          

                OLED_SCL(0);

                if(dat&0x80)

                        {

                   OLED_SDIN(1);

                        }

                else

                OLED_SDIN(0);

                OLED_SCL(1);

                dat<<=1;   

        }                                                   

        OLED_CS(1);

        OLED_DC(1);             

}

void OLED_Set_Pos(unsigned char x, unsigned char y)                                    // 定位 —(轴)

{

        OLED_WR_Byte(0xb0+y,OLED_CMD);

        OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);

        OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);

}             

void OLED_Display_On(void)

{

        OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC??

        OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON

        OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON

}   

void OLED_Display_Off(void)

{

        OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC??

        OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF

        OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF

}                                                      

void OLED_Clear(void)                                                                                                           //清屏(全)

{  

        unsigned char i,n;                    

        for(i=0;i<8;i++)  

        {  

                OLED_WR_Byte (0xb0+i,OLED_CMD);

                OLED_WR_Byte (0x02,OLED_CMD);     

                OLED_WR_Byte (0x10,OLED_CMD);        

                for(n=0;n<128;n++)OLED_WR_Byte(0x00,OLED_DATA);

        }

}

void OLED_Clear2(void)                                                                                                   //清屏(一般)

{  

        unsigned char i,n;                    

        for(i=0;i<2;i++)  

        {  

                OLED_WR_Byte (0xb0+i,OLED_CMD);

                OLED_WR_Byte (0x02,OLED_CMD);   

                OLED_WR_Byte (0x10,OLED_CMD);      

                for(n=0;n<128;n++)OLED_WR_Byte(0xff,OLED_DATA);

        }

}

void OLED_ShowChar(unsigned char x,unsigned char y,unsigned int chr)                          //字符取反  (背景和数据)

{             

        unsigned int c=0,i=0;       

        c=chr-' ';                       

        if(x>Max_Column-1){x=0;y=y+2;}

        if(SIZE==16)

        {

                OLED_Set_Pos(x,y);       

                for(i=0;i<8;i++)

                OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);

                OLED_Set_Pos(x,y+1);

                for(i=0;i<8;i++)

                OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);

        }

        else

        {       

                OLED_Set_Pos(x,y+1);

                for(i=0;i<6;i++)

                {

                        OLED_WR_Byte(F6x8[c][i],OLED_DATA);

                }

        }

}

void OLED_ShowChar111(unsigned char x,unsigned char y,unsigned int chr)                          //字符取反  (背景和数据)

{             

        unsigned int c=0,i=0;       

        c=chr-' ';                       

        if(x>Max_Column-1){x=0;y=y+2;}

        if(SIZE==16)

        {

                OLED_Set_Pos(x,y);       

                for(i=0;i<8;i++)

                OLED_WR_Byte(~F8X16[c*16+i],OLED_DATA);

                OLED_Set_Pos(x,y+1);

                for(i=0;i<8;i++)

                OLED_WR_Byte(~F8X16[c*16+i+8],OLED_DATA);

        }

        else

        {       

                OLED_Set_Pos(x,y+1);

                for(i=0;i<6;i++)

                {

                        OLED_WR_Byte(~F6x8[c][i],OLED_DATA);

                }

        }

}

unsigned int oled_pow(unsigned char m,unsigned char n)

{

        unsigned int result=1;         

        while(n--)result*=m;   

        return result;

}                                                    

void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size)

{                

        unsigned char t,temp;

        unsigned char enshow=0;                                                  

推荐阅读

史海拾趣

百佳(BAIJIA)公司的发展小趣事

随着第四套人民币的发行和我国市场经济的改革开放,假币问题日益严重,百佳公司敏锐地抓住了这一市场机遇。他们迅速开发出既能点钞又能防伪的点钞机等金融机具,满足了市场的迫切需求。凭借过硬的产品质量和良好的口碑,百佳公司在金融机具市场上迅速崛起,成为了行业的佼佼者。

CINTERION公司的发展小趣事

近年来,CINTERION与泰雷兹达成战略合作,共同推出了创新型物联网无线通信模组Cinterion MV32。这款模组结合了泰雷兹在连接管理方面的灵活性和CINTERION在无线通信模组技术上的优势,为制造商提供了快速构建和维护高性能5G设备的解决方案。这一合作不仅加强了CINTERION在物联网领域的市场地位,也为其在未来的发展中注入了新的活力。

以上五个故事均基于CINTERION在电子行业中的发展历程和成就进行描述,旨在客观呈现其在不同领域的发展轨迹和技术实力。

福斯特半导体(Foster)公司的发展小趣事

2010年,电子支付与身份识别技术领域的领军企业金雅拓,全资收购了CINTERION。这一资本动作不仅为CINTERION带来了更多的资金支持,更使其在金雅拓的物联网事业部中获得了更广阔的发展空间。收购完成后,CINTERION继续保持其技术领先地位,并在金雅拓的推动下,进一步拓宽了产品线和应用领域。

Chemi-Con公司的发展小趣事

在电子行业的发展过程中,Chemi-Con公司意识到单一产品线的局限性,并开始积极探索多元化发展的道路。公司不仅拓展了电容器产品的应用领域,还涉足了光电子机械等新兴产业。此外,Chemi-Con还积极寻求与其他企业的合作,通过技术共享、资源共享等方式实现共赢。这种开放、合作的姿态使得Chemi-Con在行业中树立了良好的形象,也为公司的长远发展奠定了坚实的基础。

HBH-Microwave公司的发展小趣事

在电子行业中,客户需求往往具有多样性和特殊性。HBH-Microwave深知这一点,因此始终将提供定制化解决方案作为公司的核心竞争力之一。公司拥有一支专业的研发团队和完善的生产体系,能够根据客户的具体需求,快速设计出符合要求的微波组件和子系统。这种灵活性和高效性使得HBH在众多竞争对手中脱颖而出,赢得了大量客户的信赖和好评。

Advanced Microelectronic Products Inc公司的发展小趣事

在电子行业竞争日益激烈的背景下,AMP公司面临着来自同行的巨大压力。为了应对这一挑战,公司进行了战略调整,将重心转向高端电子产品的研发和生产。通过不断提升产品性能和品质,AMP公司成功打造了多个高端品牌,并在细分市场中取得了显著优势。此外,公司还积极拓展新的应用领域,为未来发展奠定了坚实基础。

问答坊 | AI 解惑

[推荐]基于UC3842的开关电源保护电路的改进(1)

来源:电源技术应用/黄庆义,胡荣强,王闯瑞核心器件: UC3842 0 引言   UC3842是美国Unltmde公司生产的一种性能优良的电流控制型脉宽调制芯片,它具有管脚数量少,外围电路简单等特点,因而得到了广泛的应用。但随着UC3842开关频率的提高,由它所 ...…

查看全部问答>

现在新出了一种单片机来替代AT89C51,它们最大的区别在哪?

现在单片机让人眼花缭乱的,究竟哪种性价比较好?…

查看全部问答>

SX1230 - Integrated Transmitter IC

The SX1230 is a fully integrated transmitter which can operate in the 315, 434, 868 and 915 MHz licence free ISM bands. The transmitter has two modes of operation, a conventional MCU controlled mode and a ‘stand-alone’ mode ...…

查看全部问答>

SPCE061A凌阳单片机编程红外遥控

我要做基于SPCE061A凌阳单片机红外遥控比赛计分器的设计, 需要软件编程红外识别,利用LED模组能显示比分,我需要知道利用的遥控器的名称和C编程的程序。重谢,有能帮我做的可以加QQ330254876讨论,重谢。…

查看全部问答>

请问wince模拟器上面运行的应用程序能从串口接收PC发的数据吗?

请问wince模拟器上面运行的应用程序能从串口接收PC发的数据吗?搜了,似乎都没有解决 注:我发现模拟器上那3个可以映射的串口都是给wince系统打开使用的了,我用的是wince5模拟器…

查看全部问答>

那位朋友知道那里能搞到RIL.lib的源代码?

我装了Platform Builder CE 6.0 ,在CellCore文件夹下也找到了RIL层的源程序,但是我却没找到RIL.lib中函数的实现,也就是Ril.def中定义的导出函数。比如: RIL_Initialize               &nbs ...…

查看全部问答>

发个最新构思和大家讨论讨论

本人一直很喜欢下载东西,verycd.com更是天天上,还喜欢上xunlei.com找软件 而且经常成夜成夜的挂着电脑,挂着迅雷, 电费不用说, 因为用P2P硬盘都坏掉几个, 数据吞吐量大概每天2G到10G, 看电影只看DVD高清晰版的, 装软件只下完整版的, 由于做软 ...…

查看全部问答>

200分求助 有用过SQLCE的吗? 会的请进.

我就是想用VS2005做一个小程序 在PDA上运行. 能用RDA方式操作SQL2000里的表就行. 原来用SQLite库了.但是中文乱码 那里我处理不好.所以,改回用SQLCE. 请用过的朋友教一下. 分没问题. 可以另开帖.... 我的QQ:49440483…

查看全部问答>

采用四级流水线的加法器设计综合后有问题(请教)

如题,写了一段采用四级流水线的加法器,在对比几种设计方法的性能。但用Symply pro综合后RTL图有问题。。不知为什么综合后cout和前面的链接断开了。特此请教。谢谢。 源码如下:`timescale 1ns / 1ps/////////////////////////////////////////// ...…

查看全部问答>