网上有关“跪求驱动型号为SA1101A的OLED模块与单片机直接连接的初始化程序和一些简单的示例程序?”话题很是火热,小编也是针对跪求驱动型号为SA1101A的OLED模块与单片机直接连接的初始化程序和一些简单的示例程序?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
您好:手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,咨询加微信【】很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的
1.手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,通过添加客服微信
2.咨询软件加微信【】在"设置DD功能DD微信手麻工具"里.点击"开启".
3.打开工具.在"设置DD新消息提醒"里.前两个选项"设置"和"连接软件"均勾选"开启"(好多人就是这一步忘记做了)
4.打开某一个微信组.点击右上角.往下拉."消息免打扰"选项.勾选"关闭"(也就是要把"群消息的提示保持在开启"的状态.这样才能触系统发底层接口)
楼主写错了吧,应该是SH1101A,以下供参考:
#define uchar unsigned char
#define uint unsigned int
sbit res=P1^0;
sbit cs=P1^1;
sbit a0=P1^2;
/*********************************************************/
void delay_ms(uint sec)
{
uint i;
while(sec--)
{
for(i=0;i<1000;i++)
{
;
}
}
}
void write_c(uchar comm)
{
cs=0;
a0=0;
WR=0;
P0=comm;
WR=1;
cs=1;
}
void write_d(uchar dat)
{
cs=0;
a0=1;
WR=0;
P0=dat;
WR=1;
cs=1;
}
/**********************SH1101A初始化*************************/
void init_program()
{
write_c(0xae);
write_c(0xad); //master configuration
write_c(0x8b); //
write_c(0xd5); //Set Display Clock Divide Ratio/Oscillator Frequency
write_c(0xf0);
write_c(0xa8); //Set Mux
write_c(0x3f); //64
write_c(0xd9); //Set Pre-charge Period
write_c(0x1c);
write_c(0xa1); //Set Segment Re-map (0xa0 normal,0xa1 reverse)
write_c(0xda); //Set COM Pins Hardware Configuration
write_c(0x12); //COM两端引出,左右不镜像
write_c(0x81); //set contrast control for bank0
write_c(0x64);
write_c(0xa4); //out follows RAM content
write_c(0xa6); //Set Normal/Inverse Display (0xa6 normal,0xa7 inverse)
write_c(0xc8); //Set COM Output Scan Direction (0xc0 normal,0xc8 reverse)
write_c(0xdb); //Set VCOMH Deselect Level
write_c(0x40);
write_c(0xaf); //Set Display ON/OFF
}
/**********************清屏*************************/
void clear_screen()
{
uint i,j;
for(i=0;i<8;i++)
{
write_c (0xb0+i);
write_c (0x10);
write_c (0x02);
for(j=0;j<128;j++)
write_d(0);
}
}
/**********************全显*************************/
void all_screen()
{
uint i,j;
write_c(0xaf); //display on
write_c(0x40); //display start line:0
for(i=0;i<8;i++)
{
write_c (0xb0+i); //set page address
write_c (0x10); //column high bits
write_c (0x02); //column low bits
for(j=0;j<128;j++)
write_d (0xff);
}
}
求大神在keil上帮写51单片机C语言程序
/*这是用LCD显示所测温度的代码,你参考一下,如果没问题的话,其他的功能你再添加就好了,不难*/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define Nack_number 10
//**************端口定义**************************************************
uchar flag; //LCD控制线接口
sbit RS=P1^0; ? //RS端
sbit RW=P1^1; ? //读写端
sbit LCDE=P2^5; ? //使能端
//mlx90614端口定义
sbit SCK=P2^1; //时钟线
sbit SDA=P2^2; //数据线
//************数据定义****************************************************
bdata uchar flag1; //可位寻址数据
sbit bit_out=flag1^7;
sbit bit_in=flag1^0;
uchar tempH,tempL,err;
//************************** ?LCD1602 ?***********************************
//向LCD写入命令或数据*****************************************************
#define LCD_COMMAND 0 ? //命令
#define LCD_DATA 1 ? // 数据
#define LCD_CLEAR_SCREEN 0x01 ? // 清屏
#define LCD_HOMING ? 0x02 ? // 光标返回原点
//设置显示模式******* 0x08+ ? *********************************************
#define LCD_SHOW 0x04 //显示开
#define LCD_HIDE 0x00 //显示关
#define LCD_CURSOR 0x02 //显示光标
#define LCD_NO_CURSOR 0x00 //无光标
#define LCD_FLASH 0x01 //光标闪动
#define LCD_NO_FLASH 0x00 //光标不闪动
//设置输入模式********** 0x04+ ********************************************
#define LCD_AC_UP 0x02 //光标右移 AC+
#define LCD_AC_DOWN 0x00 ? //默认 光标左移 AC-
#define LCD_MOVE 0x01 ? //画面可平移
#define LCD_NO_MOVE 0x00 ? //默认 画面不移动
//************************** ?mlx90614 ?***********************************
//command mode ?命令模式
#define RamAccess 0x00 //对RAM操作
#define EepomAccess 0x20 //对EEPRAM操作
#define Mode 0x60 //进入命令模式
#define ExitMode 0x61 //退出命令模式
#define ReadFlag 0xf0 //读标志
#define EnterSleep 0xff //进入睡眠模式
//ram address read only RAM地址(只读)
#define AbmientTempAddr 0x03 //周围温度
#define IR1Addr0x04
#define IR2Addr0x05
#define LineAbmientTempAddr 0x06 ? //环境温度
/*0x0000 0x4074 16500 0.01/单元
?-40 ? 125*/
#define LineObj1TempAddr 0x07 //目标温度,红外温度
/*0x27ad-0x7fff 0x3559 22610 0.02/单元
-70.01-382.19 ?0.01 ? 452.2*/#define LineObj2TempAddr 0x08
//eepom address ?EEPROM地址
#define TObjMaxAddr 0x00//测量范围上限设定
#define TObjMinAddr 0x01//测量范围下限设定
#define PWMCtrlAddr 0x02//PWM设定
#define TaRangeAddr 0x03//环境温度设定
#define KeAddr 0x04//频率修正系数
#define ConfigAddr 0x05//配置寄存器
#define SMbusAddr 0x0e//器件地址设定
#define Reserverd1Addr 0x0f//保留
#define Reserverd2Addr 0x19//保留
#define ID1Addr 0x1c//ID地址1
#define ID2Addr 0x1d//ID地址2
#define ID3Addr 0x1e//ID地址3
#define ID4Addr 0x1f//ID地址4
//************函数声明*****************************************************
void start(); //MLX90614发起始位子程序
void stop(); //MLX90614发结束位子程序
uchar ReadByte(void); //MLX90614接收字节子程序
void send_bit(void); //MLX90614发送位子程序
void SendByte(uchar number); //MLX90614接收字节子程序
void read_bit(void); //MLX90614接收位子程序
void delay(uint N); //延时程序
uint readtemp(void); //读温度数据
void init1602(void); //LCD初始化子程序
void busy(void); //LCD判断忙子程序
void cmd_wrt(uchar cmd); //LCD写命令子程序
void dat_wrt(uchar dat); //LCD写数据子程序
void display(uint Tem); //显示子程序
void Print(uchar *str); //字符串显示程序
//*************主函数*******************************************
void main()
{
uint Tem; //温度变量
SCK=1;
SDA=1;
delay(4);
SCK=0;
delay(1000);
SCK=1;
init1602(); //初始化LCD
while(1)
{
Tem=readtemp();//读取温度
cmd_wrt(0x01);//清屏
Print(" ?Temperature: "); //显示字符串 ?Temperature: 且换行
display(Tem);//显示温度
Print(" ^C");//显示摄氏度
delay(10000);//延时再读取温度显示
}
}
void Print(uchar *str)//字符串显示程序
{
while(*str!='\0')//直到字符串结束
{
dat_wrt(*str);//转成ASCII码 ?
str++; //指向下一个字符
}
}
//*********输入转换并显示*********
void display(uint Tem)
{
uint T,a,b;
T=Tem*2;
if(T>=27315) //温度为正
{
T=T-27315; //
a=T/100; //温度整数
b=T-a*100; //温度小数
if(a>=100) //温度超过100度
{
dat_wrt(0x30+a/100); //显示温度百位
dat_wrt(0x30+a%100/10); //显示温度十位
dat_wrt(0x30+a%10);//显示温度个位
}
else if(a>=10)//温度超过10度
{
dat_wrt(0x30+a%100/10); //显示温度十位
dat_wrt(0x30+a%10);//显示温度个位
}
else //温度不超过10度
{
dat_wrt(0x30+a);//显示温度个位
}
dat_wrt(0x2e);//显示小数点
if(b>=10) //温度小数点后第1位数不等于0
{
dat_wrt(0x30+b/10); //显示温度小数点后第1位数
dat_wrt(0x30+b%10); //显示温度小数点后第2位数
}
else //温度小数点后第1位数等于0
{
dat_wrt(0x30); //显示温度小数点后第1位数0
dat_wrt(0x30+b);//显示温度小数点后第2位数
}
}
else //温度为负
{
T=27315-T;
a=T/100;
b=T-a*100;
dat_wrt(0x2d);//显示负号
if(a>=10) //温度低于负10度
{
dat_wrt(0x30+a/10);//显示温度十位
dat_wrt(0x30+a%10);//显示温度个位
}
else //温度高于负10度
{
dat_wrt(0x30+a);//显示温度个位
}
dat_wrt(0x2e);//显示小数点
if(b>=10) //温度小数点后第1位数不等于0
{
dat_wrt(0x30+b/10);//显示温度小数点后第1位数
dat_wrt(0x30+b%10);//显示温度小数点后第2位数
}
else //温度小数点后第1位数等于0
{
dat_wrt(0x30); //显示温度小数点后第1位数0
dat_wrt(0x30+b);//显示温度小数点后第2位数
}
}
}
//************************************
void start(void) //停止条件是 SCK=1时,SDA由1到0
{
SDA=1;
delay(4);
SCK=1;
delay(4);
SDA=0;
delay(4);
SCK=0;
delay(4);
}
//------------------------------
void stop(void) //停止条件是 SCK=1时,SDA由0到1
{
SCK=0;
delay(4);
SDA=0;
delay(4);
SCK=1;
delay(4);
SDA=1;
}
//---------发送一个字节---------
void SendByte(uchar number)
{
uchar i,n,dat;
n=Nack_number; //可以重发次数
Send_again:
dat=number;
for(i=0;i<8;i++) //8位依次发送
{
if(dat&0x80) ? //取最高位
{
bit_out=1; //发1
}
else
{
bit_out=0; //发0
}
send_bit(); //发送一个位
dat=dat<<1; //左移一位
}
read_bit(); ? //接收1位 应答信号
if(bit_in==1) //无应答时重发
{
stop();
if(n!=0)
{
n--; //可以重发Nack_number=10次
goto Repeat; //重发
}
else
{
goto exit;//退出
}
}
else
{
goto exit;
}
Repeat:
start(); //重新开始
goto Send_again;//重发
exit: ; //退出
}
//-----------发送一个位---------
void send_bit(void)
{
if(bit_out==1)
{
SDA=1; ? //发1
}
else
{
SDA=0; ? //发0
}
_nop_();
SCK=1; ? //上升沿
delay(4);delay(4);
SCK=0;
delay(4);delay(4);
}
//----------接收一个字节--------
uchar ReadByte(void)
{
uchar i,dat;
dat=0; //初值为0
for(i=0;i<8;i++)
{
dat=dat<<1; //左移
read_bit(); //接收一位
if(bit_in==1)
{
dat=dat+1;//为1时对应位加1
}
}
SDA=0; //发送应答信号0
send_bit();
return dat; //带回接收数据
}
//----------接收一个位----------
void read_bit(void)
{
SDA=1; //数据端先置1
bit_in=1;
SCK=1; //上升沿
delay(4);delay(4);
bit_in=SDA; //读数据
_nop_();
SCK=0;
delay(4);delay(4);
}
//------------------------------
uint readtemp(void)
{
SCK=0;
start(); //开始条件
SendByte(0x00); //发送从地址00
SendByte(0x07); //发送命令
start(); //开始条件
SendByte(0x01); //读从地址00
bit_out=0;
tempL=ReadByte();//读数据低字节
bit_out=0;
tempH=ReadByte();//读数据高字节
bit_out=1;
err=ReadByte(); //读错误信息码
stop(); //停止条件
return(tempH*256+tempL);
}
//******************LCD显示子函数***********************
void init1602(void) //初始化LCD
{
cmd_wrt(0x01); //清屏
cmd_wrt(0x0c); //开显示,不显示光标,不闪烁
cmd_wrt(0x06); //完成一个字符码传送后,光标左移,显示不发生移位
cmd_wrt(0x38); //16×2显示,5×7点阵,8位数据接口
}
void busy(void) //LCD忙标志判断
{
flag=0x80; //赋初值 高位为1 禁止
while(flag&0x80)//读写操作使能位禁止时等待 继续检测
{
P0=0xff;
RS=0; //指向地址计数器
RW=1; //读
LCDE=1; //信号下降沿有效
flag=P0; //读状态位 高位为状态
LCDE=0;
}
}
void cmd_wrt(uchar cmd) //写命令子函数
{
LCDE=0;
busy(); //检测 读写操作使能吗
P0=cmd; //命令
RS=0; //指向命令计数器
RW=0; //写
LCDE=1; //高电平有效
LCDE=0;
}
void dat_wrt(uchar dat) //写数据子函数
{
busy(); //检测 读写操作使能吗
LCDE=0;
if(flag==16)
{
RS=0; //指向指令寄存器
RW=0; //写
P0=0XC0; //指向第二行
LCDE=1; //高电平有效
LCDE=0;
}
RS=1; //指向数据寄存器
RW=0; //写
P0=dat; //写数据
LCDE=1; //高电平有效
LCDE=0;
}
//------------延时--------------
void delay(uint n)
{
uint j;
for(j=0;j<n;j++)
{
_nop_();
}
}
//第一个实验:
//假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2?...?D18连接P0.7
//假设K1按键在P2.3引脚
#include<reg51.h>
#include<intrins.h>
sbit?k1=P2^3;//假设K1按键在P2.3引脚
void?main()
{
P0=0xfe;
while(1)
{
if(k1==0)
{
while(k1==0);
P0=_crol_(P0,1);
}
}
}
//第二个实验:
//假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2?...?D18连接P0.7
#include<reg51.h>
char?led[]={0xfe,0xff,0xfd,0xff,0xfb,0xff,0xf7,0xff,0xef,0xff,0xdf,0xff,0xbf,0xff,0x7f,0xff};
void?main()
{
char?i=0;
char?counter=0;
TMOD=0x01;//T0?工作方式1
TH0=(655356-50000)/256;//延时50ms
TL0=(655356-50000)%256;//延时50ms
TR0=1;//启动T0
while(1)
{
if(TF0==1)//查询
{
TH0=(655356-50000)/256;//重新延时50ms
TL0=(655356-50000)%256;//重新延时50ms
counter++;
if(counter==10)//延时0.5秒
{
counter=0;//重新开始新一轮0.5秒延时
i++;
if(i==16)
{
i=0;
}
P0=led[i];//点灯
}
}
}
}
关于“跪求驱动型号为SA1101A的OLED模块与单片机直接连接的初始化程序和一些简单的示例程序?”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!