历史上的今天
今天是: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;
下一篇:51单片机自动售水机程序
史海拾趣
|
来源:电源技术应用/黄庆义,胡荣强,王闯瑞核心器件: UC3842 0 引言 UC3842是美国Unltmde公司生产的一种性能优良的电流控制型脉宽调制芯片,它具有管脚数量少,外围电路简单等特点,因而得到了广泛的应用。但随着UC3842开关频率的提高,由它所 ...… 查看全部问答> |
|
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凌阳单片机红外遥控比赛计分器的设计, 需要软件编程红外识别,利用LED模组能显示比分,我需要知道利用的遥控器的名称和C编程的程序。重谢,有能帮我做的可以加QQ330254876讨论,重谢。… 查看全部问答> |
|
请问wince模拟器上面运行的应用程序能从串口接收PC发的数据吗? 请问wince模拟器上面运行的应用程序能从串口接收PC发的数据吗?搜了,似乎都没有解决 注:我发现模拟器上那3个可以映射的串口都是给wince系统打开使用的了,我用的是wince5模拟器… 查看全部问答> |
|
我装了Platform Builder CE 6.0 ,在CellCore文件夹下也找到了RIL层的源程序,但是我却没找到RIL.lib中函数的实现,也就是Ril.def中定义的导出函数。比如: RIL_Initialize &nbs ...… 查看全部问答> |
|
本人一直很喜欢下载东西,verycd.com更是天天上,还喜欢上xunlei.com找软件 而且经常成夜成夜的挂着电脑,挂着迅雷, 电费不用说, 因为用P2P硬盘都坏掉几个, 数据吞吐量大概每天2G到10G, 看电影只看DVD高清晰版的, 装软件只下完整版的, 由于做软 ...… 查看全部问答> |
|
我就是想用VS2005做一个小程序 在PDA上运行. 能用RDA方式操作SQL2000里的表就行. 原来用SQLite库了.但是中文乱码 那里我处理不好.所以,改回用SQLCE. 请用过的朋友教一下. 分没问题. 可以另开帖.... 我的QQ:49440483… 查看全部问答> |
|
如题,写了一段采用四级流水线的加法器,在对比几种设计方法的性能。但用Symply pro综合后RTL图有问题。。不知为什么综合后cout和前面的链接断开了。特此请教。谢谢。 源码如下:`timescale 1ns / 1ps/////////////////////////////////////////// ...… 查看全部问答> |




