娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月31日(星期六)

2018年05月31日 | STM8 模擬I2C驅動0.91寸OLED屏

發布者:徽宗古泉 來源: eefocus關鍵字:STM8  模擬I2C  驅動0  91寸  OLED屏 手機看文章 掃描二維碼
隨時隨地手機看文章

#define OLED_SCLK_Clr() GPIO_ResetBits(I2C_PORT, I2C_SDA_PIN )//SDA IIC接口的時鐘信號
#define OLED_SCLK_Set() GPIO_SetBits(I2C_PORT, I2C_SDA_PIN )


#define OLED_SDIN_Clr() GPIO_ResetBits(I2C_PORT, I2C_SCL_PIN)//SCL IIC接口的數據信號
#define OLED_SDIN_Set() GPIO_SetBits(I2C_PORT, I2C_SCL_PIN)


/**************************************************
* 函數名稱:Delay()
* 函數功能:簡單延時
* 輸入參數:nCount -計數時間
**************************************************/
void Delay(uint16_t nCount)
{
  while (nCount != 0)
  {
    nCount--;
    WWDG_SetCounter(0x7F); //喂狗
  }
}
void Delay_(u32 nTime)
{
volatile unsigned int i;
        WWDG_SetCounter(0x7F); //喂狗
while(nTime--)
        {
i=1000;
while(i--);
                WWDG_SetCounter(0x7F); //喂狗
}
}
void IIC_Start()
{
OLED_SCLK_Set() ;
OLED_SDIN_Set();
OLED_SDIN_Clr();
OLED_SCLK_Clr();
}
/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{
OLED_SCLK_Set();
OLED_SDIN_Clr();
OLED_SDIN_Set();

}


void IIC_Wait_Ack()
{
OLED_SCLK_Set() ;
OLED_SCLK_Clr();
}
/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
unsigned char m,da;
da=IIC_Byte;
        WWDG_SetCounter(0x7F); //喂狗
OLED_SCLK_Clr();
for(i=0;i<8;i++)
{
m=da;
// OLED_SCLK_Clr();
m=m&0x80;
if(m==0x80)
{OLED_SDIN_Set();}
else OLED_SDIN_Clr();
da=da<<1;
OLED_SCLK_Set();
OLED_SCLK_Clr();
}
}
/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{
IIC_Start();
Write_IIC_Byte(0x78);           //Slave address,SA0=0
IIC_Wait_Ack();
Write_IIC_Byte(0x00);//write command
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Command); 
IIC_Wait_Ack();
IIC_Stop();
}
/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
    IIC_Start();
    Write_IIC_Byte(0x78);//D/C#=0; R/W#=0
IIC_Wait_Ack();
    Write_IIC_Byte(0x40);//write data
IIC_Wait_Ack();
    Write_IIC_Byte(IIC_Data);
IIC_Wait_Ack();
    IIC_Stop();
}
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{
if(cmd)
{
    Write_IIC_Data(dat);
}
else 
{
    Write_IIC_Command(dat);
}
}
/**************************************************
* 函數名稱:OLED_WrDat()
* 函數功能:I2C向OLED發送數據
**************************************************/ 
void OLED_WrDat(uint8_t IIC_Data)
{
IIC_Start();
Write_IIC_Byte(0x78);           //Slave address,SA0=0
IIC_Wait_Ack();
Write_IIC_Byte(0x40);//write command
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Data); 
IIC_Wait_Ack();
IIC_Stop();
}
void OLED_WrDat32(uint8_t IIC_Data)
{
IIC_Start();
Write_IIC_Byte(0x78);            //Slave address,SA0=0
IIC_Wait_Ack();
Write_IIC_Byte(0x20);//write command
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Data); 
IIC_Wait_Ack();
IIC_Stop();
}
/**************************************************
* 函數名稱:OLED_WrCmd()
* 函數功能:I2C向OLED發送命令
**************************************************/
void OLED_WrCmd(uint8_t IIC_Command)
{
IIC_Start();
Write_IIC_Byte(0x78);            //Slave address,SA0=0
IIC_Wait_Ack();
Write_IIC_Byte(0x00);//write command
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Command); 
IIC_Wait_Ack();
IIC_Stop();
        WWDG_SetCounter(0x7F);          //喂狗
}
/**************************************************
* 函數名稱:OLED_Set_Pos()
* 函數功能:OLED設置坐標點


**************************************************/
void OLED_Set_Pos(uint8_t x, uint8_t y) 

OLED_WrCmd(0xb0+y);
OLED_WrCmd(((x&0xf0)>>4)|0x10);
OLED_WrCmd((x&0x0f)|0x01);

/**************************************************
* 函數名稱:OLED_Fill()
* 函數功能:OLED全屏寫入
**************************************************/
void OLED_Fill(uint8_t bmp_dat) 
{
uint8_t y,x;
for(y=0;y{
OLED_WrCmd(0xb0+y);
OLED_WrCmd(0x01);
OLED_WrCmd(0x10);
for(x=0;x{OLED_WrDat(bmp_dat);}
}
}
/**************************************************
* 函數名稱:OLED_CLS()
* 函數功能:OLED清屏
**************************************************/
void OLED_CLS(void)
{
uint8_t y,x;
for(y=0;y{
OLED_WrCmd(0xb0+y);
OLED_WrCmd(0x01);
OLED_WrCmd(0x10);
for(x=0;x{OLED_WrDat(0x00);}
}
}
/**************************************************
* 函數名稱:OLED_Init()
* 函數功能:OLED初始化
**************************************************/
void OLED_Init(void)
{
Delay(500);      //初始化之前的延時很重要!
OLED_WrCmd(0xAE);//--turn off oled panel 關閉顯示
OLED_WrCmd(0x00);//---set low column address
        
OLED_WrCmd(0x10);//---set high column address
OLED_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
        
OLED_WrCmd(0x81);//--set contrast control register設置對比度
OLED_WrCmd(Brightness); // Set SEG Output Current Brightness 設置對比度
        
OLED_WrCmd(0xA0);//--Set SEG/Column Mapping     0xA0左右反置 0xA1正常(顯示前預設)
OLED_WrCmd(0xC0);//Set COM/Row Scan Direction   0xC0上下反置 0xC8正常
        
OLED_WrCmd(0xA6);//--set normal display         
OLED_WrCmd(0xA8);//--set multiplex ratio(1 to 64)
        
OLED_WrCmd(0x3F);//--1/64 duty
OLED_WrCmd(0xD3);//-set display offsetShift Mapping RAM Counter (0x00~0x3F)
        
OLED_WrCmd(0x00);//-not offset
OLED_WrCmd(0xD5);//--set display clock divide ratio/oscillator frequency
        
OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
OLED_WrCmd(0xD9);//--set pre-charge period
OLED_WrCmd(0xF1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
OLED_WrCmd(0xDA);//--set com pins hardware configuration
OLED_WrCmd(0x12);
OLED_WrCmd(0xDB);//--set vcomh
OLED_WrCmd(0x40);//Set VCOM Deselect Level
OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
OLED_WrCmd(0x02);//
OLED_WrCmd(0x8D);//--set Charge Pump enable/disable
OLED_WrCmd(0x14);//--set(0x10) disable
OLED_WrCmd(0xA4);// Disable Entire Display On  0xA4全顯 0xA5部分顯示
OLED_WrCmd(0xA6);// Disable Inverse Display On 0xA6正顯 0xA7反顯
OLED_WrCmd(0xAF);//--turn on oled panel 開啟顯示
OLED_Fill(0x00); //初始清屏
OLED_Set_Pos(0,0);

/**************************************************
* 函數名稱:OLED_Wakeup()
* 函數功能:將OLED從休眠中喚醒
**************************************************/
void OLED_Wakeup(void)
{
OLED_WrCmd(0X8D);  //設置電荷泵
OLED_WrCmd(0X14);  //開啟電荷泵
OLED_WrCmd(0XAF);  //OLED喚醒
}
/**************************************************
* 函數名稱:OLED_Wakeup()
* 函數功能:OLED休眠,功耗不到10uA
**************************************************/
void OLED_Sleep(void)
{
OLED_WrCmd(0X8D);  //設置電荷泵
OLED_WrCmd(0X10);  //關閉電荷泵
OLED_WrCmd(0XAE);  //OLED休眠
}
/**************************************************************************
* 函數名稱:OLED_ShowStr(uint8_t x, uint8_t y, uint8_t ch[], uint8_t TextSize)
* 函數功能:OLED顯示codetab.h中的ASCII字符,有6*8和8*16可選擇
* 輸入參數:x,y -- 起始點坐標(x:0~127, y:0~7); 
           ch[] -- 要顯示的字符串;
           TextSize -- 字符大小(1:6*8 ; 2:8*16)
**************************************************************************/
void OLED_ShowStr(uint8_t x, uint8_t y, uint8_t ch[], uint8_t TextSize)
{
uint8_t c = 0,i = 0,j = 0;
switch(TextSize)
{
            case 1:
            {
                    while(ch[j] != '\0')
                    {
                            c = ch[j] - 32;
                            if(x > 126)
                            {
                                    x = 0;
                                    y++;
                            }
                            OLED_Set_Pos(x,y);
                            for(i=0;i<6;i++)
                                    OLED_WrDat(F6x8[c][i]);
                            x += 6;
                            j++;
                    }
            }break;
            case 2:
            {
                    while(ch[j] != '\0')
                    {
                            c = ch[j] - 32;
                            if(x > 120)
                            {
                                    x = 0;
                                    y++;
                            }
                            OLED_Set_Pos(x,y);
                            for(i=0;i<8;i++)
                                    OLED_WrDat(F8X16[c*16+i]);
                            OLED_Set_Pos(x,y+1);
                            for(i=0;i<8;i++)
                                    OLED_WrDat(F8X16[c*16+i+8]);
                            x += 8;
                            j++;
                    }
            }break;
}
}
/**************************************************************************
* 函數名稱:OLED_ShowCN(uint8_t x, uint8_t y, uint8_t N)
* 函數功能:顯示codetab.h中的漢字,16*16點陣
* 輸入參數:x,y -- 起始點坐標(x:0~127, y:0~7); 
           tab16[] -- 漢字編碼表
           N -- 漢字在codetab.h中的索引
**************************************************************************/
void OLED_ShowCN(uint8_t x, uint8_t y, uint8_t tab16[], uint8_t N)
{
uint8_t wm=0;
uint8_t  adder=32*N;
OLED_Set_Pos(x, y);
for(wm = 0;wm < 16;wm++)
{
              OLED_WrDat(tab16[adder]);
              adder += 1;
}
OLED_Set_Pos(x,y+1);
for(wm = 0;wm < 16;wm++)
{
              OLED_WrDat(tab16[adder]);
              adder += 1;
}
}


/**************************************************************************
* 函數名稱:OLED_DrawBMP(uint8_t x0,uint8_t y0,uint8_t x1,uint8_t y1,uint8_t BMP[])
* 函數功能:顯示BMP位圖
* 輸入參數:x0,y0 -- 起始點坐標(x0:0~127, y0:0~7); 
           x1,y1 -- 起點對角線(結束點)的坐標(x1:1~128,y1:1~8)
           BMP[] -- 位圖編碼
**************************************************************************/
void OLED_ShowCN32(uint8_t x0,uint8_t y0,uint8_t x1,uint8_t y1,uint8_t BMP[])
{
uint16_t j=0;
uint8_t x,y;


      if(y1%8==0)
              y = y1/8;  
      else
              y = y1/8 + 1;
      
for(y=y0;y{
OLED_Set_Pos(x0,y);
                for(x=x0;x{
OLED_WrDat(BMP[j++]);
}
}
        WWDG_SetCounter(0x7F); //喂狗
}


/**************************************************************************
* 函數名稱:OLED_ShowCN(uint8_t x, uint8_t y, uint8_t N)
* 函數功能:顯示codetab.h中的漢字串,16*16點陣
* 輸入參數:x,y -- 起始點坐標(x:0~127, y:0~7);
           tab16[] -- 漢字編碼表
           len -- 字符串長度
**************************************************************************/
void OLED_ShowCNStr(uint8_t x, uint8_t y, uint8_t tab16[], uint8_t len)
{
  uint8_t i;
  OLED_Set_Pos(x, y);
for(i=0;i  {
    OLED_ShowCN(22+i*16, y, (uint8_t *)tab16, i);//測試顯示中文
  }
}


/**************************************************************************
* 函數名稱:OLED_DrawBMP(uint8_t x0,uint8_t y0,uint8_t x1,uint8_t y1,uint8_t BMP[])
* 函數功能:顯示BMP位圖
* 輸入參數:x0,y0 -- 起始點坐標(x0:0~127, y0:0~7); 
           x1,y1 -- 起點對角線(結束點)的坐標(x1:1~128,y1:1~8)
           BMP[] -- 位圖編碼
**************************************************************************/
void OLED_DrawBMP(uint8_t x0,uint8_t y0,uint8_t x1,uint8_t y1,uint8_t BMP[])
{
uint16_t j=0;
uint8_t x,y;


  if(y1%8==0)
y = y1/8;
  else
y = y1/8 + 1;
  
for(y=y0;y{
OLED_Set_Pos(x0,y);
    for(x=x0;x{
OLED_WrDat(BMP[j++]);
}
}
}
/**************************************************************************
* 函數名稱:OLED_DrawAll(uint8_t BMP[])
* 函數功能:全屏顯示BMP位圖,最大128*64像素
* 輸入參數:BMP[] -- 位圖編碼
**************************************************************************/
void OLED_DrawAll(uint8_t BMP[])
{
uint16_t j=0;
uint8_t x,y;


  for(y=0;y  {
    OLED_Set_Pos(0,y);
    for(x=0;x    {  
      OLED_WrDat(BMP[j++]);
    }
  }
}

關鍵字:STM8  模擬I2C  驅動0  91寸  OLED屏 引用地址:STM8 模擬I2C驅動0.91寸OLED屏

上一篇:stm8 軟件模擬IIC驅動PCF8563T,NOKIA5110液晶顯示
下一篇:淺談STM8S(1)——I2C配置

推薦閱讀

汽車工業發展面臨的包括能源、環境以及交通方面的挑戰正日益嚴峻,新能源汽車幾乎已經是代表著汽車工業未來的主要發展方向。而能源多元化、動力電動化、控制智能化將是未來汽車的標配。上升到國家層面的新能源車戰略,也讓更多汽車廠商以及相關企業開始大力投資新能源領域。全球范圍內,到目前為止已有包括荷蘭、挪威、法國、德國、英國、中國等在內的7個...
??本節原來是想講一講無源蜂鳴器發聲的原理,用于添加BGM功能。為了講原理,就寫了一些通俗的代碼,沒想到越寫越多,后來,干脆就形成了一個小小的項目吧——基于STM32與無源蜂鳴器的電子琴。燈光效果??首先想到的是做一個燈光的效果,按下哪個按鍵,哪個按鍵的燈要亮;松手后,燈滅掉。順帶,檢測一下帶松手檢測的按鍵功能好不好用。后續還可以做成通...
在科幻電影中,機器人幫助太空人工作將變成現實。日本機器人新創公司Gitai正研發一項新技術,未來可將遠程臨場(lepresence)仿真機器人送至太空,代替太空人處理艱難任務,先前該公司與日本宇宙航空研究開發機構(JAXA)合作,對機器人的實用性進行研究。 據報導,送太空人執行任務既危險又昂貴,若能遙控半自動機器人代替這項工作,宇宙航空機構預估將節...
近日,機器人領域領軍企業珞石機器人宣布完成2億元C+輪融資。本輪融資由深創投集團和遠翼投資聯合領投。截至目前,珞石機器人C系列融資累計額超3億元。本輪融資完成后,資金將進一步用于公司新產品的研發、行業應用推廣以及商業化交付。此外,據相關負責人透露,本輪融資過后,珞石機器人研發團隊正在大力研發的新一代自主知識產權xCore控制系統即將面世...

史海拾趣

問答坊 | AI 解惑

C語言編程藝術--條件編譯(zt)

有些程序在調試、兼容性、平臺移植等情況下可能想要通過簡單地設置一些參數就生成一個不同的軟件,這當然可以通過變量設置,把所有可能用到的代碼都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分代碼,就沒必要把所有的代碼都寫進去, ...…

查看全部問答∨

【電機分類】-轉載

電動車常用電機一般是直流電機,用有、無永久磁鐵分類,有永磁電機和串激電機兩類。電機旋轉的部分叫轉子,不轉動的部分叫定子。永磁電機的轉子或者定子有一個是永久磁鐵,另一個則是漆包線繞制的線包;串激電機(也叫串勵電機)的轉子和定子都是漆 ...…

查看全部問答∨

手機SIM卡編號的含義

replyreload += \',\' + 376465;Timson,如果您要查看本帖隱藏內容請回復…

查看全部問答∨

請教關于高精度AD變換

    請教各位大俠,如果希望做高精度AD變換,如穩定度需要達到16位,應該用單片機上自帶的24位的AD變換器好呢?還是用專門的24的AD變換芯片好呢?…

查看全部問答∨

如何讓開發的驅動程序和應用程序一一對應呢

我開發一個驅動程序.sys和一個應用程序.exe,應用程序可以調用加載到內核的驅動 程序,我看資料說驅動程序的派遣函數是運行在應用程序的進線程的上下文中了,那 么我可以獲得應用程序的模式(PE加載到內核中)的資料么?然后再驅動里做點東西 可 ...…

查看全部問答∨

提點意見,能不能把論壇敲鐘的聲音關了?

以前挺好的,自從有了這個聲音,覺得太俗了,以前有論壇有過。 讓人聽著也不舒服,畢竟是強加的東西 個人覺得有損論壇的形象…

查看全部問答∨

KeilMDK+Ulink2如何支持Flash大于128K的STM32芯片

Keil MDK+Ulink2 如何支持Flash大于128K的STM32芯片…

查看全部問答∨

電子設計競賽賽題的出題的過程和思路

本帖最后由 paulhyde 于 2014-9-15 09:17 編輯 …

查看全部問答∨

求助

我用的是ccs4.1.2的版本,在用28335的工程編譯的時候經常出現這種情況,我按照提示的看了.gel文件也看不出什么問題 有誰遇到過這種情況嗎 怎么解決的 謝謝了…

查看全部問答∨

如何降低UCD30xx 系列數字電源控制器DPWM抖動

摘要:UCD30xx 系列數字電源控制器包括UCD3040、UCD3020 以及UCD3028,主要應用在交直變換(AC/DC)電源和隔離的直直變換(DC/DC)電源上。數字電源和模擬電源原理是一樣的,但數字電源所使用的值都是數字量,是模擬量離散化后的值,所以不可避免的 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 渭南市| 天峨县| 周宁县| 广汉市| 东乡| 永德县| 都兰县| 清流县| 贞丰县| 屯留县| 黎川县| 随州市| 永州市| 纳雍县| 永昌县| 隆德县| 徐水县| 迁西县| 永清县| 佛学| 安新县| 平利县| 玉门市| 商洛市| 永川市| 东兰县| 余姚市| 建平县| 河东区| 晴隆县| 高唐县| 宝应县| 海口市| 盖州市| 苗栗市| 阿坝| 榆中县| 巨野县| 大石桥市| 安西县| 清流县|