久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
CH32V103單片機硬件IIC加載兩個IIC外設 源程序
[打印本頁]
作者:
隨緣57
時間:
2022-4-19 08:22
標題:
CH32V103單片機硬件IIC加載兩個IIC外設 源程序
這里提供了CH32V103R8T6核心板I2C1同時加載DS3231和IIC接口0.91吋OLED的程序代碼,讀取DS3231的時間數據,然后顯示在OLED上。
源程序如下:
/*
*@Note
用途:使用I2C1驅動SSD1306主控、i2c接口的0.91吋或0.96吋OLED。
如果使用I2C2,需要將SSet_IIC()和ssd1306.h中的OLED_WriteByte()函數中的I2C1改為I2C2
并且將Set_IIC()中的 GPIO_Pin_6 | GPIO_Pin_7 改為 GPIO_Pin_10 | GPIO_Pin_11
*/
#include "codeTab.h"
#include "ssd1306_i2c.h"
#include "debug.h"
/* Global typedef */
/* Global define */
/* Global Variable */
u16 i; //計數用變量
void Set_IIC(void) //選擇I2C1
{
I2C_InitTypeDef I2C_InitStructure; //聲明i2c
GPIO_InitTypeDef GPIO_InitStructure; //聲明GPIO
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); //打開i2c1時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //打開GPIO時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; //i2c1引腳
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO端口輸出速率
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必須復用開漏輸出
GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIO端口B,SCL-PB10,SDA-PB11
I2C_DeInit(I2C1); //外設寄存器配置為默認
I2C_AcknowledgeConfig(I2C1,ENABLE);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x30;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 400000;
I2C_Cmd(I2C1, ENABLE);
I2C_Init(I2C1, &I2C_InitStructure);
}
/************* @以上為i2c設置及數據發送函數 ****************/
void DS3231_ByteWrite(u8 addr, u8 data)
{
I2C_AcknowledgeConfig(I2C1,ENABLE);
I2C_GenerateSTART(I2C1,ENABLE);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,0xD1,I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1,addr);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTING));
I2C_SendData(I2C1,data);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2C1,ENABLE);
}
u8 DS3231_ByteRead(u8 nAddr)
{
I2C_AcknowledgeConfig(I2C1,ENABLE);
I2C_GenerateSTART(I2C1,ENABLE);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)){;}
I2C_Send7bitAddress(I2C1,0xD0,I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)){;}
I2C_SendData(I2C1,nAddr);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)){;}
I2C_GenerateSTART(I2C1,ENABLE);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)){;}
I2C_Send7bitAddress(I2C1,0xD1,I2C_Direction_Receiver);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)){;}
I2C_AcknowledgeConfig(I2C1,DISABLE);
I2C_GenerateSTOP(I2C1,ENABLE);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)){;}
return I2C_ReceiveData(I2C1);
}
u8 BCD2HEX(u8 val) //BCD轉換為Byte
{
u8 i;
i= val&0x0f;
val >>= 4;
val &= 0x0f;
val *= 10;
i += val;
return i;
}
u16 B_BCD(u8 val)//B碼轉換為BCD碼
{
u8 i,j,k;
i=val/10;
j=val%10;
k=j+(i<<4);
return k;
}
/************* @以上為DS3231相關函數 ****************/
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200);
printf("****************\r\n");
printf("This is DS3231 example\r\n");
Set_IIC();
printf("Set IIC OK!\r\n");
Delay_Ms(3000);
OLED_Init(); //OLED初始化
OLED_Fill(0xff); //滿屏點亮,提示OLED能夠工作
Delay_Ms(500);
OLED_Fill(0x00); //清屏
OLED_ShowStr(0, 0, "I2C1-DS3231-OLED", 2);
OLED_ShowSZ(0, 32, 2, 2);
OLED_ShowSZ(0, 40, 2, 2);
OLED_ShowStr(48, 3, ":",1);
OLED_ShowSZ(0, 56, 2, 2);
OLED_ShowSZ(0, 64, 2, 2);
OLED_ShowStr(72, 3, ":",1);
OLED_ShowSZ(0, 80, 2, 2);
OLED_ShowSZ(0, 88, 2, 2);
u8 tt=0;
u8 aa=0;
u8 bb=0;
while(1)
{
printf("********* \r\n");
tt=BCD2HEX(DS3231_ByteRead(0x06));
//printf(" year:%d\n",tt);
tt=BCD2HEX(DS3231_ByteRead(0x05));
//printf(" month:%d\n",tt);
tt=BCD2HEX(DS3231_ByteRead(0x04));
//printf(" day:%d\n",tt);
tt=BCD2HEX(DS3231_ByteRead(0x02));
//printf(" hour:%d\n",tt);
aa=tt/10;
bb=tt-aa*10;
OLED_ShowSZ(aa, 32, 2, 2);
OLED_ShowSZ(bb, 40, 2, 2);
tt=BCD2HEX(DS3231_ByteRead(0x01));
//printf(" min:%d\n",tt);
aa=tt/10;
bb=tt-aa*10;
OLED_ShowSZ(aa, 56, 2, 2);
OLED_ShowSZ(bb, 64, 2, 2);
tt=BCD2HEX(DS3231_ByteRead(0x00));
//printf(" sec:%d\n",tt);
//printf(" ********* %d\n");
aa=tt/10;
bb=tt-aa*10;
OLED_ShowSZ(aa, 80, 2, 2);
OLED_ShowSZ(bb, 88, 2, 2);
Delay_Ms(995);
}
}
復制代碼
MounRiver_Studio代碼工程下載:51hei附件下載:
test.7z
(338.32 KB, 下載次數: 16)
2022-4-19 16:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
水裳念
時間:
2022-5-24 07:41
可以,我覺得不錯
作者:
simba1234
時間:
2022-8-29 16:40
樓主用CH32V用的挺嗨啊 我還沒嘗試這個
作者:
滑動的憨憨
時間:
2023-5-2 18:16
CH32V用起來怎么樣啊,沒用過
作者:
滑動的憨憨
時間:
2023-9-24 20:41
CH32V103做項目和STM32F103相比如何
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品一区在线观看
|
国产在线精品一区二区
|
精品无码久久久久久国产
|
91精品国模一区二区三区
|
中文在线a在线
|
91精品在线播放
|
国产免费a视频
|
中文字幕成人av
|
亚洲v区
|
一区二区三区视频
|
国产精品久久久久久婷婷天堂
|
亚洲精品视频免费
|
精品国产第一区二区三区
|
欧美日在线
|
北条麻妃99精品青青久久主播
|
五月激情综合网
|
欧美老妇交乱视频
|
黄视频免费
|
日韩精品一区二区三区中文字幕
|
av久久
|
免费v片
|
在线播放91
|
久久精品亚洲国产
|
三级欧美
|
99久久精品免费看国产四区
|
欧美专区在线
|
久久久久国产精品免费免费搜索
|
一区二区三区小视频
|
成年人网站国产
|
久久国产精品久久久久久久久久
|
欧美日韩在线精品
|
欧美精品久久
|
亚洲影视在线
|
粉嫩一区二区三区四区公司1
|
亚洲最大av网站
|
日本精品一区二区
|
午夜视频免费在线观看
|
日韩欧美大片
|
天天爽夜夜爽精品视频婷婷
|
大陆一级毛片免费视频观看
|
九色在线
|